原创投稿 | 如何实现nagios发送通知邮件

前言

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

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

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

1. nagios服务配置内容

  • 修改templates.cfg 要让nagios能够发送邮件,首先要定义什么情况下可以触发nagios来发送邮件通知,邮件的接收对象,以及通知邮件发送的时间段及频率等,这些参数都需要事先在templates.cfg文件中定义好。示例如下:
  • 修改services.cfg 首先要注意的是笔者的services.cfg文件中对有些服务的监控是没有使用check_nrpe指令的,如ping测试,ssh,http服务都是直接使用的相应的plugin来监测的。所以如果要修改这些服务的监控告警阈值需要修改这个services.cfg文件,而对于其它调用了check_nrep指令的服务则同样需要修改/usr/local/nagios/etc/nrpe.cfg,并且确保两者中的指令名称一样。services.cfg示例如下:
  • 对于使用check_nrpe指令来启动的监控对象则需要修改/usr/local/nagios/etc/nrpe.cfg中的命令参数,来配置相应的warinning和critical阈值。示例如下:
  • 实际工作中,根据业务需求进行配置,上述数值只作为示例。
  • 修改commands.cfg 在上面的配置模板templates.cfg中可以看到分别针对主机和服务的通知发送引用了两个命令:notify-host-by-emailnotify-service-by-email,这两个命令具体是什么样的,它是在commands.cfg文件中定义的。示例如下:
  • 修改contracts.cfg 修改contracts.cfg文件的目的是为了定义当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文件完成的,在其最后加上如下内容:
  • 修改完成以后,重启一下smtp服务,sendmail或者postfix。
  • 使用mail发送测试邮件 使用mail指令来发送测试邮件,以验证nagios server是否已可以使用刚才配置的163邮箱往指定的邮箱发送邮件了。mail指令由mailx软件包提供,其路径要和commands.cfg里定义的路径一致,即/bin/mail。测试方式:
  • 测试nagios发送通知邮件 在确保nagios服务器可以通过配置的163邮箱往外成功发送邮件以后,接着测试nagios发送通知邮件的功能是否正常。 制造告警 测试环境中,笔者人为将一台名为server1上的http服务down掉nginx -s stop,然后观察naginx web页面监控,及查看是否能够收到通知邮件。 观察到的nagios web页面监控信息如下:

连续检测到4次critical

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

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

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操作,特殊情况下可以临时关闭对某主机或某些服务的通知操作,便于维护工作的展开。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

05.Git分支管理

05.Git分支管理 Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。...

3707
来自专栏Android知识点总结

SpringBoot-03-之热部署

1284
来自专栏Snova云数仓

Snova添加子用户及策略操作指南1

在用户列表中,选择需要授权的子用户。关联snova相关读写权限。策略关联成功后,子用户即获取相关资源权限。

1617
来自专栏性能与架构

使用 cURL 测量网站响应时间

内容整理自:https://blog.cloudflare.com/a-question-of-timing/,其中还有 chrome 的测量方式,有兴趣的朋友...

1832
来自专栏安恒信息

【高危】漏洞预警 | Linux Systemd存在高危远程溢出漏洞(CVE-2017-9445)

systemd是Linux下的init软件,主要用于减少系统引导时间和计算开销。 systemd 的systemd-resolved服务用于处理DNS请求并为本...

3167
来自专栏运维前线

Gitlab安装使用及汉化配置

一、GitLab简介 GitHub是2008年由Ruby on Rails编写而成,与业界闻名的Github类似;但要将代码上传到GitHub上面,而且将项目设...

1.8K6
来自专栏实战docker

kubeadm搭建kubernetes集群之二:创建master节点

在上一章《kubeadm搭建kubernetes集群之一:构建标准化镜像》中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为...

3438
来自专栏性能与架构

使用 twemproxy 构建 Redis 集群

twemproxy 简介 twemproxy(又称 nutcracker)是 Twtter 贡献的一个 轻量级 高性能 的 redis/memcached 代理...

3314
来自专栏Java架构师历程

maven介绍

1 如果使用了spring,去spring的官网下载jar包;如果使用hibernate,去hibernate的官网下载Jar包;如果使用Log4j,去log4...

3355
来自专栏云计算教程系列

如何在FreeBSD 10.1上安装MongoDB

MongoDB是一个免费的开源NoSQL数据库。它是当今Web应用程序中最常用的数据库之一,因为它在数据库模式设计中提供了高性能,可伸缩性和大量灵活性。在本教程...

1660

扫码关注云+社区

领取腾讯云代金券