Supervisor 与 Superlance 简介
Supervisor 是一款用 Python 编写的进程管理工具,支持多种 UNIX-like 操作系统。它不仅能启动、守护和管理大量进程,还提供事件机制与 XML-RPC API,方便扩展功能。
Superlance 则是基于 Supervisor 事件机制实现的一系列命令行工具集。它弥补了 Supervisor 原生功能的不足,提供了内存监控、HTTP 接口检测、邮件和短信通知等实用特性。同样使用 Python 编写。
安装 Superlance
作为 Python 包,Superlance 安装非常简单。推荐使用 pip:
pip install superlance
也可以通过 easy_install 或从 GitHub 源码编译安装:
python setup.py install
安装完成后,执行 httpok 命令验证是否成功。若命令存在,说明环境已就绪。
Superlance 核心组件
Superlance 包含多个命令行工具,常用如下:
- httpok:定时对 HTTP 接口发起 GET 请求,根据响应状态判定进程健康度,异常时自动重启。
- crashmail:进程意外退出时发送邮件告警。
- memmon:监控进程内存占用,超过阈值时发送告警。
- crashmailbatch:类似 crashmail,但会将一段时间内的告警合并发送,避免邮件轰炸。
- fatalmailbatch:针对多次启动失败进入 FATAL 状态的进程进行合并报警。
- crsms:通过邮件网关发送短信告警。
实战配置
在正式使用前,需确保系统安装了 sendmail 以支持邮件发送:
sudo apt-get install sendmail
1. 进程崩溃邮件告警 (crashmail)
我们需要配置一个 Supervisor 监听器来捕获进程退出的事件。以下是一个示例配置:
[program:top]
command=top -b
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=false
autorestart=false
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
redirect_stderr=true
[eventlistener:crashmail]
command=crashmail -p top -m [email protected]
events=PROCESS_STATE_EXITED
redirect_stderr=true
这里定义了一个名为 top 的进程,持续输出系统信息。关键在于 [eventlistener] 部分:
events=PROCESS_STATE_EXITED:监听从 Supervisor 发出的进程意外退出事件。command=crashmail -p top -m ...:指定仅对名为top的进程生效,并设置接收告警的邮箱地址。
配置生效后,访问 Supervisor Web 界面可看到新增的事件监听器。当手动终止 top 进程(如 kill -9 <pid>)后,Supervisor 会触发事件,监听器随即调用 crashmail 发送通知邮件。
2. 内存泄漏监控 (memmon)
除了存活检测,Superlance 还能监控资源使用情况。下面是一个简单的内存泄漏测试脚本:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
class LeakTest(object):
def __init__(self):
print 'Object with id %d born here.' % id(self)
def __del__(self):
print 'Object with id %d dead here.' % id(self)
def doLeak():
A = LeakTest()
B = LeakTest()
A.b = B
B.a = A
if __name__ == '__main__':
while True:
for i in range(1, 10000):
doLeak()
time.sleep(5)
该脚本会不断创建对象并互相引用,导致内存持续增长。我们可以配置 memmon 来应对这种情况:
[program:memoryleak]
command=python /home/xmxjq/supervisord/samples/memoryleak.py
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=false
autorestart=false
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
redirect_stderr=true
[eventlistener:memmon]
command=memmon -p memoryleak=1MB -m [email protected]
events=TICK_60
redirect_stderr=true
注意这里的 events=TICK_60,表示每 60 秒触发一次检查。配置中设定 memoryleak 进程的内存上限为 1MB。一旦超过该值,不仅会发送邮件告警,还会自动重启进程,防止系统资源耗尽。
运行一段时间后,若内存占用超标,即可收到告警邮件,同时进程 uptime 重置,表明已成功重启。
总结
Superlance 通过丰富的命令行工具扩展了 Supervisor 的能力,使其能更好地适应生产环境的监控需求。更多工具的使用细节,建议参考官方文档进行深入学习。


