Nagios

一、Nagios简介

 

Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

Nagios原名为NetSaint,由Ethan Galstad开发并维护至今。NAGIOS是一个缩写形式: “Nagios Ain’t Gonna Insist On Sainthood” Sainthood 翻译为圣徒,而”Agios”是”saint”的希腊表示方法。Nagios被开发在Linux下使用,但在Unix下也工作得非常好。

主要功能

  • 网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)
  • 主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)
  • 可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)
  • 可以通过配置Nagios远程执行插件远程执行脚本
  • 远程监控支持SSH或SSL加通道方式进行监控
  • 简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)
  • 包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)
  • 可并行服务检查
  • 能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查
  • 当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知
  • 能够自定义事件处理机制重新激活出问题的服务或主机
  • 自动日志循环
  • 支持冗余监控
  • 包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等

二、Nagios工作原理

Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。

Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/黄色、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深黄色。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。

四种监控状态

Nagios

 

再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,Nagios 自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成的。

Nagios 安装,是指基本平台,也就是Nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。

打开Nagios官方的文档,会发现Nagios基本上没有什么依赖包,只要求系统是Linux或者其他Nagios支持的系统。不过如果你没有安装apache(http服务),那么你就没有那么直观的界面来查看监控信息了,所以apache姑且算是一个前提条件。关于apache的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。

知道Nagios 是如何通过插件来管理服务器对象后,现在开始研究它是如何管理远端服务器对象的。Nagios 系统提供了一个插件NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:

Nagios

 

Nagios 通过NRPE 来远端管理服务

1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。

2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon

3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)

4. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。

5. Nagios 依次读取队列中的信息,再把结果显示出来。

三、安装配置nagios

        Nagios 软件需安装在一台独立的服务器上运行,这台服务器称为监控中心,监控中心服务器可以采用 Linux 或 Unix 操作系统;每一台被监视的硬件主机或服务都运行一个与监控中心服务器进行通信的 Nagios 软件后台程序,也可以理解为 Agent 或插件均可。监控中心服务器读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然 Nagios 软件必须在 Linux 或 Unix 操作系统上运行,但是远程被监控的机器可以是任何能够与其进行通信的主机,根据远程主机返回的应答,Naigos 将依据配置进行回应;接着 Nagios 将通过本地的机器进行测试,如果检测返回值不正确,Nagios 将通过一种或多种方式报警。
