介绍
superlance就是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。同样的,superlance本身也是使用python编写的
安装
pip install superlance
自带命令
superlance安装后,自带了一批命令
这批命令默认在python可执行目录下
/usr/local/python3/bin
- httpok
通过定时对一个HTTP接口进行GET请求,根据请求是否成功来判定一个进程是否处于正常状态,如果不正常则对进程进行重启。 - crashmail
当一个进程意外退出时,发送邮件告警。 - memmon
当一个进程的内存占用超过了设定阈值时,发送邮件告警。 - crashmailbatch
类似于crashmail的告警,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。 - fatalmailbatch
当一个进程没有成功启动多次后会进入FATAL状态,此时发送邮件告警。与crashmailbatch一样会进行合成报警。 - crashsms
当一个进程意外退出时发送短信告警,这个短信也是通过email网关来发送的
Supervisord支持的Event
- PROCESS_STATE 进程状态发生改变
- PROCESS_STATE_STARTING 进程状态从其他状态转换为正在启动(Supervisord的配置项中有startsecs配置项, 是指程序启动时需要程序至少稳定运行x秒才认为程序运行正常,在这x秒中程序状态为正在启动)
- PROCESS_STATE_RUNNING 进程状态由正在启动转换为正在运行
- PROCESS_STATE_BACKOFF 进程状态由正在启动转换为失败
- PROCESS_STATE_STOPPING 进程状态由正在运行转换为正在停止
- PROCESS_STATE_EXITED 进程状态由正在运行转换为退出
- PROCESS_STATE_STOPPED 进程状态由正在停止转换为已经停止(exited和stopped的区别是exited是程序自行退出,而stopped为人为控制其退出)
- PROCESS_STATE_FATAL 进程状态由正在运行转换为失败
- PROCESS_STATE_UNKNOWN 未知的进程状态
- REMOTE_COMMUNICATION 使用Supervisord的RPC接口与Supervisord进行通信
- PROCESS_LOG 进程产生日志输出,包括标准输出和标准错误输出
- PROCESS_LOG_STDOUT 进程产生标准输出
- PROCESS_LOG_STDERR 进程产生标准错误输出
- PROCESS_COMMUNICATION 进程的日志输出包含 和
- PROCESS_COMMUNICATION_STDOUT 进程的标准输出包含 和
- PROCESS_COMMUNICATION_STDERR 进程的标准错误输出包含 和
- SUPERVISOR_STATE_CHANGE_RUNNING Supervisord 启动
- SUPERVISOR_STATE_CHANGE_STOPPING Supervisord 停止
- TICK_5 每隔5秒触发
- TICK_60 每隔60秒触发
- TICK_3600 每隔3600触发
- PROCESS_GROUP Supervisord的进程组发生变化
- PROCESS_GROUP_ADDED 新增了Supervisord的进程组
- PROCESS_GROUP_REMOVED 删除了Supervisord的进程组
示例
进程挂了时,发邮件通知,
# 使用crashmailbatch会更不错
# supervisor配置文件中新增
[eventlistener:crashmail]
command=/usr/local/python3/bin/crashmail -a -s "mail -s 'Process is 挂了' 398344850@qq.com" -m 398344850@qq.com
events=PROCESS_STATE_EXITED
redirect_stderr=false