共计 6038 个字符,预计需要花费 16 分钟才能阅读完成。
写在前头:限于个人对 nagios 的了解有限,写得不够深入与系统,甚至可能会有些错误,各位看官还多包涵。本文主要涉及的是 nagios daemon、nrpe 及三个部分。
01
nagios 系统的功能
- 主机或服务状态监控
nagios 是一款开源的监控软件,从它可以监控的设备类型上来看,主要包含网络设备,服务器设备。常见的网络设备如:路由器、交换机、防火墙、F5、打印机等,常见的服务器设备主要分为:UNIX 类、Linux 类以及 Windows 类。按我的理解凡是支持 snmp 协议的设备,包含 PC 都可以通过 nagios 进行监控。当然,nagios 实现对主机资源及服务的监控并非全依靠 snmp 协议,它最为主要的监控手段是通过 nrpe 组件来实现。 - 监控告警通知
nagios 对在网络中发现的问题会及时产生告警信息并通过事先定义好的方式,如邮件、短信、微信等方式通知相关人员。随着网络运维工作更加自动化,还可以通过 nagios 支持的相应 API 接口,开发相应的程序,实现其自动或人干干预去对监控发现的问题进行自动化的处理。 - 监控信息可视化
nagios 结合 web 服务器,可以将整个网络所监控的所有信息以 web 页面的形式展现出来,还可以结合外部软件实现监控数据可视化,以图表的形式展示在 web 页面中,本文将介绍 nagios 常用的画图软件包 pnp,现在叫 pnp4nagios。
- 监控数据存储
nagios 监控到的数据会存储下来,可以直接以文件的形式存储也可以通过 NDOUtils 组件存储到如 mysql 类的数据库中,从而可以很好支持监控历史数据的查询。
02
nagios 系统的组成
nagios 系统主要包含 nagios daemon、nagios plugin、nrpe、web 三个组件,它还包含 NDOUtils、NSCA、NSClinet++ 组件,它们共同组成一个完整的 nagios,组成逻辑图如下所示:
- Nagios Daemon
nagios 系统的核心组件,它负责组织与管理各组件,将它们协调起来共同完成监控任务,并完成监控信息的组织与展示。 - Nagios Plugins
nagios plugins 主要就是 nagios 核心组件自带以及用户自开发的一些插件,它们是实现各项监控的具体小程序,由它们将采集到相应的数据以后,回送给 nagios 服务器。 - NRPE
nagios 系统要想取得被监控主机的存活状态、http、ftp、ssh 服务是否可用,可以通过程序探测的出来,但如果要想取得被监控端上如磁盘容量,cpu 负载这类本地信息时,如果没有相应的权限就不行,所以就产生了代理程序,事先在被监控机上安装代理程序(Linux 系统是 nrpe 软件),然后通过它们来获取监控数据,再回送给 nagios 服务器。当 nrpe 启动以后,它会开启 5666 端口。nrpe 的工程原理如下图所示:
NRPE 总共由两部分组成:
check_nrpe:位于 nagios server 上。
NRPE daemon:位于被监控的 Linux 主机上。
当 Nagios 需要监控某个远程 Linux 主机时:
nagios 会运行 check_nrpe 这个插件,告诉它要检查什么
check_nrpe 插件会连接到远程的 NRPE daemon,所用的方式是 SSL;NRPE daemon 会运行相应的 nagios 插件来执行检查;
NRPE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 nagios 做处理。
- NSClinet++
NSClient++ 这一组件是安装在 windows 主机上,相当于 nagios server 在 windows 端的代理程序。 - NSCA
NSAC 这一组件适用于部署分布式 nagios 监控系统时使用,它可以实现让被监控端主动将需要监控的信息发送给 nagios 服务端。
03
本文所用到系统环境
OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64
还有一个重要环境:互联网(yum、百度 、Google)。
各软件包:
04
nagios 系统软件部署
服务器侧软件安装
前提:使系统具备编译软件源码包的能力, 并提前解决一些包、共享库文件之间的依赖关系,建议安装如下两个 Group 组件:
- 安装 nagios 依赖的软件包
nagios 要通过 web 页面展现监控结果,所以 nagios 服务器同时还得是一个 web 服务器,因为 nagios 各种数据的实时展现是动态页面呈现的,因此还需要用到 php。nagios 要实现画图还依赖于 gd、rrdtool 包。按照官方说明安装如下包:
- 创建 nagios 用户及组
很多开源软件如果是通过源码包来进行安装,为后续的安装及服务运行做准备都需要通过事先创建好相应服务的账号及组。这里相关指令如下:
- 创建一个可以从 web 接口接受外部指令的用户组并将 nagios 及 apache 添加进组
- 安装 nagios core
nagios core 就是前文提到的 nagios daemon。解压软件包后,源码安装的通用三步骤:- configure
- make
- make install
此外相应指令如下:
- 安装 nagios core
configure 完成以后若出现 make all
以完成编译的提示则继续执行:
如果上述任一指令执行后有 error 发生或者某文件,某组件没有找到,务必先解决相应的错误,一般可能是某些包没有安装导致,根据提示信息中的关键字找出可能的包,然后 yum 安装上即可。
- 创建登录 nagios web 页面的用户及密码
默认系统中已存在名为nagiosadmin
的账户,只需要给它指定密码,其密码会加密存储,密码文件默认为 `/usr/local/nagios/etc/htpasswd.users,无需改动。
- 重启 web 服务
- 安装 plugin 及 nrpe 组件
因为 nagios 服务器本身也同样需要被监控,自己监控自己或者被其它的 nagios 服务器所监控,所以它也需要安装 plugin 及 nrpe 组件。在软件包的解压目录中执行如下指令:
- 安装完
plugin
以后会在/usr/local/nagios/libexec
目录下存放大量插件,就是用这些插件来实现最终的监控目的的。
按着安装nrpe
:
nagios 服务器安装 nrpe 包主要目的是为了安装 check_nrpe 插件,便于与被监控 Linux 端的 NRPE daemon 程序通信,如果这台 nagios 服务器也需要被其它 nagios 服务器监控,那它还必须安装 nrpe daemon 和 nrpe daemon-config。
- 设置 web、nagios 服务开机自启
- 通过 web 页面登录 nagios
做完以上步骤以后,即可打开浏览器,输入http://nagios-server-ip/nagios
,它会弹出提示框,输入前面提到的nagiosadmin
及其密码即可登录。登录后的初始界面如下:
被监控端软件安装
在网络中需要被监控的 Linux 主机中安装 nagios plugin
和nrpe
两个组件,并安装 xinetd 组件,用于启动 nrpe
程序。
- nagios plugin 安装
创建nagios
用户:
- 将 tar.gz 包解压以后进入其目录,然后执行以下命令:
- 安装完成以后,建议修改安装目录
/usr/local/nagios
的属主为nagios
,并可查看到其下有三个目录:
- 安装
nrpe
:
客户端因为需要通过nrpe
程序来执行从服务器侧接收到的 command,因此必须安装nrpe
。
- 安装 xinetd
根据nrpe
的README
文件的说明,可以将nrpe daemon
作为 xinetd 下的一个服务来进行管理,所以需要事先将xinetd
安装到系统中:
- 再接着安装
nrpe
在xinetd
下的配置文件:
- 修改
nrpe
的配置文件,以允许nagios server
连接它:vim /etc/xinetd.d/nrpe
将only from
改成如下内容: - 将
nrpe
服务端口号添加进去:vim /etc/services
在最后一行加上nrpe 5666/tcp #Nagios-Client
然后保存退出。
启动 xinetd
服务并设置开机自启:
检查 nrpe 是否启动即端口 5666 是否处于监听状态:ss -tnl
另一个检测 nrpe 是否工作正常的办法是在 nagios 服务器上使用 check_nrpe
插件来测试与这台客户端的 nrpe 通信是否正常:
05
配置 nagios 监控主机及服务
5.1 nagios 配置文件位置
nagios 要对哪些主机监控哪些内容都是通过名为.cfg 的配置文件进行定义的。
它们通常是位于 /usr/local/nagios/etc
目录中的 *.cfg
以及位于 /usr/local/nagios/etc/objects
目录下的 *.cfg
。
默认的文件如下:
再看看 /objects/
目录下的内容:
5.2 各配置文件的作用:
- nagios.cfg 主配置文件
nagios.cfg
是nagios
服务端的主配置文件,它可以定义其它*.cfg
配置文件的位置,是否启用性能监控 (收集监控数据以生成图表),性能数据处理指令,性能数据文件格式模板及存放位置等,配置nagios
日志文件存放的信息级别及位置,nagios
进程的启动用户及组,日志文件的切割方式,显示的日期格式等等。如果只是实现对主机及服务的监控,不出监控图的话,默认可以不改动这一文件。 - templates.cfg 模板定义文件
templates.cfg
是监控的模板文件,对所有主机、服务、联系人的定义为简化配置都可以根据需求定制相应的模板,然后在主机、服务、联系人配置文件中去引用模板即可。下面进行简要说明:
以上便是 templates.cfg
文件中的主要内容,可以按需修改已定义的模板或者新定义模板。其中涉及到部分对 command 的定义,它是需要在 commands.cfg
文件中进行定义的。
- commands.cfg 命令定义文件
commands.cfg
文件可以包含监控时需要用到的指令的定义,由这些指令来完成具体的监控工作,它们可以在 services.cfg 文件中被调用。配置示例如下:
这里有一个名为 check_nrpe
的 command 特别重要:需要指定它才能够启动本地的 check_nrpe
去连接被监控端上的 nrpe daemon,并在被监控端执行相应的命令,需要自己添加,默认 commands.cfg
文件里是没有的:
- contacts.cfg 联系人定义文件
contracts.cfg
这一文件定义了当需要发送告警通知时,需要发给哪些联系人组,然后不同的组里可以分别定义相应的成员,默认情况下会将通知发给名为admins
的组,里面包含的 email 地址即为接收告警通知邮件的地址。示例如下:
- timeperiods.cfg 时间段模板定义文件
timeperiods.cfg
主要用来对要进行监控的时间段以及可以发送通知的时间段进行定义,很灵活很方便。
- localhost.cfg 监控服务器配置文件
localhost.cfg
这个文件是用来定义对这台 nagios 服务器的哪些资源及服务进行监控的,它主要包含两部分的定义,针对 host 级别的和针对 service 级别的。示例如下:
- hosts.cfg 定义要被监控的主机
hosts.cfg
文件可以将网络中所有需要监控的主机定义进来,并将它们根据需求分组,一台主机可以同时属于不同的组,默认情况下不允许组里面一台主机都没有,然后根据需要调用不同的主机模板(事先在 templates.cfg 中定义)。另一点很重要的是这个文件需要自己创建,不建议直接在 localhost.cfg 里添加。示例如下:
- services.cfg 定义要被监控的服务
services.cfg
这个文件默认也是不存在的,需要手工创建,可以以 localhost.cfg 里定义的 service 部分作为模板进行修改。在它里面可以针对不同的服务调用不同的模板,以及把这些服务应用到哪些主机或主机组上。示例如下:
由于新增加了两个配置 文件 (hosts.cfg 和 services.cfg),所以需要在 nagios 主配置文件(nagios.cfg) 中指明它们的位置,只需要在 nagios.cfg 中加上两行,搜索下 cfg_file
加到它们的下面即可:
5.3 检查配置文件
nagios 自带的就有配置文件语法及逻辑检测工具,检测方式:
检测如果没有问题,则可以重载 nagios 服务,使用最新配置文件来工作了。
重载服务service nagios reload
5.4 客户端配置监测命令及参数
要实现对 Linux 主机的监控还差非常关键的一步,去到各被监控 Linux 主机上配置实际要执行的指令,它们是在 /etc/usr/local/nagios/etc/nrpe.cfg
文件中定义的。示例文件如下:
注意:[]中的内容,这些字符要和 nagios 服务端上
services.cfg 里定义 command 时 check_nrpe! 后面的字符完全一样,等号中的内容则前面介绍的方法查看每个 plugin 的具体用法。
客户端在修改完 nrpe.cfg 文件以后,需要重启 nrpe 进程:
06
登录 nagios web 页面查看监控数据
在 nagios 客户端还没有配置好 nrpe.cfg 文件时,nagios server 是无法监控到客户端的,此时应该可以通过 web 页面查看到一堆 NRPE:undefined command 之类的错误信息,当客户端 nrpe 服务修改完成并重启之后,过会儿就能够正常监控上这些客户端了。效果展示如下:
主机监控视图
细心的读者可能已经发现两图中,日期格式好像更易读,默认会显示为 04-08-2017 22:30:00
这种,这是因为笔者修改了 nagios.cfg 的 date_format
为iso8601
,具体可查看 nagios.cfg 文件获知。
07
结尾
在前期安装及配置过程中要仔细留意可能出现的警告及错误信息,尽可能修复它们之后在后续操作,nagios 跑起来以后,可以通过查看 /var/log/messages
或者 /usr/local/nagios/var/nagios.log
来观察错误信息,以找到解决办法。
比如:
在系统运行过程中因为 nagios server 和客户端 nrpe 间需要建立 ssl 会话,所以 openssl,openssl-devel 包是需要安装的。如果要使用 snmp 监控主机及服务则需要安装 net-snmp 包。如果对防火墙不熟悉建议关闭其服务,关闭 SELinux。这些在文中未提到,但也是需要注意的地方。
通过 nagios 实现对主机和服务的监控基本操作方法就写到这儿,在日常使用中有很多可可以深入的地方,特别是对现网各种服务各项指标的监控工作,还需要开发插件然后部署才能够实现,这应该才是监控类软件应用真正有挑战的地方,考验运维工程师的开发能力,nagios 支持使用 perl、Python、shell,C 等语言开发插件以满足实际业务监控需求。