1.1 中心服务器基本环境
操作系统:CentOS 6.8 x86_64
IP 地址:192.168.36.122
1.2 安装epel扩展源(nagios)
[root@nagios ~]# yum install epel-release -y
1.3安装nagios系列软件
[root@nagios ~]# yum install httpd nagios nagios-plugins-all nagios-plugins-nrpe
1.4 设置修改后台用户密码
[root@nagios ~]# htpasswd -c /etc/nagios/passwd nagiosadmi
默认用户名:nagiosadmin 密码:nagiosadmin 通过此命令可以修改密码。
1.5 配置文件修改
[root@nagios ~]# vim /etc/nagios/nagios.cfg # 配置文件基本不用修改
检查配置文件是否有语法错误:
[root@nagios ~]# nagios -v /etc/nagios/nagios.cfg
1.6 启动nagios相关服务
[root@nagios ~]# service nagios start [root@nagios ~]# service httpd start
1.7 浏览器访问
http://192.168.36.122/nagios              # 注意最好要关闭iptables和selinux
通过浏览器访问上述的地址,输入后台用户名和密码。默认:nagiosadmin nagiosadmi
2.1 说明
对于客户端类似ping、ssh、http等基础网络服务,只需要在服务器端执行简单网络探测的命令即可查看相应的服务是否正常运行,因此对于这些服务的监控在客户端不需要安装任何的插件及服务。
2.2 客户端环境
操作系统:CentOS 6.4 x86_64IP 地址:192.168.36.125
2.3添加基本服务
# vim /etc/nagios/conf.d/192.168.36.125.cfg
define host{ # 定义主机:192.168.36.125 use linux-server host_name 192.168.36.125 alias 36.125 address 192.168.36.125 } 

define service{ # 添加 ping 监控服务 use generic-service host_name 192.168.36.125 service_description check_ping check_command check_ping!100.0,20%!200.0,50% max_check_attempts 5 normal_check_interval 1 } 

define service{ # 添加 ssh 监控服务 use generic-service host_name 192.168.36.125 service_description check_ssh check_command check_ssh max_check_attempts 5 normal_check_interval 1 } 

define service{ # 添加 http 监控服务 use generic-service host_name 192.168.36.125 service_description check_http check_command check_http max_check_attempts 5 normal_check_interval 1 }
2.4重新加载nagios配置文件
# service nagios reload
通过浏览器访问 http://192.168.36.122/nagios  通过 Current Status –> Service可以看到添加的主机 192.168.36.125 对应的3个服务的列表,刚开始都是 pending 状态,过一段时间 Status 会变成 OK 字样。
2.5配置文件说明
我们定义的配置文件中一共监控了三个 service: ssh ping http 这三个项目是使用本地的 nagios 工具去连接远程机器,及时没有安装任何的插件也是可以监测到的。
max_check_attempts 5:尝试检测到5次有问题才会告警,如果设置为1,一旦检测到问题立马告警normal_check_interval 1:重新检测的时间间隔,单位是分钟,默认是 3 分钟。notification_interval 60:出现异常后故障一直没有解决,nagios再次对使用者发出通知的时间。设置为0,仅通知一次。
其它的一些 service 诸如负载、磁盘使用等需要服务端通过 nrpe 去连接到远程主机获得信息,所以需要远程主机安装 nrpe 服务以及相应的插件程序。
3.1监控客户端
IP 地址:192.168.36.125
3.2 客户端需要安装的软件
[root@nagios ~]# yum install epel-release -y # 安装epel源 

[root@nagios ~]# yum install nrpe -y # 安装nrpe服务软件 

[root@nagios ~]# yum install nagios-plugins-all -y # 安装所有nagios插件
3.3 配置客户端nrpe服务能被监控
[root@nagios ~]# vim /etc/nagios/nrpe.cfg 
  allowed_hosts=127.0.0.1,192.168.36.122# 添加192.168.36.122来监控 
  dont_blame_nrpe=1 # 修改0为1,设置可以传递参数
  command[check_hda1]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
3.4 客户端启动nrpe服务
[root@nagios ~]# service nrpe start
3.5 服务器端配置来监控客户端
[root@vip ~]# vim /etc/nagios/objects/commands.cfg  
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }

[root@vip ~]# vim /etc/nagios/conf.d/192.168.0.28.cfg

define service{ # 添加监控负载 use generic-service host_name 192.168.0.28 service_description check_load check_command check_nrpe!check_load max_check_attempts 5 normal_check_interval 1 } define service{ # 添加监控sda1磁盘 use generic-service host_name 192.168.0.28 service_description check_disk_hda1 check_command check_nrpe!check_hda1 max_check_attempts 5 normal_check_interval 1 }
3.6重新加载服务器配置
# service nagios reload
通过浏览器访问 http://192.168.36.122/nagios 正常显示。
Nagios 对服务或主机监控的是一个瞬时状态,有时候系统管理员需要了解主机在一段时间内的性能及服务的响应状态,并且形成图表,这就需要通过查看日志数据来分析。但是这种方式不仅烦琐,而且抽象。为了能更直观的查看主机运行状态,这里采用 PNP 来实现此功能。PNP 是一个小巧的开源软件包,它是基于 PHP 和 Perl 脚本编写,PNP 可以利用 rrdtoul 工具将 Nagios 采集的数据绘制成图表,然后显示主机或者服务在一段时间内运行的状况。注:以下操作都是针对中心服务器的。
4.1 安装pnp4nagios软件
[root@vip ~]# yum install -y pnp4nagios rrdtool
4.2 修改主配置文件
# vim /etc/nagios/nagios.cfg 
process_performance_data=1 
host_perfdata_command=process-host-perfdata 
service_perfdata_command=process-service-perfdata 
enable_environment_macros=1
4.3 修改command.cfg配置文件
# vim /etc/nagios/objects/commands.cfg
process-host-perfdata和process-service-perfdata重新定义

define command { command_name process-service-perfdata command_line /usr/bin/perl /usr/libexec/pnp4nagios/process_perfdata.pl } 
define command { command_name process-host-perfdata command_line /usr/bin/perl /usr/libexec/pnp4nagios/process_perfdata.pl -d HOSTPERFDATA }
4.4 修改templates.cfg配置文件
# vim /etc/nagios/objects/templates.cfg 
define host { name hosts-pnp register 0 action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_ process_perf_data 1 } 
define service { name srv-pnp register 0 action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ process_perf_data 1 }

4.5 修改host和service的配置
# vim /etc/nagios/conf.d/192.168.36.125.cfg

所有主机使用的模板后边添加hosts-pnp:

define host{ use linux-server,hosts-

所有服务使用的模板后边添加srv-pnp:

define service{ use generic-service,srv-pnp host_name 192.168.0.48 service_description check_disk_hda1 check_command check_nrpe!check_hda1 }
4.6重启服务,再次访问
[root@vip conf.d]# service nagios restart [root@vip conf.d]# service httpd restart [root@vip conf.d]# service npcd start
浏览器访问:http://192.168.36.122/nagios 点击 Current Status -> service 即可显示出”曲线”图标,等待一段时间,点击图标即可看到数据。
5.1 增加联系人组
# vim /etc/nagios/objects/contacts.cfg
增加如下内容:
define contact{ contact_name 123 use generic-contact alias aming email liwei0526vip@163.com } define contact{ contact_name 456 use generic-contact alias aaa email liwei0526vip@163.com } define contactgroup{ contactgroup_name common alias common members 123,456 }
5.2 在需要告警的相关服务中添加告警联系人
然后在要需要告警的服务里面加上contactgroup ,这里示例中以 http 服务为例:
define service{ use generic-service,srv-pnp host_name 192.168.36.125 service_description check_http check_command check_http max_check_attempts 5 normal_check_interval 1 contact_groups common # 添加告警联系人 }
重启服务,ok。

 

 

原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/90844

(2)
上一篇 2017-12-20 12:56
下一篇 2017-12-21 13:07

相关推荐

  • 第二次作业

    一、只显示某目录下隐藏文件    答案1:#ls -d /tmp/*/    但是此答案是我在同学知道下完成,但是原理没明白 如果单独执行        #ls -d  &nbsp…

    Linux干货 2016-08-03
  • 图解Man

    个人浅见 欢迎指正

    Linux干货 2016-10-18
  • Linxu系统的启动过程

    Linxu系统的启动过程 启动流程 1、引导Linux启动是从BIOS中的地址0xFFFF0处开始的,BIOS由两部分组成:POST代码和运行时服务,运行时服务是为操作系统提供一些接口,如温度检测等。 BIOS的第一个步骤是加电自检(POST),完成对硬件的的检测,如某些硬件出现错误无法通过检测就导致系统无法启动,POST完成之后将被清出内存; BIOS的第…

    Linux干货 2016-09-13
  • 系统基础之sed工具详解

    sed工具详解 NAME:  sed – stream editor for filtering and transforming text(实现文本替换和过滤功能)  类型: 行编辑器(流) 特点: 把文件中的每一行加载到内存中,匹配模式,把能够匹配到模式的内容输出到屏幕,不修改原文件 工作模式:   每一次读取一…

    Linux干货 2016-08-10
  • linux基础学习-网络基础

    一、OSI七层模型 二、TCP/IP模型         三次握手原理 三、常见服务的默认端口 四、IP地址、子网划分基础知识     通信原理:一般数据的交互产生是在应用层(TCP/IP模型),应用层以下可以看成是搬运工,不同层的协议定义了不同的搬运工的工作内容,直到最后,把数…

    Linux干货 2016-09-05
  • ansible基础应用

    ansible基础 一、运维主要工作 ansible聚集以上功能于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量不太多,再大的用puppet。 二、ansible特性 (1)模块化:调用特定的模块,完成特定任务; (2)基于python语言实现,由paramiko,PYYAML和JINJa2三个关键模块组成 (3)部署简单:agentless…

    Linux干货 2017-01-04