[toc]
Event
Event 是在 Supervisor 3.0 引入的一个高级特性,如果只简单使用 Supervisor 管理进程,则不需要了解 Event。
但如果希望监控 Supervisor 管理的进程的各种状态(如: 启动、退出、失败、退出状态码 ...)并支持告警,才需要学习 Event。
事件监听与事件通知
- Event Listeners and Event Notifications
Supervisor 提供了一种基于订阅消息的通知机制,称为 event listener(事件监听者)。 用于订阅并处理事件通知消息。
Supervisor 在工作时,其下管理的进程发生任何的状态变化都会产生事件通知消息,这些消息被分为成了各种类型,在没有配置 event listener 时,这些消息将不会得到处理。当配置了event listener 可以在配置中指定订阅某一类型的事件通知消息,那么当指定类型的消息产生时 event listener 就会收到,以便进行下一步处理。
事件通知协议基于子进程的 stdin 和 stdout,Supervisor 会发送指定格式的消息数据给 event listener 进程的 stdin ,并期望从 event listener 的 stdout 返回一个指定格式的输出。 event listener 程序需要自己写代码实现,可以使用任何语言,不过在 Python 中有提供一个库 supervisor.childutils 专门用于快速开发 event listener ,因此用 python 开发是最简便的。
Event Types
Event Types 由 Supervisor 官方定义,覆盖了进程运行生命周期的各种状态。
- 下面翻译一些常用的类型
Event | 解释 |
---|---|
PROCESS_STATE | 进程状态发生改变 |
PROCESS_STATE_STARTING | 进程状态从其他状态转换为正在启动(Supervisord的配置项中有startsecs配置项,是指程序启动时需要程序至少稳定运行x秒才认为程序运行正常,在这x秒中程序状态为正在启动) |
PROCESS_STATE_RUNNING | 进程从正在启动状态转换为正在运行状态 |
PROCESS_STATE_BACKOFF | 进程从正在启动状态转换为启动失败状态,Supervisor 正在重启该进程 |
PROCESS_STATE_STOPPING | 进程从正在运行状态或正在启动状态转换为正在停止状态 |
PROCESS_STATE_EXITED | 进程从正在运行状态转换为退出状态,expected 退出码,如果是 0 表示进程异常退出,1 表示进程正常退出。 |
PROCESS_STATE_STOPPED | 进程从正在停止状态转换为已停止状态 |
PROCESS_STATE_FATAL | 进程从启动失败状态(BACKOFF)转换为失败状态(FATAL). 意味着 startretries 尝试次数已达上限,Supervisor 已放弃重启该进程。 |
PROCESS_LOG | 进程产生日志输出,被管理的进程需配置,stdout_events_enabled=true or stderr_events_enabled=true 这个事件通知才会生效。 |
PROCESS_LOG_STDOUT | 进程产生标准输出,被管理的进程需配置,stdout_events_enabled=true |
PROCESS_LOG_STDERR | 进程产生错误输出,被管理的进程需配置 |