要让 action.reportsuspension 机制在监控大屏中动态展现日志链路存活状态,关键是捕获其生成的本地 suspension 日志,将其结构化为 json 格式,再通过脚本轮询提取为 prometheus 指标 rsyslog_remote_link_up(1=正常,0=挂起),最后在 grafana 中用 state timeline 可视化并配置告警。

要让 action.reportSuspension 机制在监控大屏中动态展现日志链路存活状态,关键不是“开启报告”本身,而是捕获它产生的系统事件,并将其转化为可观测指标(如布尔值、计数器或状态码),再接入监控系统(如Prometheus + Grafana)进行可视化。
action.reportSuspension="on" 的作用是:当 rsyslog 尝试向远程目标(如 omfwd)发送日志失败且进入“挂起(suspension)”状态时,rsyslog 会主动写一条形如 rsyslogd: action 'xxx' suspended (module 'omfwd') 的本地日志到 /var/log/messages 或主日志文件。这个日志就是状态信号源。
下面分三步实现动态展现:
1. 确保 suspension 日志可被结构化采集
rsyslog 默认输出的 suspension 日志是纯文本,需增强其可解析性:
- 在
action配置中显式启用报告并添加唯一标识(便于过滤):action( type="omfwd" target="192.168.10.100" port="514" protocol="tcp" queue.type="LinkedList" queue.filename="remoteq" queue.saveonshutdown="on" action.resumeRetryCount="-1" action.reportSuspension="on" action.reportSuspensionContinuation="on" # 添加自定义标签,便于后续日志提取 template="RSYSLOG_Suspension_Template" )
- 定义结构化模板(追加到
/etc/rsyslog.conf或/etc/rsyslog.d/99-suspension.conf):template(name="RSYSLOG_Suspension_Template" type="list") { constant(value="{\"type\":\"rsyslog_suspension\",\"status\":\"suspended\",") property(name="timereported" dateFormat="rfc3339") constant(value=",\"action\":\"remote_forward\",\"target\":\"192.168.10.100:514\"}") }✅ 这样每条 suspension 日志都是标准 JSON 行,含明确
status字段,利于日志采集器(如 Fluent Bit、Filebeat)自动解析。
2. 将 suspension 状态转为监控指标
以 Prometheus + node_exporter + textfile collector 方式为例(轻量、无需改服务):
-
创建脚本定期检查最新 suspension 日志(例如每30秒):
# /opt/rsyslog-monitor/suspension_status.sh #!/bin/bash LOG_FILE="/var/log/messages" LAST_SUSPENSION=$(tail -n 200 "$LOG_FILE" 2>/dev/null | \ grep -o '"status":"suspended"' | head -n1) if [ -n "$LAST_SUSPENSION" ]; then echo "rsyslog_remote_link_up 0" > /var/lib/node_exporter/rsyslog.prom else echo "rsyslog_remote_link_up 1" > /var/lib/node_exporter/rsyslog.prom fi
-
加入定时任务:
# crontab -e */1 * * * * /opt/rsyslog-monitor/suspension_status.sh
确保
node_exporter启用了--collector.textfile.directory=/var/lib/node_exporter/
✅ 此时 Prometheus 可抓取指标
rsyslog_remote_link_up(1=正常,0=已挂起),毫秒级响应链路异常。
3. 监控大屏配置建议
在 Grafana 中:
- 数据源:Prometheus
- 图表类型:Status panel 或 Singlestat(推荐用 State timeline 展示历史波动)
- 查询表达式:
rsyslog_remote_link_up{instance=~"your-client-host.*"} - 状态映射:
-
1→ Green / “UP” / “Healthy” -
0→ Red / “DOWN” / “Suspended since ${__value.time}”
-
- 建议叠加告警规则(如持续2分钟为0则触发通知)
⚠️ 注意:避免依赖
journalctl -u rsyslog实时流式解析——systemd journal 无固定日志格式,且reportSuspension不一定写入 journal(取决于imjournal配置),优先走/var/log/messages更稳定。
不复杂但容易忽略:action.reportSuspension 是“被动信号”,必须配合外部轮询或日志管道才能上屏;它本身不开放 HTTP 接口或指标端点。










