使用Supervisor做服务监控和管理

Posted by Hsz on February 19, 2015

使用Supervisor做服务监控和管理

我们的服务往往启动后如果关闭终端就会跟着关闭,这时候我们就需要把进程设置成守护进程,而Supervisor就是一个可以管理守护进程的工具.

Supervisor虽然现在在某种程度上已经被容器技术所取代,但在一些不用容器的情况下它依然有用.

安装可以直接pip安装.

配置

实际上supervisord是一个c/s结构的软件,我们要先来指定配置文档,默认的配置文档一般放在/etc/supervisor/supervisord.conf,而细化的各个服务的配置 /etc/supervisor/conf.d/gogs.conf

任务配置

,在配置文档中至少要有一个可运行的命令:

[program:foo]
command=<foo>.py

一般的样例:

[program:bar]
command=python <bar>.py;需要执行的命令wd
user =root  ;默认是当前用户,如果需要可以改到root用户
autostart=true  ;是否在supervisord启动时自启动(default: true)
autorestart=true  ;可以设置是否自动重启,何时自动重启(default: unexpected)
startsecs=3  ;最大启动时间设置( def . 1)
stderr_logfile=/tmp/bandwidth_err.log  ;标准错误输出位置定向
stdout_logfile=/tmp/bandwidth.log  ;log输出位置定向

我们可以用echo_supervisord_conf > supervisord.conf来生成一个模板,这样修改模板就可以了.

关于虚拟环境的处理方式

我们如果要使用python的虚拟环境来启动项目的话,可以添加上environment=PATH="/env/path/bin:%(ENV_PATH)s"

配置文件套接

我们的默认配置文件中有这样一句:

[include]
files = /etc/supervisor/conf.d/*.conf

也就是说我们可以将任务一个一个放在/etc/supervisor/conf.d/文件夹下,只要后缀为.conf就可以被识别引入.习惯上我们以项目名作为对应项目的配置文件名.

files后面的参数可以不止一条,他们中间用空格分隔

程序分组

我们可以在单独的配置文件中设置[group:x]来将几个程序分组管理,我们可以自己在conf.d文件夹下新建一个文件夹groups,再在其中设置分组

[group:foo]
programs=bar,baz
priority=999

配置http管理工具

supervisord.confinet_http_server部分做相应配置,在supervisorctlreload即可启动web管理界面,如果要使外部可以访问,需要将port后面的具体host改为*

[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123

其他配置

  • supervisord: supervisor的服务器端部分,用于supervisor启动,他的设置可以有:
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true
childlogdir = /tmp
strip_ansi = false
environment = KEY1="value1",KEY2="value2"
  • supervisorctl:启动supervisor的命令行窗口,在该命令行中可执行start、stop、status、reload等操作.他的设置可以有:
[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = chris
password = 123
prompt = mysupervisor

开启服务

supervisord -c supervisord.conf可以指定配置文档并启动.

命令行控制项目启停

supervisorctl就是supervisord的命令行客户端.其操作有:

操作 说明
supervisorctl update 更新新的配置到supervisord,之后常用supervisorctl reload来重载配置
supervisorctl reload 重载配置
supervisorctl shutdown 关闭supervisord
supervisorctl status 查看项目状态
supervisorctl start 启动项目
supervisorctl restart 重启项目
supervisorctl stop 停止项目

后台监控

cesi是官方推荐的后台监控工具.它本质上是一个supervisor的插件.

cesi可以监控你注册的节点服务器,利用supervisor来监控管理其上的项目.

配置node

node代表服务器节点,在cesi的配置文件cesi.conf上这样注册:

[node:gulsah]
username = gulsah
password = ***
host = gulsah.xyz.com
port = 9001

注意这里填的信息是上文中配置http管理工具中的内容

配置environment

接着可以将上面的节点分组,用的是environment设置

[environment:market]
members = gulsah, kaan

基本配置

最后是设置cesi自己的一些信息,主要是设置log信息存放位置和指定sqlite3数据库

[cesi]
database = /x/y/userinfo.db
activity_log = /x/y/cesi_activity.log

cesi有完善的权限管理功能,可以为不同的管理员设置不同的权限

其他插件

有许多基于supervisor的插件可以在官网找到.有兴趣的可以取拿来试试.