本文档详细讲解 Zenity GUI 弹窗、wall 系统广播、syslog 系统日志、邮件告警、Webhook 告警、本地报警文件 六种 Linux 下主流告警方式,包含安装方法、命令语法、可直接运行的示例、适用场景与注意事项。
一、Zenity GUI 弹窗告警
Zenity 是基于 GTK 的图形化对话框工具,可在带桌面环境的 Linux 系统中弹出警告、错误、提示、输入框等窗口,适合桌面端、工控机带屏场景的强提醒告警。
- 安装
bash
Debian/Ubuntu
apt install zenity -y
CentOS/RHEL
yum install zenity -y
- 核心语法与常用类型
通用格式:
zenity 选项 --对话框类型 --text="提示内容" --title="窗口标题"
常用对话框类型:
| 对话框 | 命令 | 说明 |
|---|---|---|
| 信息提示 | --info | 普通信息通知 |
| 警告提示 | --warning | 黄色警告图标 |
| 错误提示 | --error | 红色错误图标 |
| 确认询问 | --question | 返回 0/1 判断用户选择 |
| 文本输入 | --entry | 弹出输入框,返回用户输入 |
| 进度条 | --progress | 显示任务进度 |
- 常用示例
4. 关键注意事项
- 无 GUI 服务器无法使用,仅适用于带 X11/Wayland 桌面的环境。
- root 用户执行需指定 DISPLAY 变量:

SSH 远程执行需开启 X11 转发(ssh -X),否则无法弹出窗口。
- 适合工控机、本地运维终端、桌面工作站的强视觉提醒。
二、wall 系统广播告警
wall 是 Linux 系统自带的终端广播工具,可向所有已登录的终端用户发送消息,无需图形界面,适合服务器多用户场景下的紧急通知。
- 核心语法与常用类型
wall 无需额外安装,系统默认自带。
通用格式:
wall 参数 "消息文本"
常用参数:
- -n, --nobanner:不显示消息头部
- -t, --timeout=SECONDS:设置超时时间
- -h, --help:显示帮助信息
- -V, --version:显示版本信息
- 常用示例

也支持管道输入:

- 进阶使用
4. 关键注意事项
- 默认只有 root 用户可以向所有终端广播,普通用户只能给自己发。
- 消息会发送到所有 tty、pts 终端,包括 SSH 登录的会话。
- 用户可通过 mesg n 拒绝接收普通用户的广播,但 root 发送的消息不受限制。
- 适合紧急运维通知、集群操作广播、机房现场终端告警。
三、syslog 系统日志告警
通过 logger 命令将告警信息写入系统日志,配合 rsyslog 可实现日志集中存储、分级告警、日志转发,是服务器最基础的告警记录方式。
- 核心语法与常用类型
系统默认自带,无需安装。

常用参数:
- -p 设施.优先级:指定日志级别,如 user.crit
- -t 标签:给日志加标识,方便过滤
- -f 文件:将文件内容写入日志
- -s:同时输出到标准错误终端
- 日志级别与设施
常用优先级(从低到高):
debug < info < notice < warning < err < crit < alert < emerg
- 常用示例
4. 进阶:配置 rsyslog 单独存储告警日志
编辑 /etc/rsyslog.d/alarm.conf:
重启服务生效:

- 关键注意事项
- 日志告警属于被动记录,需配合日志监控工具(如 ELK、Promtail)实现主动提醒。
- 适合所有服务器场景,是告警的基础兜底记录方式。
- 生产环境建议将告警日志集中转发到日志服务器,避免本地日志丢失。
四、邮件告警
通过邮件将告警信息发送到管理员邮箱,是无人值守服务器最常用的远程告警方式,依赖 SMTP 服务。
- 安装邮件客户端
推荐使用 mailx(heirloom-mailx),轻量且支持 SMTP 配置。

- 配置 SMTP 发件邮箱
编辑 /etc/mail.rc,在末尾添加配置(以 163 邮箱为例):

