核心服务异常退出后能及时发现并告警,关键在于“主动探测 + 自动恢复 + 通知闭环”:通过sysmonitor进程监控自动拉起、Prometheus暴露健康状态触发多通道告警、WGCLOUD/Zabbix轻量级存活检查,结合日志分析补全盲区,且监控与恢复命令需超时控制和幂等性保障。
核心服务异常退出后能及时发现并告警,关键在于“主动探测 + 自动恢复 + 通知闭环”。不需要等用户投诉,系统自己就能感知、尝试拉起、发消息提醒。
用进程监控工具自动拉起并记录
华为欧拉系统自带 sysmonitor 服务,专为关键进程设计。它会定期执行配置的监控命令(如 systemctl status xxx),返回非0即视为异常。一旦发现异常,立刻执行你预设的恢复命令(如 systemctl restart xxx),最多重试三次;失败后按周期继续尝试。所有动作都会写入 /var/log/sysmonitor.log,方便回溯。
配置很简单:在 /etc/sysmonitor/process/ 下新建一个文件,例如 myapp.conf,内容如下:
- NAME=myapp
- RECOVER_COMMAND=systemctl restart myapp.service
- MONITOR_COMMAND=systemctl is-active --quiet myapp.service
改完记得运行 systemctl reload sysmonitor 生效。
用Prometheus暴露健康状态并触发告警
适合需要集中管理、多节点、带可视化和多通道通知的场景。让每个服务自己提供一个 HTTP 接口(比如 /health 返回 {"status":"up"}),或写一个简单脚本定期更新本地状态文件(如 /tmp/myapp.alive 内容为 1)。Prometheus 通过 node_exporter 的 textfile collector 或自定义 exporter 定期采集这个状态。
在 Prometheus rules 文件中加一条规则:
- 当
myapp_health_status == 0持续 60 秒,触发告警 - 告警经 Alertmanager 路由,自动发微信/钉钉/邮件
用WGCLOUD或Zabbix做轻量级进程存活检查
如果不想搭整套 Prometheus,WGCLOUD 这类平台更省事。它在被监控主机上部署 agent,可直接配置“进程名”(如 java -jar app.jar)进行匹配。一旦检测不到该进程,立即告警,并支持三种响应方式:
- Web SSH 连上去手动启动
- 批量下发指令(
systemctl start app) - 配置自定义监控项——写个 shell 脚本,逻辑就是“查不到进程就启动”,agent 定期执行它
结合日志与系统事件做辅助判断
Linux 系统本身会记录进程异常退出事件。比如 systemd 服务崩溃时,journalctl -u myapp.service -n 50 能看到 ExitCode 和 CrashStack;Windows 则会在系统日志里留下错误模块和异常代码。把这些日志源接入 ELK 或 Loki,配合关键词(如 abnormal exit、Killed process)做日志告警,能补全监控盲区。
不复杂但容易忽略的是:监控命令本身不能卡住,超时会干扰整个监控线程;恢复命令也要幂等,避免重复执行引发新问题。


















