云监控 Nagios 安装步骤

运维 系统运维
最近在研究云监控的相关工具,之前写过Ganglia的安装步骤,这回来记录下Nagios的安装步骤。本文不讲解相关原理,若想了解请参考其他资料。本文目的:即使之前未触过nagios,也能按照文中步骤搭建自己的nagios监控集群。

前言

最近在研究云监控的相关工具,之前写过Ganglia的安装步骤,这回来记录下Nagios的安装步骤。

本文不讲解相关原理,若想了解请参考其他资料。

本文目的:即使之前未触过nagios,也能按照文中步骤搭建自己的nagios监控集群。

@Author  duangr 

@Website  http://my.oschina.net/duangr/blog/183160


1. Nagios简介

Nagios是一个可运行在Linux/Unix平台之上的开源监视系统,可以用来监视系统运行状态和网络信息。Nagios可以监视所指定的本地或远程主机以及服务,同时提供异常通知功能。在系统或服务状态异常时发出邮件或短信报警***时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。


2. 相关环境

Host Name IP OS
Arch
duangr-1 192.168.56.10 CentOS 6.4 x86_64
duangr-2 192.168.56.11 CentOS 6.4 x86_64
duangr-3 192.168.56.12 CentOS 6.4 x86_64

3. 部署规划

Nagios主节点需要安装:

  • nagios
  • nagios-plugin
  • nrpe
  • php
  • apache

Nagios从节点需要安装:

  • nagios-plugin
  • nrpe

安装路径规划

nagios安装路径 /usr/local/nagios
php安装路径 /usr/local/php
apache安装路径 /usr/local/apache2

4. 代码获取


5. 前提依赖

5.1 主机环境检查(全部节点)

  1. # rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel 
  2. gcc-4.4.7-3.el6.x86_64 
  3. glibc-2.14.1-6.x86_64 
  4. glibc-common-2.14.1-6.x86_64 
  5. gd-2.0.35-11.el6.x86_64 
  6. package gd-devel is not installed 
  7. package xinetd is not installed 
  8. openssl-devel-1.0.0-27.el6.x86_64 

若有缺失,请先安装. 可通过如下几个镜像网站下载相关安装包:

  • http://rpm.pbone.net/
  • http://mirrors.163.com/centos/6.4/os/x86_64/Packages/
  • http://mirrors.sohu.com/centos/6.4/os/x86_64/Packages/

安装后再次检查如下:

  1. # rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel 
  2. gcc-4.4.7-3.el6.x86_64 
  3. glibc-2.14.1-6.x86_64 
  4. glibc-common-2.14.1-6.x86_64 
  5. gd-2.0.35-11.el6.x86_64 
  6. gd-devel-2.0.35-11.el6.x86_64 
  7. xinetd-2.3.14-38.el6.x86_64 
  8. openssl-devel-1.0.0-27.el6.x86_64 

#p#

6. 编译安装

6.1 创建用户nagios(全部节点)

  1. useradd nagios -d /usr/local/nagios 
  2. passwd nagios   (密码自定义) 

6.2 安装nagios主程序(主节点安装)

  1. tar -zxf nagios-4.0.2.tar.gz 
  2. cd nagios-4.0.2 
  3. ./configure --prefix=/usr/local/nagios      
  4. make all 
  5. make install && make install-init && make install-commandmode && make install-config 

将nagios添加为服务

  1. chkconfig --add nagios  
  2. chkconfig nagios off 
  3. chkconfig --level 35 nagios on 
  4. chkconfig --list nagios     
  5. nagios          0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭 

6.3 安装nagios插件(全部节点安装)

  1. tar -zxf nagios-plugins-1.5.tar.gz 
  2. cd nagios-plugins-1.5 
  3. ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios       
  4. make && make install 

如果出现mysql相关的编译错误,是mysql的默认安装路径被修改导致的,调整with-mysql后重新make

  1. ./configure --prefix=/usr/local/nagios  --with-mysql=/usr/local/mysql 
  2. make && make install 

6.4 安装NRPE(全部节点安装)

  1. tar -zxf nrpe-2.15.tar.gz 
  2. cd nrpe-2.15 
  3. ./configure --enable-command-args 
  4. make all 
  5. make install-plugin 

下面步骤只需要在被监控节点执行

  1. make install-daemon && make install-daemon-config && make install-xinetd 

