Supervisor概要
Supervisor是用合作开发的两套通用型的民主化管理工作程序,能将两个一般的配置文件民主化转变成前台daemon,并监视民主化状况,极度优先选择退出并能手动重新启动。它是透过fork/exec的形式把这些被管理工作的民主化当做supervisor的子民主化来开启,这样如果在supervisor的配置文件中,把要管理工作的民主化的DLL的方向雷西县方可。也同时实现连交厝民主化读出来的这时候,父民主化能精确以获取子民主化读出来的重要信息的,能优先选择与否自己开启和报案。supervisor还提供更多了两个机能,能为supervisord或是每一子民主化,增设两个非root的user,那个user就能管理工作它相关联的民主化
那时没错的不是supervisor,有关supervisor的采用,腾讯一堆,这儿不多约勒,那时重点项目没错的是supervisor该事件监视
Event & Listener
Event 是在 Supervisor 3.0 导入的两个高阶优点,假如只单纯采用 Supervisor 管理工作民主化,则不须要介绍 Event
但假如期望监视 Supervisor 管理工作的民主化的各式各样状况(如: 开启、优先选择退出、失利、优先选择退出状况码 …)并全力支持监视系统,才须要介绍Event
Supervisor 非官方对其 Event 监督机制的叙述是:两个民主化的监视/通告架构
具体内容实用性同时实现实用性该事件H55N
顾问该事件侦听器是透过 配置文件中的[eventlistener:x]选定的。有关Supervisor [eventlistener:x] 在实用性中容许的键各方面,基本上与supervisor [program:x]全然那样,而已Supervisor不遵从该事件侦听器民主化的捕捉商业模式输入(即该事件侦听器不能是 PROCESS_COMMUNICATIONS_EVENT该事件计算机程序)。因此,在该事件侦听器的实用性中选定stdout_capture_maxbytes或 stderr_capture_maxbytes是严重错误的。能放进配置文件的该事件侦听器部份的数目没有数人管制
vim /etc/supervisord.d/eventlistener.ini
[eventlistener:mylistener]
command=/opt/my_custom_listener.py ; 自订的监视程序
events=PROCESS_STATE_EXITED,PROCESS_STATE_FATAL,TICK_60 ; 监视该事件
; 下面的实用性和`[program:x]`全然那样
autostart=true
autorestart=true
log_stdout=true
log_stderr=true
stdout_logfile=/opt/supervisor_event_exited-stdout.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
buffer_size=10
stderr_logfile=/opt/supervisor_event_exited-stderr.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=3
实用性H55N脚本vim /opt/my_custom_listener.py
!/usr/bin/env python
-*- coding: utf-8 -*-
importsys
fromsupervisorimportchildutils
defwrite_stdout(s):
only eventlistener protocol messages may be sent to stdout
sys.stdout.write(s)
sys.stdout.flush
defwrite_stderr(s):
sys.stderr.write(s)
sys.stderr.flush
defmain:
while1:
transition from ACKNOWLEDGED to READY
write_stdout(READY\n)
read header line and print it to stderr
line = sys.stdin.readline
write_stderr(line)
read event payload and print it to stderr
headers = dict([ x.split(:)forxinline.split ])
data = sys.stdin.read(int(headers[len]))
write_stderr(data)
transition from READY to ACKNOWLEDGED
write_stdout(RESULT 2\nOK)
采用supervisor的childutils解析
headers, payload = childutils.listener.wait(sys.stdin, sys.stdout)
pheaders, pdata = childutils.eventdata(payload +\n)
当 program 的优先选择退出码为相关联实用性中的 exitcodes 值时, expected=1; 否则为0
ifint(pheaders.get(expected,1)):
childutils.listener.ok(sys.stdout)
continue
else:0, 极度优先选择退出,根据 pheaders 的值发送报案处理
pass你的自定制发送报案逻辑
withopen(/opt/sup.log,a)asf:这儿写入文件作为报案单纯模拟
f.write(str(pheaders))
f.write(str(pdata))
f.write(\n)
向 stdout 写入”RESULT\nOK”,并进入下一次循环
childutils.listener.ok(sys.stdout)
if__name__ ==__main__:
main
这儿监视系统的形式能自己定义,能邮件,也能透过webhook调用im接口监视系统
实际上supervisor自带有监视利器——superlance
superlance
superlance是基于supervisor的该事件监督机制同时实现的一系列配置文件的工具集,它同时实现了许多supervisor本身没有同时实现的实用的民主化监视和管理工作的优点,包括内存监视,http接口监视,邮件和短信通告监督机制等。同样的,superlance本身也是采用python编写的
安装
由于superlance是两个python包,安装起来十分单纯,透过easy_install或是pip就能单纯的安装:
easy_install superlance
pip install superlance
当然也能到github上获得最新的源码(https://github.com/Supervisor/superlance)并安装
python setup.py install
安装后执行以下httpok命令,假如该命令存在,则说明superlance已经正常安装了
superlance组件
superlance是一系列配置文件工具的集合,其包括以下这些命令:
httpok 透过定时对两个HTTP接口进行GET请求,根据请求与否成功来判定两个民主化与否处于正常状况,假如不正常则对民主化进行重新启动。
crashmail 当两个民主化意外优先选择退出时,发送邮件监视系统。
memmon 当两个民主化的内存占用超过了设定阈值时,发送邮件监视系统。
crashmailbatch 类似于crashmail的监视系统,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。
fatalmailbatch 当两个民主化没有成功开启多次后会进入FATAL状况,此时发送邮件监视系统。与crashmailbatch那样会进行合成报案。
crashsms 当两个民主化意外优先选择退出时发送短信监视系统,那个短信也是透过email网关来发送的
邮件监视系统
superlance是采用sendmail来发送邮件的,所以须要安装sendmail
apt install sendmail
安装完成后实用性superlance
cat /etc/supervisor/conf.d/redis.conf
[program:redis]
command=/usr/local/redis/bin/redis-server /home/redis/etc/redis.conf
directory=/usr/local/redis/bin/
user=redis
autostart =true
autorestart =true
startsecs = 30
stopwaitsecs = 1
stopsignal = TERM
redirect_stderr =true
[eventlistener:redis_monitor]
command=crashmail -p redis -m xxx@qq.com
events=PROCESS_STATE_EXITED
redirect_stderr=false
首先实用性了redis民主化开启项目,接着实用性了两个名为redis_monitor的该事件H55N,它接受来自supervisor的PROCESS_STATE_EXITED该事件,并且会触发crashmail的配置文件调用。
PROCESS_STATE_EXITED是在两个supervisor的监视项相关联的民主化意外优先选择退出时会触发的该事件,这就使得两个民主化出现意外优先选择退出的情况下会通告到crashmail。
command参数中-p参数实用性了crashmail只会对名为redis的监视项作出响应,而-m参数中则实用性了崩溃邮件会被发送到的地址
灵活利用superlance,能完成各式各样监视系统需求,同时实现各式各样民主化监视
END
如若转载,请注明出处:https://www.caopanquan.cn/2369.html