本篇包含以下内容
 
基于 Nagios4.4.1,Nagios-Plugin2.2.1 
Nagios 概述 Nagios 是一款用于监控系统和网络的开源应用软件,能有效的监控 windows,linux 和 unix 的主机状态。采用 C/S 结构。Nagios 由 ANSI C 编写。
Nagios 结构  分为 Nagios Core 核心主程序和 Nagios Plugins 插件。核心只提供很少的监控功能,用户需要给 Nagios 安装相应插件以搭建完善的监控系统。
Nagios 如何工作 
监控:监控关键 IT 基础架构组件,包括系统指标,网络协议,应用程序,服务,服务器和网络基础架构。 
告警:在关键基础架构组件发生故障和恢复时发送警报,为管理员提供重要事件的通知。警报可以通过电子邮件,短信或自定义脚本提供。 
响应:IT 人员可以确认警报并开始解决中断并立即调查安全警报。如果未及时确认警报,则警报可以升级到不同的组。 
报告:报告提供中断,事件,通知和警报响应的历史记录,供以后查看。 
维护:计划停机可防止在计划维护和升级窗口期间发出警报。 
计划:通过趋势和容量规划图表和报告,运维人员可以在发生故障之前识别必要的基础架构升级。 
 
Nagios 特点 
网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH、端口,URL,丢包,进程数,网络流量、交换机端口流量,路由器,打印机) 
本地和远端主机资源监控(CPU、内存、磁盘、日志、负载 uptime、I/O,Raid 级别,温度,passwd 文件的变化,本地所有文件指纹识别),也包括 Windows 主机(使用 NSClient++ plugin) 
业务数据监控(用户登陆失败次数,用户登陆网站次数,输入验证码失败次数,某个 API 接口流量并发,网站订单,支付交易数量) 
可以指定自己编写的 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 Core 的独立扩展,可以使用 Core 监控任何事情。 插件处理命令行参数,执行特定检查,然后将结果返回给 Nagios Core。它们可以是编译的二进制文件(用 C,C ++等编写)或可执行的脚本(shell,Perl,PHP 等)。
NRPE 概述  NRPE 总共由两部分组成:
check_nrpe 插件,位于监控主机上 
NRPE daemon,运行在远程被监控的 Linux 主机上 
 
当监控远程主机服务或资源时,工作流程如下:
nagios 会运行 check_nrpe 插件并指定检查项 
check_nrpe 插件会通过 ssl 连接到远程的 NRPE daemon 
NRPE daemon 会运行相应的 Nagios 插件来执行检查动作 
NPRE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 Nagios 做处理 
 
NRPE 的检测类型分为两种:
直接检测:检测的对象是运行 NRPE 的那台 Linux 主机的本地资源,直接使用 NRPE 插件监控远程 Linux 主机的本地或者私有资源 
间接检测:当运行 Nagios 的监控主机无法访问到某台被监控主机,但是运行 NRPE 的机器可以访问得到的时候,运行 NRPE 的主机就充当一个中间代理,将监控请求发送到被监控对象上 
 
就如下图中check_disk和check_load是直接检测,check_http和check_ftp是间接检测。
Nagios 搭建 服务器端需要安装的软件: 
LAMP:因为 Nagios 需要 web 端显示,所以需要 LAMP 的 web 环境,也可以是 LNMP。 
Nagios-core:Nagios 的主程序 
Nagios-plugins:Nagios 的插件 
NRPE:Nagios 的一个功能扩展,可在远程主机上执行插件程序,是客户端程序。 
 
客户端需要安装的软件 
Nagios-plugins 
NRPE 
 
服务器端 
首先搭建 LAMP 环境yum install httpd php php-gd gd* gcc* glibc* openssl* 注:gd 是图像处理库 
创建用户 nagios,创建用户组 nagcmd,将 apache 和 nagios 都添加到 nagcmd 副组中。组 nagcmd 用于从 Web 接口执行外部命令  
创建安装目录/usr/local/nagios,编译安装 
 