- 发送告警邮件
4. 关键注意事项
- 邮箱密码需使用授权码,而非登录密码(QQ/163 等邮箱需在后台开启 SMTP 并获取授权码)。
- 生产环境建议搭建本地邮件中继服务器,避免公共邮箱频率限制。
- 适合非紧急但需留痕的告警、每日巡检报告、故障汇总通知。
五、Webhook 告警
通过 HTTP 请求调用第三方 IM 工具的机器人接口,将告警推送到钉钉、企业微信、飞书等群聊,是当前生产环境最主流的实时告警方式。
- 通用原理
使用 curl 命令向 Webhook 地址发送 POST 请求,消息体为 JSON 格式。
- 钉钉机器人告警示例
3. 企业微信机器人告警示例

- 封装为脚本函数
5. 关键注意事项
- 生产环境建议对 Webhook 地址做加密存储,避免泄露。
- 需处理网络异常情况,加超时和重试机制。
- 适合实时告警、运维群通知、7×24 小时监控告警,响应速度远快于邮件。
六、本地报警文件
在本地生成告警标记文件或告警日志,供监控脚本、定时任务扫描读取,适合离线环境、低资源设备、多级告警联动场景。
- 实现方式
方式 1:生成告警标记文件

方式 2:追加写入告警日志文件
2. 配合定时任务扫描
3. 关键注意事项
- 属于本地被动告警,需配合其他机制联动。
- 适合嵌入式设备、离线工控机、无网络环境的告警暂存。
- 需定期清理旧告警文件,避免占用磁盘空间。
七、综合告警脚本示例
以下脚本整合多种告警方式,可根据环境自动适配:
bash
#!/bin/bash
综合告警函数
ALARM_LOG="/var/log/local_alarm.log"
WEBHOOK_URL="你的webhook地址"
ADMIN_MAIL="admin@example.com"
send_alarm() {
local level="$1"
local msg="$2"
local time_str=$(date '+%Y-%m-%d %H:%M:%S')
local full_msg="$time_str $level $msg"
1. 始终写入本地日志和文件
logger -p user."level" -t alarm "msg"
echo "full_msg" \>\> "ALARM_LOG"
2. 有终端用户则广播
if -n "$(who)" ; then
echo "$full_msg" | wall
fi
3. 有桌面环境则弹 GUI 窗口
if -n "$DISPLAY" && command -v zenity &> /dev/null; then
if "$level" = "crit" ; then
zenity --error --title="系统告警" --text="$msg" &
else
zenity --warning --title="系统告警" --text="$msg" &
fi
fi
4. 有网络则发送 Webhook 和邮件
if curl -s --connect-timeout 2 baidu.com &> /dev/null; then
Webhook
curl -s -X POST "$WEBHOOK_URL" \
-H 'Content-Type: application/json' \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$full_msg\"}}" > /dev/null
严重级别发邮件
if "$level" = "crit" ; then
echo "full_msg" \| mail -s "【严重告警】msg" "$ADMIN_MAIL"
fi
fi
}
调用示例
send_alarm warning "磁盘使用率达到 85%"
send_alarm crit "nginx 服务异常停止"
八、告警方式选型对比
| 告警方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Zenity GUI | 视觉强提醒,交互性好 | 依赖桌面环境,远程不可用 | 工控机、本地工作站、带屏服务器 |
| wall 广播 | 系统自带,全终端覆盖 | 仅终端可见,无远程推送 | 多用户服务器紧急通知、机房运维 |
| syslog 日志 | 稳定可靠,永久留痕 | 被动记录,无主动提醒 | 所有服务器基础兜底、审计追溯 |
| 邮件告警 | 跨平台,易留痕,支持附件 | 延迟高,易进垃圾箱 | 非紧急告警、日报周报、故障汇总 |
| Webhook | 实时到达,支持富文本,群通知 | 依赖网络和第三方平台 | 生产环境实时监控、运维群告警 |
| 本地报警文件 | 不依赖网络,资源占用低 | 被动,需联动其他机制 | 离线设备、嵌入式工控、多级联动 |