阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何实现nagios发送通知邮件

182次阅读
没有评论

共计 3047 个字符,预计需要花费 8 分钟才能阅读完成。

前言

上一篇已经介绍了 nagios 如何实现对主机及服务的监控,尽可能实现对系统运行状态的全面监控只是初级目标,nagios 还可以借助 smtp 服务发送通知信息给指定的联系人。

本文所用到系统环境 OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64 还有一个重要环境:互联网(yum、百度、Google)。各软件包:

 如何实现 nagios 发送通知邮件

nagios 发送通知邮件的配置过程如下:

1. nagios 服务配置内容

  • 修改 templates.cfg 要让 nagios 能够发送邮件,首先要定义什么情况下可以触发 nagios 来发送邮件通知,邮件的接收对象,以及通知邮件发送的时间段及频率等,这些参数都需要事先在 templates.cfg 文件中定义好。示例如下:

    如何实现 nagios 发送通知邮件

  • 修改 services.cfg 首先要注意的是笔者的 services.cfg 文件中对有些服务的监控是没有使用 check_nrpe 指令的,如 ping 测试,ssh,http 服务都是直接使用的相应的 plugin 来监测的。所以如果要修改这些服务的监控告警阈值需要修改这个 services.cfg 文件,而对于其它调用了 check_nrep 指令的服务则同样需要修改 /usr/local/nagios/etc/nrpe.cfg,并且确保两者中的指令名称一样。services.cfg 示例如下:

    如何实现 nagios 发送通知邮件

  • 对于使用 check_nrpe 指令来启动的监控对象则需要修改 /usr/local/nagios/etc/nrpe.cfg 中的命令参数,来配置相应的 warinning 和 critical 阈值。示例如下:

    如何实现 nagios 发送通知邮件

  • 实际工作中,根据业务需求进行配置,上述数值只作为示例。
  • 修改 commands.cfg 在上面的配置模板 templates.cfg 中可以看到分别针对主机和服务的通知发送引用了两个命令:notify-host-by-email 和 notify-service-by-email,这两个命令具体是什么样的,它是在 commands.cfg 文件中定义的。示例如下:

    如何实现 nagios 发送通知邮件

  • 修改 contracts.cfg 修改 contracts.cfg 文件的目的是为了定义当 nagios 需要发送通知时 nagios 知道要将通知发给谁。示例如下:

    如何实现 nagios 发送通知邮件

2. 邮件服务配置

  • 检查 nagios server 的 smtp 服务是否正常 Linux 主机上可以通过 sendmail 或者 postfix 来启动 smtp 服务,使用 ss -tnl 来检查 25 端口是否开启即可。如果则检查是否安装了 sendmail 或者 postfix 软件包,二者有其一即可,如果安装了,手动将服务启动即可 service sendmail start 或者 service postfix start。
  • 配置 nagios server 本机发件账户因为这台 nagios 服务器没有邮件域名注册在公网上,nagios 系统默认情况下会使用名为 nagios@nagios-server-name 的邮件地址给 contracts.cfg 中定义的邮件地址发送通知邮件,这个地址不是合法的,所以要么邮件发送不出去,要么发送出去了,会被收件者邮件服务器放到垃圾箱中,如果没有公司邮件可以使用,那么可以配置如网易这类公共邮箱来进行邮件的发送。

    需要注意 1. 登录网页邮箱设置中确认已开启 smtp 服务。2. 为邮箱启用授权码,在设置中可以找到,163 邮箱的授权码是自己设定的的,并记好在第三方的邮件客户端软件中配置 163 邮箱时要用到。3. QQ 邮箱同样可以设置授权码,但它是随机变化的,每次设置时都不一样,且它的 smtp 连接需要使用 ssl,在 Linux 中笔者没搞定,所以建议不要将 QQ 邮箱作为 nagios 通知邮件的发送方。

    给本机配置发件时使用的邮箱服务是通过修改 mail.rc 文件完成的,在其最后加上如下内容:

    如何实现 nagios 发送通知邮件

  • 修改完成以后,重启一下 smtp 服务,sendmail 或者 postfix。
  • 使用 mail 发送测试邮件使用 mail 指令来发送测试邮件,以验证 nagios server 是否已可以使用刚才配置的 163 邮箱往指定的邮箱发送邮件了。mail 指令由 mailx 软件包提供,其路径要和 commands.cfg 里定义的路径一致,即 /bin/mail。测试方式:

    如何实现 nagios 发送通知邮件

  • 测试 nagios 发送通知邮件在确保 nagios 服务器可以通过配置的 163 邮箱往外成功发送邮件以后,接着测试 nagios 发送通知邮件的功能是否正常。制造告警 测试环境中,笔者人为将一台名为 server1 上的 http 服务 down 掉 nginx -s stop,然后观察 naginx web 页面监控,及查看是否能够收到通知邮件。观察到的 nagios web 页面监控信息如下:

     如何实现 nagios 发送通知邮件

    nagios 监控到 http 不可用触发 critical 告警

    时间上可以看到是:2017-04-09 16:15:51,尝试了 1 / 4 即检测到了一次失败,此时还不会发送通知邮件,只有连续检测到了 4 次失败才会发送通知邮件。接着当检测到了 4 次以后情况如下:

 如何实现 nagios 发送通知邮件

