Z.S.K.'s Records

supervisor使用自定义邮件报警模板

生产中由于历史遗留问题,有些程序还是二进制部署, 对于这类程序需要使用守护进程进行托管,常用的能实现对程序进行守护的用的多的有如systemd, supervisor,monit等工具, monit其实更好用一些,拓展性也很强,但是因为线上已经有一些使用了supervisor,为了工具统一化,就都使用了supervisor了,这次讲一讲supervisor使用自定义邮件模板实现报警的实现

supervisor

需要说明一下, supervisor只能管理在前台运行的程序, 所以如果应用事先是以nohup &的方式启动的,则需要先停止该应用,然后使用supervisor守护启动

supervisor的安装及使用很简单,大家可直接参考supervisor的官网

superlance

supervisor本身是没有邮件报警的, 好在它有上拓展插件可以直接使用, 但是它自带的邮件没有格式,非常难看,因此需要修改源码来使用我们自己的邮件模板

superlane的gitlab在这里

superlance中提供了多种报警场景, 这里使用crashmail

直接通过python setup.py install

这里安装的是已经被我修改了源码,集成了自定义邮件模板后的包, 修改后的包在这里

自定义邮件模块在这个文件

启用crashmail

在supervisor中加入一个配置文件,以开启crashmail

1
2
3
4
5
6
[eventlistener:crashmail-exited]
command=crashmail -a -f "http://your.mail.domain" -t "[email protected]"
events=PROCESS_STATE_EXITED
redirect_stderr=false
stdout_logfile=/etc/supervisor/logs/crashmail-exited-stdout.log
stderr_logfile=/etc/supervisor/logs/crashmail-exited-stderr.log

http://your.mail.domain是一个用golang写的一个邮件接口,通过restfulapi暴露出来后,可直接调用.大家也可以使用自己的邮件服务.

events=PROCESS_STATE_EXITED指定当程序异常退出时产生事件.

Crashmail的参数大家可以参考github

安装守护进程

假设要守护的进程为influxdb, 增加以下配置文件至 /etc/supervisor/conf.d/influxdb.conf

新配置文件的配置文件一定要以conf结尾

1
2
3
4
5
6
7
8
[program:influxdb]
directory = /usr/bin
command = /usr/bin/influxd -config /etc/influxdb/influxdb.conf
startsecs = 5
autostart = true
autorestart = true
stdout_logfile = /etc/supervisor/logs/supervisor-influxdb-stdout.log
stderr_logfile = /etc/supervisor/logs/supervisor-influxdb-stderr.log

说明: 某些软件如果直接是从apt-get上下载安装的,可能会存在下载安装完之后已经被systemd托管了,这种情况下supervisor无法接管,可先从systemd中把该应用disable掉, 再使用supervisor托管

查看是否被systemd托管

systemctl status influxd.service

如果状态为active则说明已被托管.

从systemd去除托管状态

systemctl stop influxd.service

systemctl disable influxd.service

最后使用以下命令将新增的配置文件加入到supervisor中托管

supervisorctl update

可使用supervisorctl status查看influxdb是否启动成功.

最终效果

supervisor检测到程序发生异常退出后,即会通过邮件发送报警

superlance自定义模块在这里可以找到

自定义邮件模块在这个文件

supervisor常用命令

#重启supervisor

supervisorctl reload

#查看当前守护的进程

supervisorctl status

#加入新增加的配置文件

supervisorctl update

#只会读取有更新的配置文件,不会启动新增加的配置文件

supervisorctl reread

#关闭某一进程守护

supervisorctl stop cassandra

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?