进入nagios-4.4.1解压目录 ./configure \   --prefix=/usr/local/nagios \   --with-command-group=nagcmd  General Options:  -------------------------         Nagios executable:  nagios         Nagios user/group:  nagios,nagios        Command user/group:  nagios,nagcmd              Event Broker:  yes         Install ${prefix}:  /usr/local/nagios     Install ${includedir}:  /usr/local/nagios/include/nagios                 Lock file:  /run/nagios.lock    Check result directory:  /usr/local/nagios/var/spool/checkresults            Init directory:  /lib/systemd/system   Apache conf.d directory:  /etc/httpd/conf.d              Mail program:  /usr/bin/mail                   Host OS:  linux-gnu           IOBroker Method:  epoll  Web Interface Options:  ------------------------                  HTML URL:  http://localhost/nagios/                   CGI URL:  http://localhost/nagios/cgi-bin/  Traceroute (used by WAP):  /usr/bin/traceroute make all \   && make install \               # 安装Nagios主程序的CGI和HTML   && make install-init \          # 在/lib/systemd/system创建Nagios启动脚本,即可通过systemctl操作   && make install-commandmode \   # 配置目录权限   && make install-config \        # 安装示例配置文件,在/usr/local/nagios/etc目录   && make install-webconf         # 生成配置文件/etc/httpd/conf.d/nagios.conf 
 
至此,Nagios Core 安装完成。
进入nagios-plugins-2.2.1解压目录 ./configure \   --prefix=/usr/local/nagios make && make install 查看/usr/local/nagios/libexec目录下是否有插件文件,若有则安装成功 
 
nagios plugins 安装后,继续安装 NRPE。 
 
进入nrpe-3.2.1解压目录 ./configure make all \ && make install \ && make install-plugin \ && make install-daemon \ && make install-config  General Options:  -------------------------  NRPE port:    5666  NRPE user:    nagios  NRPE group:   nagios  Nagios user:  nagios  Nagios group: nagios 
 
因为可能开启邮件告警功能,所以要启动 sendmail 服务,不需要做任何配置。yum install sendmail*systemctl enable sendmailsystemctl start sendmail
 
也可以使用 postfix 服务进行邮件告警,同样不需要任何配置yum install postfix*systemctl enable postfixsystemctl start postfix注:sendmail 和 postfix 同时只开启一个,一个开启则另一个会自动停止 
 
 
至此,服务器端核心组件安装完成。
如果要进行汉化,则可以安装中文插件nagios-cn。 下载后直接解压进入目录,然后./configure,make && make install即可。
 
先检查下/usr/local/nagios/bin中是否有命令nagios和nagiostats,如果没有,就将 nagios-4.4.1 目录中base目录下的nagios命令和nagiostats命令复制到/usr/local/nagios/bin/中,因为通过systemctl启动 nagios 时,会调用该目录的nagios命令。若不存在会报错无法启动。
 
为配置文件还有 nagios 和 nagiostats 命令创软链接。ln -s /usr/local/nagios/etc/nagios.cfg /etc/nagios.cfgln -s /usr/local/nagios/etc/cgi.cfg /etc/cgi.cfg
 
为 nagios 默认登录用户 nagiosadmin 创建 http 验证密码。htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
 
将/usr/local/nagios的所有者和所属组都改为nagios
 
使用nagios -v /etc/nagios.cfg检查配置文件是否正确。
 
确保 Selinux 关闭,确保防火墙放行 80 端口或关闭。
 
启动 httpd 和 nagios 以及 nrpe 服务,并设为开机自启。systemctl start httpd nagios nrpesystemctl enable httpd nagios nrpe
 
在浏览器上输入IP地址/nagios,会先要求输入 htpasswd 设置的用户名密码登录验证。登录成功后跳转到 Nagios 主页面。
 
 
服务器端配置 NRPE ln -s /usr/local/nagios/etc/nrpe.cfg /etc/nrpe.cfg
修改commands.cfg文件,添加check_nrpe命令 
 
define command {     command_name check_nrpe     command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } 
 
