您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

一篇文章教你搞定脚本监控

时间:2019-10-08 11:00:28  来源:  作者:

一,Python简介

二,监控基本原理

三,监控框架代码分析

四,监控源代码分析

五, 文章总结有福利

为什么要脚本监控呢,这是个非常严重需要注意的问题,为什么需要一个脚本监控,

因为脚本监控是服务器的进程,

如果写代码不够健壮,他运行十几天二十几天他突然蹦了,怎么办如果这时候有一个脚本去监控服务进程就可以节省自己很多时间,

一,Python简介

Python是近年来最火的一个热点,没有之一。从性质上来讲它和我们熟知的C、JAVAphp等没有什么本质的区别,也是一种开发语言,而且已经进阶到主流的二十多种开发语言的top 5(数据源自最新的TIOBE排行榜)。

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

优点

1.“优雅”、“明确”、“简单”- 所以Python程序看上去总是简单易懂,

2. 开发效率高- Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,

3. 高级语言- 当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

4,如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

5. 由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

6. 如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

缺点

7. 代码运行速度慢

8. 发布程序时必须公开源代码

二,监控基本原理

1. cactio

cacti不是监控工具,他是个依赖于SNMP的数据采集和数据呈现的工具。

数据采集、 保存数据[SQL, txt].

数据展示(rrdtool 绘图)。

数据分析和报警(很一般)。

2. nagIOS

