Supervisor 的配置文件命名为 supervisord.conf,它为 supervisord(Supervisor 的主服务命令) 和 supervisorctl(Supervisor 的监控管理命令) 提供配置选项设置。 Supervisor 并不规定配置文件 supervisord.conf 的存放位置,Supervisor 服务启动的时候默认会在:
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
这几个目录位置查找配置文件 supervisord.conf。
Supervisor 也提供参数 "-c" 来指定配置文件的目录路径。
在终端输入 "echo_supervisord_conf" 命令可查看 Supervisor 的默认配置的内容。
生成一份默认的配置文件:
echo_supervisord_conf > /etc/supervisord.conf
supervisor配置比较简单,以下几个配置项满足基本的需求,更多配置项请参考官方配置说明
[supervisord]
nodeamon = false #以deamon方式启动进程
[supervisorctl] #使用系统默认配置项
[inet_http_server] #web管理页面的端口和用户密码
port = 8080
username = user
password = pwd
[rpcinterface:supervisor] #xml-rpc接口相关配置
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:mongodb]
command=/data1/mongodb_2.4.7_build/mongod -config /data1/mongodbrs/config/mongodb.conf --directoryperdb --quiet --profile 1 --slowms 1000 --noprealloc --shardsvr
directory=/data1/mongodb_2.4.7_build
autostart=false
user=root
注意默认配置文件的最后几行
你可以在supervisord.conf文件相同目录下supervisord.d目录内添加.ini文件分开配置
[include]
files = supervisord.d/*.ini
注意:被监控的进程要以非daemon方式运行,以mongodb为例,需要去掉mongodb进程启动命令里的--fork 参数
六使用
# 启动supervisor
python /usr/bin/supervisord
# 启动监控的进程
supervisorctl start all
# 关闭监控的进程
supervisorctl stop all
# 查看状态
supervisorctl status
# 重新加载配置文件:
supervisorctl reload
其实,可以通过supervisorctl打开supervisor的命令行控制台,然后输入help可以查看看用的命令,然后help+命令可以查看每个命令的具体功能
七 web控制
在 supervisord.conf中配置[inet_http_server],
[inet_http_server]
port = 0.0.0.0:8080 #IP和绑定端口
username = admin #管理员名称
password = 123456 #管理员密码
这样,在浏览器中输入配置中写的地址和端口号,输入配置好的用户名和密码,便可以看到基于网页的控制台界面。从中,可以察看supervisor监控的>信息,可以察看进程的日志等。
浏览器访问::8080/,(这里的IP为部署supervisor的IP)
八、监控告警如果需求只是自动拉起crash的进程,通过命令行对进程进行管理,以上内容足矣。supervisor 3.0版本引入了事件,利用这个特性我们实现实时监控进程状态并告警。
首先了解一下supervisor提供的事件,supervisor通过子进程对应用程序进行管理,监控程序同样作为一个子进程运行,子进程的stdin、stdout、stderr都已经被重定向。事件处理过程如下:
作为监听程序的子进程向stdout写入READY\n
事件发生时,supervisor会选择一个处于Ready状态的子进程的stdin写入事件内容
该子进程事件处理完毕后向stdout写入OK\n或FAIL\n,反馈处理结果
重复上述操作
supervisor提供的多种事件类型,包括:进程状态事件、supervisor状态事件、定时事件、xmlrpc调用事件、进程日志事件等等。我们主要关注进程状态相关事件。supervisor对进程定义了如下状态,每个状态的切换都会触发相应的事件。