6.4.1 被监控节点配置

如果是被监控节点,需要配置NRPE已守护进程运行(通过xinetd来运行)

1、更改/etc/xinetd.d/nrpe文件,设置允许nagios主节点服务器连接

  1. vi /etc/xinetd.d/nrpe 
  2. only_from       = 127.0.0.1 192.168.56.10 

2、在/etc/services结尾增加:

  1. nrpe      5666/tcp       # NRPE 

3、增加对参数的支持

  1. vi /usr/local/nagios/etc/nrpe.cfg 
  2. dont_blame_nrpe=1 

4、启动xinetd

  1. service xinetd restart 

5、验证nrpe是否监听

  1. netstat -at | grep nrpe 

6、测试nrpe是否正常运行

  1. /usr/local/nagios/libexec/check_nrpe -H localhost 
  2. NRPE v2.15 

6.4.2 主节点配置

如果是监控服务主节点,在全部被监控节点NRPE配置完成后,可以依次做下检测

  1. /usr/local/nagios/libexec/check_nrpe -H 192.168.56.11 
  2. NRPE v2.15 
  3. /usr/local/nagios/libexec/check_nrpe -H 192.168.56.12 
  4. NRPE v2.15 

6.5 安装Apache(主节点安装)

  1. tar -zxf httpd-2.2.23.tar.gz 
  2. cd httpd-2.2.23 
  3. ./configure --prefix=/usr/local/apache2 
  4. make && make install 

6.6 安装PHP(主节点安装)

  1. cd /export/home/tools/soft/php 
  2. tar -zxf php-5.4.10.tar.gz 
  3. cd /php-5.4.10 
  4. ./configure --prefix=/usr/local/php  --with-apxs2=/usr/local/apache2/bin/apxs 
  5. make  && make install 

6.7 使用apache 发布PHP的WEB

vi /usr/local/apache2/conf/httpd.conf

  1. .... 
  2. Listen 80 
  3. .... 
  4. <IfModule dir_module> 
  5.     DirectoryIndex index.html index.php 
  6.     AddType application/x-httpd-php .php 
  7. </IfModule> 
  8. .... 
  9. #setting for nagios 
  10. ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
  11. <Directory "/usr/local/nagios/sbin"> 
  12.      AuthType Basic 
  13.      Options ExecCGI 
  14.      AllowOverride None 
  15.      Order allow,deny 
  16.      Allow from all 
  17.      AuthName "Nagios Access" 
  18.      AuthUserFile /usr/local/nagios/etc/htpasswd 
  19.      Require valid-user 
  20. </Directory> 
  21. Alias /nagios "/usr/local/nagios/share" 
  22. <Directory "/usr/local/nagios/share"> 
  23.      AuthType Basic 
  24.      Options None 
  25.      AllowOverride None 
  26.      Order allow,deny 
  27.      Allow from all 
  28.      AuthName "nagios Access" 
  29.      AuthUserFile /usr/local/nagios/etc/htpasswd 
  30.      Require valid-user 
  31. </Directory> 

为web访问时添加用户名和密码(此处用户名为admin,可自定义)

  1. /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd admin 

启动apache

  1. /usr/local/apache2/bin/apachectl start 

访问页面:http://192.168.56.10/nagios/

#p#

7. 配置Nagios

7.1 配置远程被监控节点

7.1.1 修改配置文件

  1. # su - nagios 
  2. $ vi /usr/local/nagios/etc/nrpe.cfg 

修改为如下配置内容:

  1. command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$ 
  2. command[check_load]=/usr/local/nagios/libexec/check_load -w $ARG1$ -c $ARG2$ 
  3. command[check_disk]=/usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ 
  4. command[check_procs]=/usr/local/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$ 
  5. command[check_procs_args]=/usr/local/nagios/libexec/check_procs  $ARG1$ 
  6. command[check_swap]=/usr/local/nagios/libexec/check_swap -w $ARG1$ -c $ARG2$ 

以上监控命令功能:

  • check_users                    监控登陆用户数
  • check_load                     监控CPU负载
  • check_disk                      监控磁盘的使用
  • check_procs                   监控进程数量,状态包括 RSZDT
  • check_swap                    监控SWAP分区使用

7.1.2 重启xinetd服务

配置完上述命令后,重启 xinetd服务

  1. service xinetd restart 

7.1.3 校验配置