功能:数据报警(报警功能是Nagios的特色功能) [ 故障触发,故障恢复都可以。

依赖分析报警(能自动的识别到关键设备的故障,关联设备不会报警)。

数据采集(采集的数据是弱项,他只关心警戒位,只关心正常与否的状态,状态转换时可以实现报警,所以它采集的数据不需要保存),当然也有插件弥补这个不足,如PNP4Nagios。

3. zabbix (php)(推荐)

Nagiostcacti整合互相弥补不足!I

nagios和 cacti不适合超大规模的监控、由于大规模的带宽和网络限制,会导致监控的延迟等问题,所以有很多是 nagios+ cacti整合,但是依然不适合在大规模的环境中,不适合分布式部署, Nagios在大规模中就会出现延迟,失

去 Nagios本事的特色。

那么 zabbix同时整合了 cacti和 Nagios特点的工具,而且还具有了前两者不具有的工具,支持分布式等等。

4. 补充工具:

netdata:托管在github上的一款类型zabbix的开源监控工具https:/

/github. com/firehol/netdata

open- falcon:小米公司开源的企业级监控工具(python)(推荐)

Ganglia类似于 zabbix,大型分布式监控系统

开源监控工具对比http://www.oschina.net/news/67525/monitoring-tools

5. 监控软件数据采集的方式

SNMP 协议。

agent 代理的方式去采集数据。

shell 脚本api 接口

6. 数据展示方式

php html App

7. 数据告警

mail,msm,微信,电话,钉钉机器人

三,框架源代码分析

常见shell

一篇文章教你搞定脚本监控

 

基本结构

  • vim file.sh
一篇文章教你搞定脚本监控

 

  • chmod +x file.sh #授权
  • sh +xv file.sh #调试
  • ./file.sh #绝对路径,执行脚本

基本脚本构成

  • 命令
  • 变量
  • 单一目的的小程序,由shell来解释命令并告诉kernel;
  • set
  • -e 这句语句告诉bash如果任何语句的执行结果不是true则应该退出
  • -c dir:在读取 makefile 之前改变到指定的目录dir;
  • 管道
  • 重定向
  • 退出

命令

  • 替换:变量=${变量}、变量=$(命令)、变量=表达式、变量=‘字符串’、变量=值
  • 查看:echo $X
  • 赋值:expr
  • 运算:let、&成功执行命令2、||#失败执行命令2
一篇文章教你搞定脚本监控

 

if [-n/-z $string] #如果string非空/空,返回True;

if [xx1 -d/-a/-o xx2] #不存在、并列(文件1比文件2新)、或;

[-e/-d/-f/-L/-r/-s/-h FILENAME] #如果FILENAME存在/为目录/为常规文件/符号链接/可读/长度不为0/软链接,则为真

  • 比较:-gt、-lt、-eq
  • 处理:#、%、/
  • 特殊变量(参数)
一篇文章教你搞定脚本监控

 

  • 移动:shift #把变量从参数数组中移除

范围

seq a b

seq -w b

循环、条件

  • for
一篇文章教你搞定脚本监控

 

  • if
一篇文章教你搞定脚本监控

 

  • while
一篇文章教你搞定脚本监控

 

xpect

例题:

1. 测试一:监控磁盘的使用率,>90%时给root发邮件

一篇文章教你搞定脚本监控

 

2.测试二:写一个脚本解决DOS攻击生产案例

提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。

法一:

# !/bin/bash

IP=`netstat -nut | awk '{print $5}' | cut -d: -f1 | grep -o '.*[0-9]' | awk '{++ip[$1]}END{for(i in ip)print ip[$1],i}' | sort -n

一篇文章教你搞定脚本监控

 

IP=`netstat -nut | awk '{print $5}' | cut -d: -f1 | grep -o '.*[0-9]' | awk '{++ip[$1]}END{for(i i n ip)print ip[$1],i}' | sort -n | awk '{if($1>1)p rint $2}'`

一篇文章教你搞定脚本监控

 

3. 测试三:查看10.0.0.0/24网段中的在线用户数;

ping:测试主机间网络的连通性

一篇文章教你搞定脚本监控

 

22. env CLOUD_MySQL_ENV=test exec /opt/cloud_mysql/bin/uwsgi --die-on-term --ini /opt/cloud_mysql/conf/uwsgi.in

一篇文章教你搞定脚本监控

 

nmap:一款开源的网络探测器和安全审核工具,它可以快速扫描大型网络

一篇文章教你搞定脚本监控

 

4. 批量创建文件及改名(不同的系统语法有所不同,此为另一种思路)

一篇文章教你搞定脚本监控

 

15.passwd=`echo $(date+%t%N)$RANDOM|md5sum|cut -c 2-9` #$RANDOM表示内部变量,可以创建随机数;date+X%设置系统时间格式

16. useradd oldboy$n >&/dev/null&& user_status=$?

17. echo "$passwd"|passwd --stdinoldboy$n >&/dev/null && pass_status=$? #用echo xxx | yyy --stdin zzz,其中xxx为和终端交互内容

一篇文章教你搞定脚本监控

 

python

一篇文章教你搞定脚本监控

 

#当前时间

time.strtime(’%y-%m-%d’)

#磁盘状态

os.open('df -h ',‘r’).readline()

#表示形态

‘n’.join(xxx)

#写入数据

f.write(’%s’ % str)、f.flush() 、f.close()

四,监控源代码分析

1,PS命令查看linux程序进程

一篇文章教你搞定脚本监控

 

2,shell脚本

利用PS命令查看server进程的状态,如死亡、就重新启动。做一个死循环轮训。

一篇文章教你搞定脚本监控

 

30秒去轮询这个这个进程。死亡就继续重启。

3,效果

一篇文章教你搞定脚本监控

 

PS查看进程号,此时procnum = 3 然后用kill 命令杀死进程之后

一篇文章教你搞定脚本监控

 

然后脚本检测到后,进而重启。这时server的进程号已经变化。这样server服务器的进程就完成的死亡重启的监控。

综合起来这句指令的意思就是:

以详细格式查看所有进程,从中选出具有关键字 Manipulator 的进程,但是排除掉用于查找的grep自身进程,对于满足上面条件的结果,统计其行数,也就是看有几个带有Manipulator关键字的进程,将统计的结果赋值给变量monitor 。

if…then…else…fi : shell脚本里面 if 语句的用法, fi 符号与 if 符号成对使用,表示 if 语句的结束。

if [ $monitor -eq 0 ] : if 语句的判断用 test 或者 “[ ]” ,符号” $“ 表示取变量的值, -eq表示等于, -gt大于, -lt小于, -ge大于等于,-le小于等于。

echo :用于输出显示。

一篇文章教你搞定脚本监控

 

用于运行Manipulator程序。

二、对使用python打开的多个程序的监控

因为知道自己想要监控的程序的具体名字,所以对于这一类程序的监控也可以用上面的方法,但是这一类情况也让我们思索另一种方法进行监控。

在我的 /home/mk90/Documents/restart_pro 文件夹里有 test.py 和 test2.py 两个python程序,现在我要看这两个程序是否已经打开,如果没有就打开它们。

multi_restart.sh

一篇文章教你搞定脚本监控

 


一篇文章教你搞定脚本监控

 

declare -a Array : 表示声明了一个数组 Array

一篇文章教你搞定脚本监控

 

这句指令包含的内容较多

pgrep 是通过程序的名字来查询进程的工具;

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,详细用法可以参考

https://blog.csdn.net/zhushuai1221/article/details/53114178

sed -n 1p : 的作用就是对前面查找的结果,读取第一行,同样 sed -n 2p 就是读取第二行 ;

awk '{print $1}’ : awk命令通常是将所列出的行,根据条件打印出某一列或几列,这里就是打印以空格为分隔符的第一列(其实也只有一列,因为pgrep命令只输出进程的pid号;

那么

一篇文章教你搞定脚本监控

 

两条指令的意思就是,查看名为python的进程,把查到的第一个进程的pid号赋值给Array[0],把第二个赋值给Array[1];

后面的判断就是只要有进程pid号,说明进程存在,否则进程不存在。

一篇文章教你搞定脚本监控

 

这句代码的意思就是打开一个新的终端,执行命令 ”python /home/mk90/Documents/restart_pro/test2.py“,执行完毕后该终端保持存在不关闭。

gnome-terminal 是终端的一种,Ubuntu系统的终端就是这种版本, 参数 -x 表示后面出现的都当做命令执行,并且只执行一次;

bash 是防止终端立即关闭,如果输入:

一篇文章教你搞定脚本监控

 

终端执行后会一闪就关闭,甚至看不到执行的效果;

"-c"选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令;

exec bash 使终端运行命令后仍然存在。

缺陷:

用这种方法有一个缺陷,就是需要知道会有几个python程序以及它们的的顺序;如果有两个的话,操作第二个是正常的,可以重启,但是如果第一个程序死了,也会重启第二个程序!!!因为第一个进程中断之后,系统实时监测,第二个进程变成了最前面的也是唯一的python进程,那么它认为第一个程序还在运行,而第二个程序停止了,所以会重启第二个程序。

总结;有什么问题和需要相关资料的都可以私信‘资料'两字可MF领取相关资料,C++、linux,shell,Kali,

首先明白一个前提,我们是发现问题才会告警发邮件通知,那么当告警脚本未加载时,说名当前监控项正常。或者之前出现异常,但是已经恢复。

脚本的目的是防止问题出现,处于修复期的频繁告警。我们可以定义一个时间阈值,一小时。比如距离上一次问题出现,也就是距离上一次告警的时间大于一小时,我们认为就是一个新的异常,否则就是一个尚未解决的故障。

每次告警,我们都记录一个绝对时间戳,当下一次告警到来时,用当前时间戳减去上一次报警的时间戳,然后if判断该差值,从而确定告警动作。

在具体脚本中定义t2为上一次告警时间戳,t1为当前时间戳,t1-t2就是我们要的判断值。t1可以用命令直接获取,t1=`date +%s` t2 要从日志中获取。但是还有一个问题,对于第一次告警,该t2从哪里来了,也简单,我们自己定义一个满足新异常条件的时间戳就可以,比如两小时之前。

对于一个已发现待解决的故障,也就是对应上面时间戳差值小于一小时的情况,如果我们的脚本是一分钟执行一次,就可以做一个计数器,每发现一次,计数一次,当计数器大于10时,也就是异常持续了10分钟,这时候发送邮件一次,同时清空计时器。

因为mail.py 脚本决定了发送邮件必须带三个参数,收件人邮箱,主题, 内容。因此mail.sh 调用mail.py 必须传递给它三个参数,那么这三个参数最终来自哪里呢,来自监控项脚本,比如load.sh

传递顺序为 load.sh---->mail.sh----->mail.py

再解释mail.sh 第一行,log=$1 , 是一个变量赋值语句,此时的$1就是load.sh 传递过来的邮箱名称。

在程序中我么看到后面将时间戳保存在了/tmp/$log 下面,该复制语句是为了给该日志文件取一个有意义的名称,便于以后管理。当然可以给出其他赋值,比如log=time.txt



Tags:脚本监控   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
简介最近运维人员提出需求,增加一个运维页面, 查询当前的业务进程信息包括:进程名称、启动命令、启动时间、运行时间等,可以通过页面点击重启按钮,可以重启后端的一系列系统进程...【详细内容】
2020-08-12  Tags: 脚本监控  点击:(50)  评论:(0)  加入收藏
本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧!最近公司需要在Linux下监控t...【详细内容】
2019-12-05  Tags: 脚本监控  点击:(132)  评论:(0)  加入收藏
第一步:创建脚本#!/bin/bash# func:自动监控tomcat脚本并且执行重启操作# 获取tomcat进程ID(其中[grep -w 'tomcat']代码中的tomcat需要替换为你的tomcat文件夹名)Tomc...【详细内容】
2019-11-27  Tags: 脚本监控  点击:(391)  评论:(0)  加入收藏
安装sendmail来发邮件# yum -y install sendmail# /etc/init.d/sendmail start# chkconfig sendmail on安装mutt邮件客户端,并设置相关信息# yum -y install mutt# vim /etc/...【详细内容】
2019-11-20  Tags: 脚本监控  点击:(120)  评论:(0)  加入收藏
一,Python简介二,监控基本原理三,监控框架代码分析四,监控源代码分析五, 文章总结有福利为什么要脚本监控呢,这是个非常严重需要注意的问题,为什么需要一个脚本监控,因为脚本监控是...【详细内容】
2019-10-08  Tags: 脚本监控  点击:(178)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条