利用supervisor管理进程并实现进程状态告警

前言

Supervisor是一款非常不错的进程守护程序(工具),因其良好的进程管理与进程监控能力,被应用在非常多的应用自己启动的场景中。


Superlance就是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。

Supervisor简介

Supervisor(supervisord.org)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便地"监听"、"启动"、"停止"、"重启"一个或多个进程。

用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

唯爱薇o朝圣之路,你我的技术朝圣之路

安装supervisor

安装supervisor有不同的方法,有rpm包安装、有deb包安装、有pip工具安装等方式;

  • PIP安装方式

因为是python开发的一个库,可以直接用pip来安装

pip install supervisor

  • YUM安装方式

Tip:如果yum源不包含的supervisor则需要先添加安装源,具体可以查看官网安装说明

yum info supervisor

yum install supervisor

  • APT安装方式

apt-cache show supervisor

apt install supervisor

具体的用法大家看官网是最好的。本着授人以渔的态度,我在这里只放一个supervisord的配置文件样本。如果大家需要搞懂还是得自己去官网看文档。

[program:vlovev-api]# 运行程序 相对PATemplateTH 可以使用参数command = java -Dfile.encoding=UTF-8 -Xms128M -Xmx256M  -Dspring.profiles.active={{ deploy_env }}  -Dzk.config={{ apollo_hosts }}  -jar {{ vlovev_program_dir }}/{{edu_vlovev_cn_services}}/vlovev-api.jar# 启动进程数目默认为1numprocs = 1# 如果supervisord是root启动的 设置此用户可以管理该programuser = {{ edu_vlovev_cn_services }}# 程序运行的优先级 默认999priority = 996# 随着supervisord 自启动autostart = true# 子进程挂掉后无条件自动重启autorestart = true# 子进程启动多少秒之后 状态为running 表示运行成功startsecs = 20# 进程启动失败 最大尝试次数 超过将把状态置为FAILstartretries = 3# 标准输出的文件路径#stdout_logfile=/dev/nullstdout_logfile =  /{{ vlovev_program_dir }}/{{ edu_vlovev_cn_services }}/logs/vlovev-api-supervisor.log# 日志文件最大大小stdout_logfile_maxbytes=20MB# 日志文件保持数量 默认为10 设置为0 表示不限制stdout_logfile_backups = 3

常用supervisorctl命令

supervisorctl status                            #查看当期进程状态 supervisorctl   stop     process_name      #停止process_name进程 supervisorctl   start     process_name      #启动process_name进程 supervisorctl   restart  process_name      #重启process_name进程 supervisorctl reload                           #重启supervisord的主进程

开启Supervisor的WEB访问控制台

在配置supervisor的配置文件中做如下配置

vim /etc/supervisor/supervisord.conf  [inet_http_server]          port=0.0.0.0:9001         username=edu_vlovev_cn              password=v_ai_v 

效果展示如下:

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的进程组  




Superlance介绍

superlance就是基于supervisor的事件机制实现的一系列命令行的工具集,是对supervisor的扩展,superlance本身也是使用python编写的

Superlance安装

# 安装superlance$ pip install superlance# 安装发送邮件模块(以Centos为例)$ yum -y install sendmail$ yum -y install mailx

Superlance命令

superlance是一系列命令行工具的集合,其包括以下这些命令:

  • httpok

通过定时对一个HTTP接口进行GET请求,根据请求是否成功来判定一个进程是否处于正常状态,如果不正常则对进程进行重启。

  • crashmail

当一个进程意外退出时,发送邮件告警。

  • memmon

当一个进程的内存占用超过了设定阈值时,发送邮件告警。

  • crashmailbatch

类似于crashmail的告警,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。

  • fatalmailbatch

当一个进程没有成功启动多次后会进入FATAL状态,此时发送邮件告警。与crashmailbatch一样会进行合成报警。

  • crashsms

当一个进程意外退出时发送短信告警,这个短信也是通过email网关来发送的

1.当supervisord启动的时候,如果我们的listener配置为autostart=true的话,listener就会作为supervisor的子进程被启动。


2.listener被启动之后,会向自己的stdout写一个"READY"的消息,此时父进程也就是supervisord读取到这条消息后,会认为listener处于就绪状态。


3.listener处于就绪状态后,当supervisord产生的event在listener的配置的可接受的events中时,supervisord就会把该event发送给该listener。


4.listener接收到event后,我们就可以根据event的head,body里面的数据,做一系列的处理了。我们根据event的内容,判断,提取,报警等等操作。


5.该干的活都干完之后,listener需要向自己的stdout写一个消息"RESULTnOK",supervisord接受到这条消息后。就知道listener处理event完毕了。

关于具体的告警配置,各位看官可以去百度,一搜一大把,而且并没有什么很难的地方。


结语

关于supervisor守护程序和superlance的介绍就到这里,希望对大家有所启发和帮助,写作不易烦请关注、点赞、与收藏,俗称”一键三连“。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章