检查监控命令配置是否ok

  1. /usr/local/nagios/libexec/check_nrpe -H localhost -c check_users  -a 5 10 
  2. /usr/local/nagios/libexec/check_nrpe -H localhost -c check_load   -a 15,10,5 30,25,20 
  3. /usr/local/nagios/libexec/check_nrpe -H localhost -c check_disk    -a 20% 10% / 
  4. /usr/local/nagios/libexec/check_nrpe -H localhost -c check_procs -a 200 400 RSZDT 
  5. /usr/local/nagios/libexec/check_nrpe -H localhost -c check_swap  -a 20% 10% 

7.2 配置监控服务主节点

7.2.1 cgi.cfg(控制CGI访问的配置文件)

(使用 nagios 用户)

vi /usr/local/nagios/etc/cgi.cfg

修改如下内容,为admin用户增加权限:

  1. default_user_name=admin 
  2. authorized_for_system_information=nagiosadmin,admin 
  3. authorized_for_configuration_information=nagiosadmin,admin 
  4. authorized_for_system_commands=nagiosadmin,admin 
  5. authorized_for_all_services=nagiosadmin,admin 
  6. authorized_for_all_hosts=nagiosadmin,admin 
  7. authorized_for_all_service_commands=nagiosadmin,admin 
  8. authorized_for_all_host_commands=nagiosadmin,admin 

7.2.2 nagios.cfg(nagios主配置文件)

(使用 nagios 用户)

vi /usr/local/nagios/etc/nagios.cfg

  1. #cfg_file=/export/home/nagios/etc/objects/localhost.cfg      (注释掉) 
  2. cfg_dir=/export/home/nagios/etc/servers 

主配置文件声明了监控脚本的存储路径为 ./servers,默认没有此目录,需要手工创建

nagios 会读取 servers 目录下面后缀为.cfg的全部文件作为配置文件

  1. cd /usr/local/nagios/etc 
  2. mkdir servers 
  3. cd servers 

7.2.3 定义监控的主机组

声明一个监控的主机组,将主机环境中提到的三台主机全部加入监控

vi /export/home/nagios/etc/servers/group.cfg

