为什么需要设置Nagios告警
公司服务器突然宕机,没人第一时间发现,等到用户投诉才处理,这种事在运维圈太常见了。Nagios作为老牌监控工具,核心价值不只是发现问题,而是及时通知你。光有监控不设告警,就像装了摄像头却不看回放。
下面以CentOS系统上的Nagios Core为例,一步步配置邮件告警,让你在服务异常时第一时间收到提醒。
确认基础环境和联系人配置
进入Nagios的配置目录,一般位于 /usr/local/nagios/etc/。打开 objects/contacts.cfg 文件,确保有一个可用的联系人定义:
define contact {
contact_name admin
alias 系统管理员
email admin@company.com
}这个 contact_name 会在后续的服务告警中被引用。email 字段就是接收告警邮件的地址,务必填写正确。
启用邮件通知命令
查看 objects/commands.cfg 文件,确认是否存在名为 notify-by-email 的命令:
define command {
command_name notify-by-email
command_line /bin/mail -s "** $NOTIFICATIONTYPE$ $SERVICEDESC$ on $HOSTALIAS$ **" $CONTACTEMAIL$ << EOF
Host: $HOSTNAME$
State: $SERVICESTATE$
Time: $LONGDATETIME$
Info: $SERVICEOUTPUT$
EOF
}如果系统没有安装 mailx 工具,需要先用 yum install mailx 安装,并配置SMTP转发,否则邮件发不出去。测试命令:echo "test" | mail -s "test mail" admin@company.com,能收到才算通。
为服务绑定告警规则
编辑你要监控的服务配置文件,比如 objects/localhost.cfg 或自定义的服务文件。在某个服务定义中加入 notification_options 和 contacts 字段:
define service {
use local-service
host_name localhost
service_description CPU Load
check_command check_load!5,4,3!10,8,6
notification_options w,c,r
contacts admin
}这里的 w 表示警告(warning),c 是严重(critical),r 是恢复(recovery)。只要状态变化符合这些条件,就会触发通知。
调整告警频率和间隔
默认情况下,Nagios可能会频繁发送重复告警。在 contacts.cfg 中可以设置 notification_period 和 notification_interval:
define contact {
contact_name admin
alias 系统管理员
email admin@company.com
notification_period 24x7
notification_interval 60
}上面的配置表示全天候接收通知,且故障持续期间每60分钟提醒一次。设为0则只在状态变化时通知一次。
重启Nagios并验证配置
改完配置别急着重启,先检查语法:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg没有报错再执行重启:
systemctl restart nagios接着手动模拟一个故障,比如停掉httpd服务,观察是否收到邮件。收到后说明链路打通了。
如果没收到,去 /usr/local/nagios/var/logs/nagios.log 查日志,看是通知没触发,还是邮件命令执行失败。
扩展:微信或钉钉告警怎么接
现在很多团队不用邮件,更喜欢钉钉或企业微信。原理一样——把原来的 mail 命令换成调用 webhook 的脚本。
比如写个 Python 脚本,接收告警信息并通过 requests 发到钉钉机器人。然后在 commands.cfg 里定义新命令:
define command {
command_name notify-by-dingtalk
command_line /usr/local/nagios/libexec/notify_dingtalk.py --text '$HOSTNAME$ - $SERVICEDESC$ is $SERVICESTATE$'
}脚本权限要给足,测试通了再上线。这类集成在实际工作中特别实用,值班人员手机一震就知道该干活了。