首页 » PHP教程 » php剧本过程监控技巧_一篇文章教你搞定脚本监控

php剧本过程监控技巧_一篇文章教你搞定脚本监控

访客 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

二,监控基本事理

三,监控框架代码剖析

php剧本过程监控技巧_一篇文章教你搞定脚本监控

四,监控源代码剖析

php剧本过程监控技巧_一篇文章教你搞定脚本监控
(图片来自网络侵删)

五, 文章总结有福利

为什么要脚本监控呢,这是个非常严重须要把稳的问题,为什么须要一个脚本监控,

由于脚本监控是做事器的进程,

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

一,Python简介

Python是近年来最火的一个热点,没有之一。
从性子上来讲它和我们熟知的C、java、php等没有什么实质的差异,也是一种开拓措辞,而且已经进阶到主流的二十多种开拓措辞的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

标签:

相关文章

php挪用ad域技巧_python调用AD域治理

一:agent网络不通及支配agent 安装失落败,网络不通检讨是否可以连接到蓝鲸GSE机器1.检讨ssh是否开放2.GSE端口是...

PHP教程 2024-12-14 阅读0 评论0