supervisor 監控介紹

2024年2月6日 18点热度 0人点赞

一:介紹

superlance介紹

Supervisord支持的Event

PROCESS_STATE 進程狀態發生改變

PROCESS_STATE_STARTING 進程狀態從其他狀態轉換為正在啟動(Supervisord的配置項中有startsecs配置項, 是指程序啟動時需要程序至少穩定運行x秒才認為程序運行正常,在這x秒中程序狀態為正在啟動)

PROCESS_STATE_RUNNING 進程狀態由正在啟動轉換為正在運行

PROCESS_STATE_BACKOFF 進程狀態由正在啟動轉換為失敗

PROCESS_STATE_STOPPING 進程狀態由正在運行轉換為正在停止

PROCESS_STATE_EXITED 進程狀態由正在運行轉換為退出

PROCESS_STATE_STOPPED 進程狀態由正在停止轉換為已經停止(exited和stopped的區別是exited是程序自行退出,而stopped為人為控制其退出)

PROCESS_STATE_FATAL 進程狀態由正在運行轉換為失敗

PROCESS_STATE_UNKNOWN 未知的進程狀態

REMOTE_COMMUNICATION 使用Supervisord的RPC接口與Supervisord進行通信

PROCESS_LOG 進程產生日志輸出,包括標準輸出和標準錯誤輸出

PROCESS_LOG_STDOUT 進程產生標準輸出

PROCESS_LOG_STDERR 進程產生標準錯誤輸出

PROCESS_COMMUNICATION 進程的日志輸出包含 和


PROCESS_COMMUNICATION_STDOUT 進程的標準輸出包含 和


PROCESS_COMMUNICATION_STDERR 進程的標準錯誤輸出包含 和


SUPERVISOR_STATE_CHANGE_RUNNING Supervisord 啟動


SUPERVISOR_STATE_CHANGE_STOPPING Supervisord 停止

TICK_5 每隔5秒觸發

TICK_60 每隔60秒觸發

TICK_3600 每隔3600觸發

PROCESS_GROUP Supervisord的進程組發生變化

PROCESS_GROUP_ADDED 新增了Supervisord的進程組

PROCESS_GROUP_REMOVED 刪除了Supervisord的進程組

pip install superlance

二:案例介紹

#案例

1)supervisord 管理監控腳本 monitor.sh ,後臺運行

2)監控腳本,掃描監控,業務進程狀態,

cat /etc/supervisord.d/listener.conf

[eventlistener:nginx-exited]

command=/bin/bash /tmp/monitor.sh

events=PROCESS_STATE_EXITED

redirect_stderr=false

stdout_logfile = /tmp/listener.stdout.log

stderr_logfile = /tmp/listener.stderr.log

#/tmp/monitor.sh

#!/bin/bash

while true

do

sleep 1

isok="`ps -ef|grep -v group |grep group.sh|wc -l`"

if [ $isok -lt 1 ]

then

echo "`date`" >>/tmp/alert.log

#curl post

#send alert

/bin/bash /tmp/group.sh

fi

done

#group.sh

#!/bin/bash

while true

do

sleep 30

done

#mon.sh 監控腳本

#!/usr/bin/env bash

while true
do
        exist=`ps -ef | grep 'httpldlog' | grep -v grep | wc -l`
        if [ $exist -eq 0 ]
        then
                echo `date ' %F %T not exist'`
                ./httpldlog>/dev/null 2>&1 &
        else 
                sleep 10s
        fi
done

三:supervisor安裝部署

使用技巧

apt-get install supervisor

/etc/supervisor/conf.d

cat /etc/supervisor/conf.d/filebeat.conf

[program:filebeat]

directory=/data/filebeat

command=/data/filebeat/filebeat -c /data/filebeat/filebeat.yml

;user=ledou00

autorestart=true

redirect_stderr=true

stdout_logfile=/data/log/supervisord/filebeat.log

mkdir -p /data/log/supervisord

chmod -R 777 /data/log/supervisord*

#nginx

supervisorctl update

supervisorctl status

supervisorctl restart nginxsvr

啟動 supervisor 服務

/etc/init.d/supervisor start

服務名:filebeat

查看單個任務狀態: supervisorctl status 服務名

supervisorctl start 服務名

supervisorctl stop 服務名

supervisorctl restart 服務名

supervisorctl update

#

supervisorctl update

filebeat: added process group

supervisorctl start filebeat

filebeat: started

#添加模塊

守護進程 php
/data/wwwroot/fanbook-service-http-api/cmd/LogCenterController.php consume

1.進入目錄 /etc/supervisor/conf.d

2.編輯配置文件 vi LogCenterController.conf (user 指定用戶運行程序)

[program:LogCenterController]

directory=/data/wwwroot/fanbook-service-http-api/cmd

command=php /data/wwwroot/fanbook-service-http-api/cmd/LogCenterController.php consume

user=ubuntu

autorestart=true

redirect_stderr=true

stdout_logfile=/data/log/supervisord/LogCenterController.log

4.更新服務,默認是所有

supervisorctl update

filebeat: stopped

filebeat: updated process group

LogCenterController: added process group

更新指定服務

supervisorctl update LogCenterController

LogCenterController: stopped

LogCenterController: updated process group

5.檢查狀態

supervisorctl status

supervisorctl status LogCenterController

6.啟動服務

supervisorctl start LogCenterController

#Supervisor隻能管理非daemon的進程,也就是說Supervisor不能管理守護進程

#nginx 守護提示端口占用

#關閉 daemon off

cat /etc/supervisor/conf.d/nginxsvr.conf

[program:nginxsvr]

directory=/usr/local/nginx

;command=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

command=/usr/local/nginx/sbin/nginx -g 'daemon off;'

;user=ledou00

autorestart=true

redirect_stderr=true

stdout_logfile=/data/log/supervisord/nginxsvr.log