未加星标

利用superlance监控supervisor运行状态

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

此文已由作者张家裕授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

最近开发问到supervisor管理下的进程重启了,有无办法做到主动通知,楼主最先想到的是supervisor自带的eventlistener,于是找到了下面的解决方法。

supervisor与superlance简介

supervisor是一款非常实用的进程管理工具,可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启。在KM上面已有多篇文章介绍supervisor的优势以及使用技巧,此处对supervisor本身的介绍不予赘述。

这里主要介绍与supervisor协同工作的的利器superlance,是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。同样的,superlance本身也是使用python编写的。

安装

由于superlance是一个python包,安装起来十分简单,通过easy_install或者pip就可以简单的安装:

easy_install superlance pip install superlance复制代码

当然也可以到github上获得最新的源码(https://github.com/Supervisor/superlance)并安装。

python setup.py install复制代码

安装后执行以下httpok命令,如果该命令存在,则说明superlance已经正常安装了。

superlance的组件

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

httpok

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

crashmail

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

memmon

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

crashmailbatch

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

fatalmailbatch

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

crashsms

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

实际使用例子:

注意:在实际配置supervisor使用superlance之前,首先要安装sendmail,superlance使用这个命令行工具来发送email,利用各种包管理工具都可以简单的安装:

apt-get install sendmail复制代码 crashmail使用介绍

supervisor的配置内容如下:

cat /etc/supervisor/conf.d/redis.conf [program:redis] command=/usr/local/redis/bin/redis-server /home/redis/etc/redis.conf directory=/usr/local/redis/bin/ user=mysql autostart = trueautorestart = true#startsecs = 30stopwaitsecs = 1stopsignal = TERM redirect_stderr = true [eventlistener:redis_monitor] command=crashmail -p redis -m zhangjy@corp.netease.com events=PROCESS_STATE_EXITED redirect_stderr=false复制代码

首先配置了redis进程启动项目,随后配置了一个名为redis_monitor的事件监听器,它接受来自supervisor的PROCESS_STATE_EXITED事件,并且会触发crashmail的命令行调用。

PROCESS_STATE_EXITED是在一个supervisor的监控项对应的进程意外退出时会触发的事件,这就使得一个进程出现意外退出的情况下会通知到crashmail。

command参数中-p参数配置了crashmail只会对名为redis的监控项作出响应,而-m参数中则配置了崩溃邮件会被发送到的地址。

配置了上诉配置后,就可通过supervisorctl看到配置的两条内容,一条是redis监控项,另外一条则是事件监听器redis_monitor:


利用superlance监控supervisor运行状态

使用kill来杀掉redis进程


利用superlance监控supervisor运行状态

收到进程26039退出的邮件通知


利用superlance监控supervisor运行状态

该配置可以在进程重启时通过邮件的方式通知到用户。

memmon使用介绍

这里利用memmon监控进程的内存占用情况,这里有一段测试脚本:


利用superlance监控supervisor运行状态

这段脚本在执行的过程中会出现内存泄露的情况,导致内存占用越来越大,直至无法系统无法再分配内存导致程序异常退出,利用这段脚本我们可以配置一个memmon的事件监听来发出内存泄露的告警。

supervisor的配置如下:

[program:leak] command=python /home/zhangjy/memoryleak.py user=zhangjy directory=/home/zhangjy priority=999process_name=%(program_name)s numprocs=1autostart = trueautorestart = truestopwaitsecs = 1stopsignal = TERM exitcodes=0,2redirect_stderr = falsestdout_logfile_maxbytes = 1024MB stdout_logfile_backups = 5stdout_logfile = /home/zhangjy/stdout.log stderr_logfile_maxbytes = 1024MB stderr_logfile_backups = 5stderr_logfile = /home/zhangjy/stderr.log [eventlistener:leak_monitor] command=memmon -p leak=1MB -m zhangjy@corp.netease.com events=TICK_60 redirect_stderr=false复制代码

这里memmon事件监听器监听的是TICK_60事件,也就是每60秒间隔触发一次的事件,这使得memmon会每60秒检测一次对应的监控项的占用内存情况,这里设置的是监控leak监控项,如果其内存占用超过1MB,则会重启进程,并发送邮件进行告警。 起到该进程后,查看状态


利用superlance监控supervisor运行状态

运行60s后,leak进程的内存占用超过了1MB的告警值, leak的uptime也重置了,说明该进程已经被重启了,使得该进程可以保持正常运行,同时也达到了内存泄露告警的目的。


利用superlance监控supervisor运行状态

可以看到邮箱中收到了告警邮件:


利用superlance监控supervisor运行状态

利用superlance工具可以完成各种各样的告警需求,扩展了supervisor的功能,这些工具的具体使用方法可以参考官方文档:

superlance.readthedocs.org/en/latest/i…

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击。

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

代码区博客精选文章
分页:12
转载请注明
本文标题:利用superlance监控supervisor运行状态
本站链接:https://www.codesec.net/view/610893.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(64)