supervisor
官网 Supervisor
Supervisor
是一个客户端服务器系统,允许其用户监视和控制类似UNIX
的操作系统上的多个进程。
Supervisor
是用 Python
开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon
,并监控进程状态,异常退出时能自动重启。
它是通过fork/exec
的方式把这些被管理的进程当作supervisor
的子进程来启动,这样只要在supervisor
的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor
还提供了一个功能,可以为supervisord
或者每个子进程,设置一个非root
的user
,这个user
就可以管理它对应的进程。
但是需要注意 Supervisor
完全不会在任何Windows
版本下运行,它依赖于 Python
, 它适用于Python 3
3.4
版或更高版本以及Python 2
版本2.7
主要功能:
- 进程管理:Supervisor可以启动、停止和重启进程。用户可以通过命令行或Web界面管理这些进程。
- 自动重启:如果监控的进程意外退出,Supervisor可以自动重启它,从而提高系统的稳定性。
- 日志管理:Supervisor会自动捕获和管理各个进程的标准输出和错误日志,便于后续排查问题。
- 配置灵活:Supervisor通过配置文件定义要管理的进程,可以指定启动命令、环境变量、工作目录等参数。
- 支持多种语言:Supervisor可以管理用多种编程语言编写的进程,包括Python、Java、Ruby等。
- Web界面:Supervisor提供一个Web界面,便于用户查看进程状态和管理进程。
使用场景
- 守护进程:适合需要常驻运行的服务,如Web服务器或数据库。
- 批处理任务:可以用于监控并管理定时任务或批处理进程。
- 微服务架构:在微服务环境中,Supervisor可以帮助管理多个服务实例。
命令选项
supervisorctl status # 查看所有受管理进程的状态。
supervisorctl start <program> # 启动所有进程 #启动一个或多个进程
supervisorctl start all # 启动所有进程
supervisorctl stop <program> # 停止所有进程 #启动一个或多个进程
supervisorctl stop all # 停止所有进程
supervisorctl tail <program> # 查看特定进程的标准输出或错误输出日志。
supervisorctl tail <program> stderr # 查看错误日志
supervisorctl reload # 重新加载配置文件
supervisorctl shutdown # 停止Supervisor进程及其管理的所有进程。
-c <config_file> ##指定要使用的配置文件,通常用于启动 supervisord。
-n ## 以前台模式启动,不会在后台运行。
-h 或 --help ##显示帮助信息和可用的命令列表。
应用实例(3.4.0)
## 安装
yum install -y supervisor
## 启动并加入开启自启
systemctl enable supervisord.service --now
[root@master alertmanager]# rpm -ql supervisor
/etc/supervisord.conf ## 主配置文件
/etc/supervisord.d ## 主配置内包含的目录
编辑启动文件
[program:prometheus] ; 定义一个名为prometheus的进程组
directory=/app/prometheus/ ; 指定Prometheus进程的工作目录
command=/bin/bash -c "/app/prometheus/prometheus" ; 指定启动Prometheus的命令,使用bash执行
autostart=true ; 设置为true,表示Supervisor启动时自动启动此进程
autorestart=true ; 设置为true,表示进程意外退出后自动重启
stdout_logfile=/var/log/prome_stdout.log ; 指定标准输出日志文件的路径
stderr_logfile=/var/log/prome_stderr.log ; 指定标准错误日志文件的路径
user=root ; 指定以root用户身份运行此进程
stopsignal=TERM ; 定义停止进程时发送的信号,这里使用TERM信号 kill -15
startsecs=5 ; 进程启动后,Supervisor等待5秒以确保其正常运行
startretries=3 ; 如果进程启动失败,Supervisor会尝试重新启动最多3次
stopasgroup=true ; 在停止进程时,停止进程及其所有子进程
killasgroup=true ; 在杀死进程时,发送信号到进程组的所有进程
##.编写Promethues启动脚本
[root@master01 ~]# vim /etc/supervisord.d/prome.ini
[program:prometheus]
directory=/app/prometheus/
command=/bin/bash -c "/app/prometheus/prometheus --config.file=/app/prometheus/prometheus.yml"
autostart=true
autorestart=true
stdout_logfile=/var/log/prome_stdout.log
stderr_logfile=/var/log/prome_stderr.log
user=root
stopsignal=TERM
startsecs=5
startretries=3
stopasgroup=true
killasgroup=true
[program:node]
directory=/app/node_exporter
command=/bin/bash -c "/app/node_exporter/node_exporter"
autostart=true
autorestart=true
stdout_logfile=/var/log/node_exporter_stdout.log
stderr_logfile=/var/log/node_exporter_stderr.log
user=root
stopsignal=TERM
startsecs=5
startretries=3
stopasgroup=true
killasgroup=true
[program:pushgateway]
directory=/app/pushgateway
command=/bin/bash -c "/app/pushgateway/pushgateway"
autostart=true
autorestart=true
stdout_logfile=/var/log/pushgateway_stdout.log
stderr_logfile=/var/log/pushgateway_stderr.log
user=root
stopsignal=TERM
startsecs=5
startretries=3
stopasgroup=true
killasgroup=true
#### 更新
[root@master alertmanager]# supervisorctl update
node: added process group
prometheus: added process group
pushgateway: added process group
### 加入后自动启动 因为这个选项autostart=true
[root@master alertmanager]# supervisorctl status
node RUNNING pid 46914, uptime 0:01:07
prometheus RUNNING pid 46915, uptime 0:01:07
pushgateway RUNNING pid 46916, uptime 0:01:07
测试
[root@master alertmanager]# supervisorctl stop all
node: stopped
prometheus: stopped
pushgateway: stopped
web页面的测试
在配置文件当中添加如下内容 /etc/supervisord.conf
[inet_http_server]
port=0.0.0.0:6888
username=admin
password=123456
[root@master alertmanager]# supervisorctl reload
Restarted supervisord
浏览器访问: http://10.0.0.200:6888