新文件,内容如下:

  1. define hostgroup{ 
  2.    hostgroup_name      duangr-server 
  3.    alias               duangr Server 
  4.    members             duangr-1,duangr-2,duangr-3 

解释下上面的配置:

  • hostgroup_name:    主机组的名称,可随意指定
  • alias:                       主机组别名,可随意指定
  • members:                主机组成员,多个主机名称之前使用逗号分隔。另外主机名称必须与 define host 中host_name 一致。

主机的定义,后面会说到。

7.2.4 定义监控的主机

下面开始定义具体的主机

7.2.4.1 本地主机监控配置

先定义本地主机 duangr-1

vi /export/home/nagios/etc/servers/duangr-1.cfg

新文件,内容如下:

  1. define host{ 
  2.        use                          linux-server 
  3.        host_name                    duangr-1 
  4.        alias                        duangr-1 
  5.        address                      192.168.56.10 
  6.        } 
  7.  
  8. define service{ 
  9.        use                             local-service 
  10.        host_name                       duangr-1 
  11.        service_description             Host Alive 
  12.        check_command                   check-host-alive 
  13.        } 
  14. define service{ 
  15.        use                             local-service 
  16.        host_name                       duangr-1 
  17.        service_description             Users 
  18.        check_command                   check_local_users!20!50 
  19.        } 
  20. define service{ 
  21.        use                             local-service 
  22.        host_name                       duangr-1 
  23.        service_description             CPU 
  24.        check_command                   check_local_load!5.0,4.0,3.0!10.0,6.0,4.0 
  25.        } 
  26. define service{ 
  27.        use                             local-service 
  28.        host_name                       duangr-1 
  29.        service_description             Disk Root 
  30.        check_command                   check_local_disk!20%!10%!/ 
  31.        } 
  32. define service{ 
  33.        use                             local-service 
  34.        host_name                       duangr-1 
  35.        service_description             Disk Home 
  36.        check_command                   check_local_disk!20%!10%!/export/home 
  37.        } 
  38. define service{ 
  39.        use                             local-service 
  40.        host_name                       duangr-1 
  41.        service_description             Zombie Procs 
  42.        check_command                   check_local_procs!5!10!Z 
  43.        } 
  44. define service{ 
  45.        use                             local-service 
  46.        host_name                       duangr-1 
  47.        service_description             Total Procs 
  48.        check_command                   check_local_procs!250!400!RSZDT 
  49.        } 
  50. define service{ 
  51.        use                             local-service 
  52.        host_name                       duangr-1 
  53.        service_description             Swap Usage 
  54.        check_command                   check_local_swap!20!10 
  55.        } 

说明下,由于是此主机也是监控服务主节点所在主机,因此可以使用check_local_* 的相关命令来进行监控。

这个文件中已经将常用的监控项配置进去。

7.2.4.2 远程主机监控配置

再定义远程主机duangr-2和duangr-3

定义远程主机的监控之前,需要先定义check_nrpe命令

vi /usr/local/nagios/etc/objects/commands.cfg

在文件的***面添加如下内容:

  1. # 'check_nrpe' command definition 
  2. define command{ 
  3.        command_name    check_nrpe 
  4.        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ 
  5.        } 
  6. define command{ 
  7.        command_name    check_nrpe_args 
  8.        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ -a $ARG2$ 
  9.        } 

定义duangr-2主机的监控配置

$ vi /usr/local/nagios/etc/servers/duangr-2.cfg

新文件,内容如下:

  1. define host{ 
  2.        use                     linux-server 
  3.        host_name               duangr-2 
  4.        alias                   duangr-2 
  5.        address                 192.168.56.11 
  6.        }  
  7. define service{ 
  8.        use                             local-service 
  9.        host_name                       duangr-2 
  10.        service_description             Host Alive 
  11.        check_command                   check-host-alive 
  12.        } 
  13. define service{ 
  14.        use                             local-service 
  15.        host_name                       duangr-2 
  16.        service_description             Users 
  17.        check_command                   check_nrpe_args!check_users!5 10 
  18.        } 
  19. define service{ 
  20.        use                             local-service 
  21.        host_name                       duangr-2 
  22.        service_description             CPU 
  23.        check_command                   check_nrpe_args!check_load!15,10,5 30,25,20 
  24.        } 
  25. define service{ 
  26.        use                             local-service 
  27.        host_name                       duangr-2 
  28.        service_description             Disk Root 
  29.        check_command                   check_nrpe_args!check_disk!20% 10% / 
  30.        } 
  31. define service{ 
  32.        use                             local-service 
  33.        host_name                       duangr-2 
  34.        service_description             Disk /export/home 
  35.        check_command                   check_nrpe_args!check_disk!20% 10% /export/home 
  36.        } 
  37. define service{ 
  38.       use                             local-service 
  39.       host_name                       duangr-2 
  40.       service_description             Procs Zombie 
  41.       check_command                   check_nrpe_args!check_procs!5 10 Z 
  42.       } 
  43.  
  44. define service{ 
  45.       use                             local-service 
  46.       host_name                       duangr-2 
  47.       service_description             Procs Total 
  48.       check_command                   check_nrpe_args!check_procs_args!"-w400 -c600" 
  49.       } 
  50. define service{ 
  51.        use                             local-service 
  52.        host_name                       duangr-2 
  53.        service_description             Swap Usage 
  54.        check_command                   check_nrpe_args!check_swap!20% 10% 
  55.        } 
  56.   
  57. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  58. ;;  下面是一些常用进程的监控,主要是云平台相关进程 
  59. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  60. ;; 监控crond进程 
  61. define service{ 
  62.        use                             local-service 
  63.        host_name                       duangr-2 
  64.        service_description             PS: crond 
  65.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Ccrond" 
  66.        } 
  67. ;; 监控zookeeper进程 
  68. define service{ 
  69.        use                             local-service 
  70.        host_name                       duangr-2 
  71.        service_description             PS: QuorumPeerMain 
  72.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.quorum.QuorumPeerMain" 
  73.        } 
  74. ;;监控storm的从节点进程 
  75. define service{ 
  76.        use                             local-service 
  77.        host_name                       duangr-2 
  78.        service_description             PS: supervisor 
  79.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -adaemon.supervisor" 
  80.        } 
  81. ;; 监控storm的主节点进程 
  82. define service{ 
  83.        use                             local-service 
  84.        host_name                       duangr-2 
  85.        service_description             PS: nimbus 
  86.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -adaemon.nimbus" 
  87.        } 
  88. ;; 监控MetaQ进程 
  89. define service{ 
  90.        use                             local-service 
  91.        host_name                       duangr-2 
  92.        service_description             PS: MetaQ 
  93.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -ametamorphosis-server-w" 
  94.        } 
  95. ;; 监控Redis进程 
  96. define service{ 
  97.        use                             local-service 
  98.        host_name                       duangr-2 
  99.        service_description             PS: redis-server 
  100.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Credis-server" 
  101.        } 
  102. ;; 监控hadoop主节点NameNode进程 
  103. define service{ 
  104.        use                             local-service 
  105.        host_name                       duangr-2 
  106.        service_description             PS: NameNode  
  107.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.namenode.NameNode" 
  108.        } 
  109. ;; 监控hadoop主节点SecondaryNameNode进程 
  110. define service{ 
  111.        use                             local-service 
  112.        host_name                       duangr-2 
  113.        service_description             PS: SecondaryNameNode 
  114.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.namenode.SecondaryNameNode" 
  115.        } 
  116. ;; 监控hadoop主节点ResourceManager进程 
  117. define service{ 
  118.        use                             local-service 
  119.        host_name                       duangr-2 
  120.        service_description             PS: ResourceManager 
  121.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.resourcemanager.ResourceManager" 
  122.        } 
  123. ;; 监控hadoop从节点DataNode进程 
  124. define service{ 
  125.        use                             local-service 
  126.        host_name                       duangr-2 
  127.        service_description             PS: DataNode 
  128.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.datanode.DataNode" 
  129.        } 
  130. ;;监控hadoop从节点NodeManager进程 
  131. define service{ 
  132.        use                             local-service 
  133.        host_name                       duangr-2 
  134.        service_description             PS: NodeManager 
  135.        check_command                   check_nrpe_args!check_procs_args!"-c1:1 -Cjava -aserver.nodemanager.NodeManager" 
  136.        } 

说明下,由于duangr-2是远程主机,因此使用check_nrpe_args命令来监控.

这个文件中已经将常用的监控项配置进去, 同时还包含了hadoop、storm、zookeeper、metaq、redis的相关进程监控,主要的监控思路是判断进程是否存在。

定义duangr-3主机的监控配置

vi duangr-3.cfg 

内容与duangr-2.cfg类似,只需要修改 host_name 、alias、 address即可.

7.2.4.3 邮件监控

定义监控人邮件地址

vi /usr/local/nagios/etc/objects/contacts.cfg

  1. define contact{ 
  2.        contact_name                    nagiosadmin             ; Short name of user 
  3.        use                             generic-contact         ; Inherit default values from generic-contact template (defined above) 
  4.        alias                           Nagios Admin            ; Full name of user 
  5.        email                           yourname@domain.com  
  6.                                                                ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** 
  7.        } 

除了配置监控邮件的接收人外,还要确保:

  • 本主机与邮件服务器互通
  • 本主机SendMail可以使用外部SMTP服务发送邮件

7.2.4.4 校验配置

  1. /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 

7.2.4.5 启动

  1. /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg 

nagios已经是一个服务,也可以执行如下操作:

  1. service nagios start/stop/restart/status 

#p#

8. 监控页面

http://192.168.56.10/nagios

 

责任编辑:奔跑的冰淇淋 来源: 开源中国博客
相关推荐

2011-04-06 15:05:57

nagios监控Linux

2011-04-06 15:05:57

nagios监控Linux

2011-03-22 13:00:49

Nagios监控

2011-03-23 10:17:24

2011-04-01 15:42:13

CactiNagios

2011-03-23 13:29:46

Debian安装Nagios

2011-03-04 10:47:06

Nagios监控Sphinx

2011-03-24 10:08:39

Nagios监控oracle

2011-03-22 15:17:14

Nagios安装

2011-03-28 17:18:57

nagios监控iostat

2011-03-22 15:17:19

Nagios监控

2011-03-21 14:53:27

Nagios监控Linux

2011-04-01 15:42:13

2011-03-21 14:43:42

2012-02-22 22:21:15

nagios开源

2011-03-22 09:07:12

nagios监控oracle

2011-04-01 15:39:02

CactiNagios

2011-03-21 15:35:01

Nagiosnagios-plug安装

2011-03-31 16:05:18

Redhat配置nagios

2011-08-22 12:25:02

nagios
点赞
收藏

51CTO技术栈公众号