一、superlance介绍
1、superlance功能
superlance是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。同样的,superlance本身也是使用python编写的。
2、superlance命令
superlance是一系列命令行工具的集合,其包括以下这些命令:
-
httpok
通过定时对一个HTTP接口进行GET请求,根据请求是否成功来判定一个进程是否处于正常状态,如果不正常则对进程进行重启。
$ httpok [-p processname] [-a] [-g] [-t timeout] [-c status_code] [-b inbody] [-m mail_address] [-s sendmail] URL -
crashmail
当一个进程意外退出时,发送邮件告警。$ crashmail [-p processname] [-a] [-o string] [-m mail_address] [-s sendmail] -
memmon
当一个进程的内存占用超过了设定阈值时,发送邮件告警。$ memmon [-c] [-p processname=byte_size] [-g groupname=byte_size] [-a byte_size] [-s sendmail] [-m email_address] [-u email_uptime_limit] [-n memmon_name] -
crashmailbatch
类似于crashmail的告警,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。$ crashmailbatch --toEmail=<email address> --fromEmail=<email address> [--interval=<batch interval in minutes>] [--subject=<email subject>] [--tickEvent=<event name>] -
fatalmailbatch
当一个进程没有成功启动多次后会进入FATAL状态,此时发送邮件告警。与crashmailbatch一样会进行合成报警。$ fatalmailbatch --toEmail=<email address> --fromEmail=<email address> [--interval=<batch interval in minutes>] [--subject=<email subject>] -
crashsms
当一个进程意外退出时发送短信告警,这个短信也是通过email网关来发送的。$ crashsms --toEmail=<email address> --fromEmail=<email address> [--interval=<batch interval in minutes>] [--subject=<email subject>] [--tickEvent=<event name>]
二、superlance插件使用
1、模块安装
# 安装superlance
$ pip install superlance
# 安装发送邮件模块(Centos)
$ yum -y install sendmail
$ yum -y install mailx
2、supervisor配置
[program:uwsgi]
command=uwsgi --ini /xxx/uwsgi.ini
directory=/xxx/
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/web.log
stopsignal=QUIT
[eventlistener:uwsgi-monitor]
command=crashmail -p uwsgi -m your@gmail.com
events=PROCESS_STATE_EXITED
redirect_stderr=true
3、触发异常
使用ps aux|grep uwsgi查看进程,并kill -9 结束进程,测试是否收到异常报警邮件
如果邮件发送异常,查看邮件发送日志
$ tail -f /var/log/maillog

(1)如果发现有失败提示:"Connection refused by [127.0.0.1]",需要检查sendmail是否启动:
# 启动sendmial服务
$ chkconfig --levels 235 sendmail on
$ service sendmail restart
(2)错误提示:"readcf: option RunAsUser: unknown user smmsp",sendmail没有发送邮件的用户,需要新增smmsp用户和组:
# 错误提示
$ mail -s "邮件主题" your-email@xx.com < ./邮件内容.txt
/etc/mail/submit.cf: line 432: readcf: option RunAsUser: unknown user smmsp
/etc/mail/submit.cf: line 452: readcf: option TrustedUser: unknown user smmsp
Mail submission program must have RunAsUser set to non root user
# 解决方法
$ chattr -i /etc/shadow /etc/passwd /etc/gshadow /etc/group
$ groupadd smmsp
$ useradd smmsp -g smmsp -d /var/spool/clientmqueue -m -s /sbin/nologin
$ chown -R smmsp:smmsp /var/spool/clientmqueue
$ chmod -R 770 /var/spool/clientmqueue
$ chattr +i /etc/shadow /etc/passwd /etc/gshadow /etc/group
参考资料:
crashmail Documentation:https://superlance.readthedocs.io/en/latest/crashmail.html
使用superlance插件增强supervisor的监控能力:https://blog.csdn.net/baidu_zhongce/article/details/49151385