连续检测到 4 次 critical

此时 nagios 日志会记录这一情况,从日志可以清楚的看到,4 次 检测间隔时间为 1 分钟(以下为 /var/log/messages 中的情况,nagios 会同时将日志记录到 syslog 和它自己的日志中,默认如此,可以改变设置):

 如何实现 nagios 发送通知邮件

从上面最后一条日志可以看到 nagios 触发了发送通知的操作。与此同时,笔者的 QQ 邮箱也收到了这一通知邮件,时间相差只有 3 秒,反应非常迅速。笔者开启了微信上的 QQ 邮箱通知功能,虽然不具备让 nagios 直接调用微信平台公众号推送通知的能力,但这个方式感觉也很方便。下图是邮件的相关信息,其中包括邮件主题,正文内容及格式,都是可以在 commands.cfg 的 mail 部分配置的。示例如下:

 如何实现 nagios 发送通知邮件

nagios 通知邮件微信推送

当处理完 server1 http 这一 critical 后,nagios 会在第一次检测成功后即发送服务恢复的邮件。这些邮件发送的时机,检测的次数这些都是在 templates.cfg 中定义好的。之所以连续检测 4 次失败才会发送通知邮件是由 max_check_attempts 决定的,默认配置为 3,表示第一次检测失败后,最多再尝试 3 次,如果还是检测失败,则即刻发送通知消息。失败之后每次间隔一分钟检测一次,是由 retry_interval 参数定义的。

3. nagios 对故障的反应时间小结

经过实际测试现对 nagios 故障反应时间做如下总结:

  • nagios 默认情况下会按照事先定义好的 check_interval 来检测,主机或服务状态变化那刻如果没到相应监测项目的下一个检测时间点,nagios server 是不会去检测的,默认情况下 check_interval 为 5 分钟。
  • nagios server 要监控到主机或服务失败最长的间隔是距离故障发生了一个检测周期,取决于针对这一主机或服务所配置的检测间隔。
  • 相关人员收到 nagios 消息通知的时间最短也得距离故障发生有 retry_interval*max_retry_attempts 的时长了。

针对 nagios server 对故障反应的时长问题,应该可以通过用于主动监控的 NSCA 组件可以缩短,NSCA 组件是用于实现更大规模的分布式监控体系的,它可以让被监控端主动发送监控信息给 nagios server。这一部分还有待后续学习实践。

另外在 nagios wed 页面中也可以很方便地对各个服务的邮件通知进行 Disable 或者 Enable 操作,特殊情况下可以临时关闭对某主机或某些服务的通知操作,便于维护工作的展开。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计3047字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中