Supervisor是一款非常不错的进程守护程序(工具),因其良好的进程管理与进程监控能力,被应用在非常多的应用自己启动的场景中。
Superlance就是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。
Supervisor(supervisord.org)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便地"监听"、"启动"、"停止"、"重启"一个或多个进程。
用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
唯爱薇o朝圣之路,你我的技术朝圣之路
安装supervisor有不同的方法,有rpm包安装、有deb包安装、有pip工具安装等方式;
因为是python开发的一个库,可以直接用pip来安装
pip install supervisor
Tip:如果yum源不包含的supervisor则需要先添加安装源,具体可以查看官网安装说明
yum info supervisor
yum install supervisor
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 status #查看当期进程状态 supervisorctl stop process_name #停止process_name进程 supervisorctl start process_name #启动process_name进程 supervisorctl restart process_name #重启process_name进程 supervisorctl reload #重启supervisord的主进程
在配置supervisor的配置文件中做如下配置
vim /etc/supervisor/supervisord.conf [inet_http_server] port=0.0.0.0:9001 username=edu_vlovev_cn password=v_ai_v
效果展示如下:
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就是基于supervisor的事件机制实现的一系列命令行的工具集,是对supervisor的扩展,superlance本身也是使用python编写的
# 安装superlance$ pip install superlance# 安装发送邮件模块(以Centos为例)$ yum -y install sendmail$ yum -y install mailx
superlance是一系列命令行工具的集合,其包括以下这些命令:
通过定时对一个HTTP接口进行GET请求,根据请求是否成功来判定一个进程是否处于正常状态,如果不正常则对进程进行重启。
当一个进程意外退出时,发送邮件告警。
当一个进程的内存占用超过了设定阈值时,发送邮件告警。
类似于crashmail的告警,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。
当一个进程没有成功启动多次后会进入FATAL状态,此时发送邮件告警。与crashmailbatch一样会进行合成报警。
当一个进程意外退出时发送短信告警,这个短信也是通过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 条评论) “” |