define service {     use local-service     host_name system3     service_description users     check_command check_nrpe!check_users    # 在check_nrpe!后直接使用nrpe.cfg定义的command变量 } 
 
完成后重启 nrpe
客户端安装 
进入nagios-plugins-2.2.1解压目录 ./configure --prefix=/usr/local/nagios make && make install 
 
进入nrpe-3.2.1解压目录 ./configure make all \                 构建nrpe和check_nrpe && make install \          安装nrpe和check_nrpe && make install-plugin \   安装check_nrpe插件 && make install-daemon \   安装nrpe daemon && make install-config     安装nrpe 配置文件 && make install-init       安装systemd文件 
 
查看配置文件/usr/local/nagios/etc/nrpe.cfg,若要添加监控命令,便找到以下配置,按照格式进行添加 command 
 
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10 command[check_load]=/usr/local/nagios/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20 command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200 # command后中括号里内容就是定义的变量,名称可任意指定 
 
(可选)修改/etc/services,添加nrpe 5666/tcp # Nagios_client。
 
启动 nrpe,systemctl start nrpe,并使用ps -ef查看 nrpe 是否启动。
 
使用插件/usr/local/nagios/libexec/check_nrpe -H localhost检验 nrpe 是否启动成功。若成功,会输出 NRPE 的版本号。
 
修改配置文件/usr/local/nagios/nrpe.cfg 
 
 
#server_address=127.0.0.1      # 客户端主机IP地址 # 添加监控服务器地址,声明合法的NRPE服务对象 allowed_hosts=127.0.0.1,监控服务器地址或域名 # 若没有在这指定监控服务器地址,则监控服务器无法获取本机的服务信息 
 
给命令nrpe和配置文件nrpe.cfg创软链接,并以守护进程启动。nrpe -c /etc/nrpe.cfg -d 也可通过systemctl start nrpe启动。
 
测试 nrpe 是否成功启动/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1,输出 NRPE 版本号则启动成功。
 
测试 nrpe 是否能与客户端通信,同样使用check_nrpe指定对端 IP 地址或域名,输出 NRPE 版本号则通信正常。 若报错
 
 
目录与配置文件概述 在 Nagios 服务器端安装完后,/usr/local/nagios中有以下目录:bin,etc,sbin,share,libexec,var,var/archives,var/rw。 其中libexec是存放外部插件的。share是存放网页文件的。var/archives是存放归档日志的。var/rw是存放外部命令的。
配置文件或目录 
说明 
 
 
cgi.cfg 
控制 cgi 访问的配置文件 
 
nagios.cfg 
Nagios 主配置文件 
 
resource.cfg 
变量定义文件 
 
objects 
目录,存放配置文件模板,用于定义 Nagios 对象 
 
objects/commands.cfg 
命令定义配置文件,定义的命令可悲其他配置文件使用 
 
objects/contacts.cfg 
定义联系人和联系人组 
 
objects/localhost.cfg 
定义监控本地主机 
 
objects/printer.cfg 
定义监控打印机,默认未开启 
 
objects/switch.cfg 
定义监控路由器,默认未开启 
 
objects/templates.cfg 
定义主机、服务,默认未开启 
 
objects/timeperiods.cfg 
定义监控时间段 
 
objects/windows.cfg 
定义 windows 主机,默认未开启 
 
Nagios 配置中涉及到的定义:(建议按以下顺序配置)
主机、主机组、服务、服务组 
监控命令 
监控时间 
联系人、联系人组 
 
Nagios 监控的主机资源和服务在配置文件中称为对象。 建议将 Nagios 各个定义对象创建独立的配置文件,如:
创建hosts.cfg定义主机和主机组 
创建services.cfg定义服务和服务组 
 
其余的对象都用默认文件即可。
templates.cfg 定义主机和服务的模板
define contact {             # 定义联系人     name                            generic-contact         ; 联系人名     service_notification_period     24x7                    ; 服务通知时间,默认24x7任何时间     host_notification_period        24x7                    ; 主机通知时间,默认24x7任何时间     service_notification_options    w,u,c,r,f,s             ; 服务发送通知的状态条件     # w:警告warn u:未知unknown c:紧急criticle r:重新恢复recover     host_notification_options       d,u,r,f,s               ; 主机发送通知的状态条件     # d:宕机down u:未知/不可达unreachable r:重新恢复     service_notification_commands   notify-service-by-email ; 服务发送通知的方式     host_notification_commands      notify-host-by-email    ; 主机发送通知的方式 } define host {                # 定义主机     name                            generic-host            ; 主机名(对于配置文件,并非系统主机名)     notifications_enabled           1                       ; 是否开启主机通知,1为开启,2为不开启     event_handler_enabled           1                       ; 是否开启事件处理     flap_detection_enabled          1                       ; 是否启用报警延时     process_perf_data               1                       ; 是否启用数据输出     retain_status_information       1                       ; 是否在程序重启期间保留状态信息     retain_nonstatus_information    1                       ; 是否在程序重启期间保留非状态信息     notification_period             24x7                    ; 主机通知时间,默认任何时间 } define host {     name                            linux-server            ; 主机名     use                             generic-host            ; 引用指定的主机,此处引用了上面定义的主机的配置     check_period                    24x7                    ; 检查主机的时间段,默认不间断     check_interval                  5                       ; 检查主机的时间间隔,默认5分钟     retry_interval                  1                       ; 重试检查时间间隔,默认1分钟     max_check_attempts              10                      ; 对主机检查的最多次数。并不是检查一次就判断,而是多检查几次才判断是否故障。单位次     check_command                   check-host-alive        ; 默认检查命令     notification_period             workhours               ; 发送通知的时间段     notification_interval           120                     ; 发送通知的间隔,单位分钟     notification_options            d,u,r                   ; 发送通知的状态条件     contact_groups                  admins                  ; 联系人组 } 后面还有对打印机、交换机的主机定义 然后就是对服务的定义 define service {              # 定义服务     name                            generic-service         ; 服务名     active_checks_enabled           1                       ; 是否开启动态检查     passive_checks_enabled          1                       ; 是否开启主动检查     parallelize_check               1                       ; 应该并行化活动服务检查(禁用此功能可能会导致严重的性能问题)     obsess_over_service             1                       ; 默认为1     check_freshness                 0                       ; 默认为0     notifications_enabled           1                       ; 是否启用服务通知     event_handler_enabled           1                       ; 是否启用事件处理     flap_detection_enabled          1                       ; 是否启用报警延时     process_perf_data               1                       ; 是否启用数据输出     retain_status_information       1                       ; 是否在程序重启期间保留状态信息     retain_nonstatus_information    1                       ; 是否在程序重启期间保留非状态信息     is_volatile                     0                       ; 是否稳定,0为稳定,1为不稳定     check_period                    24x7                    ; 检查服务的时间段,默认不间断     max_check_attempts              3                       ; 对服务检查的最多次数     check_interval                  10                      ; 检查时间间隔,默认10分钟     retry_interval                  2                       ; 重试检查时间间隔,默认2分钟     contact_groups                  admins                  ; 联系人组     notification_options            w,u,c,r                 ; 发送通知的状态条件     notification_interval           60                      ; 发送通知的间隔,单位分钟     notification_period             24x7                    ; 发送通知的时间段 } 
 
resource.cfg 定义变量的模板。变量需要先定义才能在别的配置文件中调用,否则 nagios 就会报错。
# 变量$USER1$指定了nagios插件的安装路径 $USER1$=/usr/local/nagios/libexec # $USER2$定义了事件处理的安装路径 $USER2$=/usr/local/nagios/libexec/eventhandlers 
 
Nagios 宏 Nagios 配置有两个特征:继承与引用,在命令行定义中使用宏,通过宏,Nagios 可灵活获取主机、服务等对象的信息。在命令执行前,Nagios 会对命令进行宏替换。 宏分为:默认宏、按需而成的宏、用户自定义宏
define host{     host_name        linuxbox     address	         192.168.1.2     check_command    check_ping ... } define command{     command_name     check_ping     command_line     /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 100.0,90% -c 200.0,60% } 在执行时,就会把宏替换为IP地址 
 
命令参数宏 向命令传递参数,参数指定在对象中定义,用一个!分隔。 
 
define service{     host_name             linuxbox     service_description   PING     check_command         check_ping!200.0,80%!400.0,40% ... } define command{     command_name    check_ping     command_line    /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ } 在执行时,会将分隔的两个参数替换到命令中的ARG1和ARG2 
 
注:如果要在命令中使用!,\都要使用反斜杠转义 
Nagios 可用的所有宏:
主机宏$HOSTNAME$:主机名,取自主机定义中host_name$HOSTADDRESS$:主机 IP 地址,取自主机定义中address 
服务宏$SERVICESTATE$:服务状态描述,三个可能:w,u,c$SERVICEDESC$:对当前服务的描述 
联系人宏$CONTACTNAME$:联系人名,在联系人文件中定义 
通知宏$NOTIFICATIONTYPE$:返回状态信息。 
日期宏$LONGDATETIME$:当前日期,时间戳 
文件宏$LOGFILE$:日志文件保存位置$MAINCONFIGFILE:主配置文件保存位置 
其他宏$ADMINMAIL$:管理员 E-mail 地址$ARGn$:第 n 个命令参数,n 是数字。最多支持 32 个参数宏。 
 
commands.cfg 定义命令。
define command {     command_name    check-host-alive      # 命令名     # 命令执行     command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5     # 调用插件check_ping,-w为warning警告状态,-c为紧急,80%表示ping的临界值。-p 5表示每次发5个ping包 } 
 
hosts.cfg 默认不存在,定义主机。
define host { 	use           linux-server    # 引用templates.cfg中linux-server的配置 	host_name     web             # 主机名 	alias         web-system5     # 别名 	address       192.168.163.137 # IP地址 } define hostgroup { 	hostgroup_name    web-servers # 主机组名 	alias             web-servers # 别名 	members           web         # 组成员(填host_name,逗号分隔) } 
 
services.cfg 默认不存在,定义服务。
define service { 	use                    local-service  # 引用templates.cfg中local-service的配置 	host_name              web   # 主机名 	service_description    ping  # 服务描述 	check command          check_ping.....  #引用命令 } define servicegroup {     # 服务组,配置类似主机组 	servicegroup_name 	alias 	members } 
 
定义联系人。
define contact { 	contact_name     # 联系人名 	use              # 使用templates.cfg中指定模板信息 	alias 	email            # 联系人邮箱 } define contactgroup { 	contactgroup_name    # 联系人组名 	alias 	members } 
 
timeperiods.cfg 定义监控时段。
define timeperiod {     name                    24x7     #定义时段名 	# 之前host和service中的24x7就是引用这里定义的时段名     timeperiod_name         24x7     alias                   24 Hours A Day, 7 Days A Week     # 定义监控时间,若某天不监控则不要写那天     sunday                  00:00-24:00     monday                  00:00-24:00     tuesday                 00:00-24:00     wednesday               00:00-24:00     thursday                00:00-24:00     friday                  00:00-24:00     saturday                00:00-24:00 } 
 
cgi.cfg 控制 cgi 脚本。用于在 web 界面执行 cgi 脚本,如重启 nagios 进程、关闭通知、停止检测等。 以下为修改权限涉及的参数
default_user_name=guest authorized_for_system_information=nagiosadmin          # 验证系统信息 authorized_for_configuration_information=nagiosadmin   # 验证配置信息 authorized_for_system_commands=nagiosadmin             # 验证系统命令 authorized_for_all_services=nagiosadmin                # 验证所有服务 authorized_for_all_hosts=nagiosadmin                   # 验证所有主机 authorized_for_all_service_commands=nagiosadmin        # 验证所有服务命令 authorized_for_all_host_commands=nagiosadmin           # 验证所有主机命令 
 
nagios.cfg Nagios 的核心配置文件,所有配置文件必须在此文件中引用才有作用。
log_file=/usr/local/nagios/var/nagios.log             # 日志文件路径 cfg_file=/usr/local/nagios/etc/objects/commands.cfg cfg_file=/usr/local/nagios/etc/objects/contacts.cfg cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg cfg_file=/usr/local/nagios/etc/objects/templates.cfg cfg_file=/usr/local/nagios/etc/objects/localhost.cfg # 继续添加配置文件即可启用指定配置文件。 # 也可以直接将文件放入一个目录,然后通过cfg_dir=指定 object_cache_file=/usr/local/nagios/var/objects.cache  # 指定一个所有对象配置文件的副本文件,也称为对象缓冲文件。 # nagios会将所有对象文件的内容都写入该文件 resource_file=/usr/local/nagios/etc/resource.cfg  # 指定nagios资源文件的路径,可在nagios.cfg定义多个资源文件 status_file=/usr/local/nagios/var/status.dat  # 指定状态文件,用于保存nagios当前状态、注释、宕机信息等 status_update_interval=10  # 状态文件的更新周期,单位秒,最小1秒 nagios_user=nagios   # nagios进程所属用户 nagios_group=nagios  # nagios进程所属用户组 check_external_commands=1  # 是否允许nagios在web界面执行cgi命令 interval_length=60  # 指定nagios时间单位,默认60s,即nagios配置中所有 时间单位为分钟 
 
Nagios 监控界面解析 左侧菜单栏中Current Status目录如下
Tactical Overview    总览 Map                  拓扑图 Hosts                主机 Services             服务 Host Groups          主机组 - Summary            汇总 - Grid               表格 Service Groups       服务组,也分为汇总和表格 Problems             问题故障 - Service(Unhandled) 未解决的服务故障 - Hosts(Unhandled)   未解决的主机故障 - Network Outages    网络整体 
 
Reports目录如下:
Availability         可用性 Trends               趋势 Alerts               报警 - History            历史 - Summary            汇总 - Histogram          历史图 Notification         通知 Event Log            事件日志 
 
System目录如下:
Comments             注释 Downtime             停机计划 Process Info         进程信息 Performance Info     性能查询 Scheduling Queue     定时查询 Configuration        配置 
 
常用操作 Nagios 对主机和服务有几个描述的状态
Hosts
Up 启动(绿) 
Down 未启动(红) 
Unreachable 不可达(黄) 
Pending 等待(灰色) 
 
 
Services
Ok 正常(绿) 
Warning 警告(黄) 
Unknown 未知(橙) 
Critical 紧急(红) 
Pending 等待(灰) 
 
 
 
Nagios 性能分析图表 
需要安装pnp软件包,基于 PHP 和 Perl,利用 rrdtool 工具将 nagios 收集的数据绘制成图表。pnp 官网  首先,需要安装gd库、zlib库、jpeg库yum install gd gd-devel zlib zlib-devel jpeg* 接着安装rrdtool工具yum install rrdtool* 安装perl环境yum install perl 最后去 pnp 官网下载源码包安装 
 
./configure \   --with-nagios-user=nagios \   --with-nagios-group=nagios \   --with-rrdtool=/usr/bin/rrdtool \   --with-perfdata-dir=/usr/local/nagios/share/perfdata make all \   && make install \   && make install-config \   && make install-init \   && make install-webconf 或者直接make fullinstall(包含以上所有make)   General Options:   -------------------------         -------------------   Nagios user/group:                nagios nagios   Install directory:                /usr/local/pnp4nagios   HTML Dir:                         /usr/local/pnp4nagios/share   Config Dir:                       /usr/local/pnp4nagios/etc   Location of rrdtool binary:       /usr/bin/rrdtool Version 1.7.0   RRDs Perl Modules:                FOUND (Version 1.6999)   RRD Files stored in:              /usr/local/nagios/share/perfdata   process_perfdata.pl Logfile:      /usr/local/pnp4nagios/var/perfdata.log   Perfdata files (NPCD) stored in:  /usr/local/pnp4nagios/var/spool   Web Interface Options:   -------------------------         -------------------   HTML URL:                         http://localhost/pnp4nagios   Apache Config File:               /etc/httpd/conf.d/pnp4nagios.conf 
 
安装完后,将/usr/local/pnp4nagios的所有者和所属组都改为 nagios
配置 pnp 将/usr/local/pnp4nagios/share目录下所有文件复制到/usr/local/nagios/share/pnp中。 将/usr/local/pnp4nagios/etc中npcd.cfg、rra.cfg、process_perfdata.cfg后面的-sample去除(如果有的话)。 
 
首先修改process_perfdata.cfg。
# 指定日志路径 LOG_FILE = /usr/local/pnp4nagios/var/perfdata.log # 日志输出级别,默认为0,最好改为2,即debug LOG_LEVEL = 2 # 三个等级:0==slient 1==normal 2==debug 
 
然后将 pnp 与 nagios 进行整合,对 templcates.cfg 配置,添加以下定义。
define host {     name                  hosts-pnp     register              0     action_url            /nagios/pnp/index.php?host=$HOSTNAME$     process_perf_data     1 } define service {     name                  services-pnp     register              0     action_url            /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$     process_perf_data     1 } # 注:必须在不应处理其性能数据的每个主机或服务的定义中禁用数据处理(process_perf_data 设为0)。 
 
然后在hosts.cfg和services.cfg和localhost.cfg中要进行数据分析的服务或主机的name参数后加上hosts-pnp或service-pnp,如下:
define service { 	use                    local-service,serviecs-pnp 	host_name              web 	service_description    ping 	check command          check_ping..... } 
 
修改 nagios.cfg
# 开启Nagios数据输出。会将收集到的数据写入文件 process_performance_data=1 # 取消注释,启用主机和服务的输出功能 host_perfdata_command=process-host-perfdata service_perfdata_command=process-service-perfdata host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$ service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$ host_perfdata_file_mode=a service_perfdata_file_mode=a host_perfdata_file_processing_interval=0 service_perfdata_file_processing_interval=0 host_perfdata_file_processing_command=process-host-perfdata-file service_perfdata_file_processing_command=process-service-perfdata-file 
 
修改 commands.cfg
define command {     command_name    process-host-perfdata-file     # 将原来的command_line注释,改为如下参数     command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata } define command {     command_name    process-service-perfdata-file     # 将原来的command_line注释,改为如下参数     command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata } 
 
重启 nagios 和 httpd 进入 web 端,点击左侧菜单services。进入如下页面
点击红框框出的图标,即可进入 pnp 测试界面
若全部通过,便会提示删除或重命名/usr/local/nagios/share/pnp/install.php。于是将该 php 文件删除。rm -f /usr/local/nagios/share/pnp/install.php
如果在点击 pnp 图标时,出现以下报错:
则需要检查nagios.cfg和commands.cfg配置文件,查看commands.cfg配置可知command_name为process-host-perfdata的默认存放路径bulk为/usr/local/pnp4nagios/var/host-perfdata,同理,process-service-perfdata的存放路径为/usr/local/pnp4nagios/var/service-perfdata。
而在nagios.cfg中host_perfdata_file默认路径为/usr/local/nagios/var/host-perfdata,service_perfdata_file默认路径为/usr/local/nagios/var/service-perfdata,两个文件不一致,导致 pnp4nagios 无法获取。
将nagios.cfg的两条配置,改为与commands.cfg的一致即可
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata 
 
邮件告警配置 先安装 sendmail 或 postfix,安装完后开启。本篇使用 sendmail 服务。 使用mail命令发送测试邮件。若没有 mail 命令,需要先下载mailx软件mail -s test XXXX@XX.com输入内容完后ctrl+d结束。
关于邮件告警主要涉及以下几个文件:
其中有关于contact的定义 define contact {     name                            generic-contact     service_notification_period     24x7     host_notification_period        24x7     service_notification_options    w,u,c,r,f,s     host_notification_options       d,u,r,f,s     service_notification_commands   notify-service-by-email     host_notification_commands      notify-host-by-email     register                        0 } # 发送服务通知使用的是notify-service-by-email命令   发送主机同时使用的是notify-host-by-email命令 
 
如果不成功,一定要注意到此文件中发送通知的命令 默认使用sendmail命令,若主机没有就不可能发送成功。 需要替换为mail或mailx。还要注意这两个命令的目录,是/bin还是/sbin define command {     command_name    notify-host-by-email     command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } define command {     command_name    notify-service-by-email     command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } 
 
最后通过contacts.cfg设置联系人,在 email 中填写自己的邮箱 
 
define contact {     contact_name            nagiosadmin     use                     generic-contact     alias                   Nagios Admin     email                   XXXX@XX.com } 
 
当服务出现重启或故障时,系统会自动发送邮件。 
 
参考资料 
Nagios 配置安装详解  > 使用 Nagios 搭建监控服务器  > Nagios 官方文档  > Pnp 官方配置文档  > Nagios 监控系统架设全攻略  > CentOS7 安装 nagios 并配置出图详解  > 2017 年 11 月最新 Nagios4.3.4 部署  高性能 Linux 服务器构建实战:运维监控、性能调优与集群应用