Supervisor 监听器
我们服务多是用 supervisor 启动的, 但监控多数是用 monit
, 如果我们能通过监测 supervisor 事件变化来做监控,就可以写一套通用的监控程序。
庆幸的是,supervisor 的 eventListener
支持我的设想。
这个监控程序需要用 supervisor 启动,类型不再是program
, 而是eventlistener
,这里有几个比较耗时的地方需要记录下。
- supervisor 有独特的通信协议,需要遵循,否则通讯不会被触发
1 | def write_stdout(self, s): |
- 需要从标准输入端读取事件,而且他是个阻塞的事件模型
1 | while 1: |
- supervisor 配置文件需要订阅事件
1 | [eventlistener:alarm] |
弄好 supervisor 配置,以及部署好代码之后,需要重启 supervisor 才会真正的订阅事件。
从此 supervisor 管理的程序一旦有 FATAL
,EXIT
等状态就会触发程序,程序中就会触发自定义的报警。
Happy Hack!