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

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

最近开发问到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:

使用kill来杀掉redis进程

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

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

memmon使用介绍

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

这段脚本在执行的过程中会出现内存泄露的情况,导致内存占用越来越大,直至无法系统无法再分配内存导致程序异常退出,利用这段脚本我们可以配置一个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,则会重启进程,并发送邮件进行告警。 起到该进程后,查看状态

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

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

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

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

supervisor 监控mysql_利用superlance监控supervisor运行状态相关推荐

  1. 利用superlance监控supervisor运行状态

    此文已由作者张家裕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近开发问到supervisor管理下的进程重启了,有无办法做到主动通知,楼主最先想到的是superviso ...

  2. maxwell监控mysql_利用Maxwell组件实时监听Mysql的binlog日志

    一:在linux环境下安装部署好mysql 开启binlog Vim  /etc/my.cnf mysql的binlog格式有3种,为了把binlog解析成json数据格式,要设置binlog的格式为 ...

  3. 小米开源监控系统监控mysql_小米开源监控 Open-Falcon 3.0 部署

    一.系统环境准备 目前我这里使用单机版进行部署,也可以前后端进行分离,前端,后端,数据库分别在不同的服务器上进行部署搭建 1.更改主机名 [root@localhost ~]# hostnamectl ...

  4. python进程监控 supervisor_使用Python的Supervisor进行进程监控以及自动启动

    做服务器端开发的同学应该都对进程监控不会陌生,最近恰好要更换 uwsgi 为 gunicorn,而gunicorn又恰好有这么一章讲进程监控,所以多研究了下. 结合之前在腾讯工作的经验,也会讲讲腾讯的 ...

  5. 利用shell监控cpu、磁盘、内存使用率

    利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...

  6. linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...

    服务器时间校准是非常重要的,因为很多应用服务都是需要基于时间的,服务器系统时间如果不准确的话就会产生很多问题.虽然我们可以通过部署NTP时间服务器来进行校准,但是有时候感觉还不够保险,而这往往也是很多 ...

  7. 利用 Zabbix 监控数据库文件大小

    场景模拟: 数据库空间如果太大,对性能方面有一定的影响,所以某知名企业的运维人员小智想要监控每台数据库服务器的数据库文件大小.这名运维人员目前的做法是执行查询语句,把结果存成txt文件,然后每天都需要 ...

  8. 利用 Zabbix 监控 mysqldump 定时备份数据库是否成功

    场景需求 大部分企业都会存在测试数据库.然而,这些公司的运维人员普遍的做法是编写一个shell脚本通过mysqldump,这个MySQL数据库备份工具结合Linux的crontab这个定时任务命令,实 ...

  9. 利用 Zabbix 监控 mysqldump 定时备份数据库是否成功 | 运维进阶

    场景需求 大部分企业都会存在测试数据库.然而,这些公司的运维人员普遍的做法是编写一个shell脚本通过mysqldump,这个MySQL数据库备份工具结合Linux的crontab这个定时任务命令,实 ...

最新文章

  1. mysql 按照指定顺序排序
  2. 【剑指offer - C++/Java】6、旋转数组的最小数字
  3. 电商后台原型 rp_电商选型:一站式线上商城的重要性
  4. 数学差学计算机和编程难吗,数学很差能学计算机吗
  5. 64 岁的 Python 之父:我不退休了!
  6. 禁用行、列、单元格单元格编辑
  7. python远程执行shell脚本文件_python SSH模块登录,远程机执行shell命令实例解析
  8. mc服务器地图无限大吗,我的世界:4个小秘密,没想到啊,地图的范围这么大!...
  9. 部署企业级项目管理系统(蝉道)
  10. 微信小程序云开发之简单两步实现集成赞赏加群弹窗功能
  11. 【图像隐藏】基于matlab像素预测和位平面压缩的加密图像可逆数据隐藏【含Matlab源码 2218期】
  12. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
  13. 语音芯片排行榜,为何唯创知音WT588F语音芯片如此受欢迎
  14. mac上Python版本不同时,给指定的版本安装库
  15. DPU网络开发SDK——DPDK(二)
  16. 2017今日头条校招——或与加
  17. 云收呗api接口免费开放
  18. 为什么不建议用字符串或者uuid做数据库主键
  19. SI好文翻译:铜箔表面纹理对损耗的影响:一个有效的模型(一)
  20. Oracle单实例数据库启动ORA-01078、ORA-00205、ORA-01157、ORA-01110处理

热门文章

  1. iphone7计算机隐藏,Iphone7:3Dtouch5个隐藏小功能,你知道吗?
  2. php array 删除末尾,PHP array_pop():删除数组末尾的元素
  3. oracle 算年级,oracle 查询年级,班级,班级人数;
  4. 当汽车工业遇见 AI,开发者的时代到来
  5. ClickHouse 为何如此快?
  6. 23 岁创业,28 岁成为福布斯亚洲青年领袖,这个“刷脸的男人”有点牛
  7. 使用虚幻引擎 4 年,网络架构大揭秘
  8. 为什么我们应该使用 Flutter?
  9. 12306 回应软件崩了;微信发布新版本,朋友圈可“斗图”;Ant Design 3.26.4 发布 | 极客头条...
  10. 小米新生态总监董红光:致力打造智能服务开放平台