标签归档:nagios

Nagios分布式配置

摘自:http://www.comeonsa.com/2010/08/nagios%e5%88%86%e5%b8%83%e5%bc%8f%e9%85%8d%e7%bd%ae/comment-page-1/#comment-237

Nagios分布式配置
2010年8月14日 k9.huang 发表评论 阅读评论
nagios的分布式是通过在主服务端开启nsca接口进行内容的接收,客户端通过调用send_nsca程序,进行内容的传输,服务端在接收到约定格式的内容后,进行告警。以下内容省略了,nagios的主服务端与分布式服务端的安装步骤。

一、NSCA插件安装与配置
http://nchc.dl.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz

编译安装nsca:
查看源代码打印帮助0 ./configure && make all

nagios主服务端:
1.拷贝nsca相关文件至nagios目录
查看源代码打印帮助0 cp sample-config/nsca.cfg /usr/local/nagios/etc/

1 cp src/nsca /usr/local/nagios/bin/

2 chown nagios.nagios /usr/local/nagios/etc/nsca.cfg

3 chown nagios.nagios /usr/local/nagios/bin/nsca

2.配置nsca.cfg文件中password
查看源代码打印帮助0 vi /usr/local/nagios/etc/nsca.cfg #去掉password前面的#,设置密码

1 password=xxx

3.开启nsca程序
查看源代码打印帮助0 /usr/local/nagios/bin/nsca -c /usr/local/nagios/etc/nsca.cfg

4.开启防火墙5667端口
查看源代码打印帮助0 iptables -I RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5667 -j ACCEPT

nagios分布式服务端:
1.拷贝send_nsca相关文件至nagios目录
查看源代码打印帮助0 cp sample-config/send_nsca.cfg /usr/local/nagios/etc/

1 cp src/send_nsca /usr/local/nagios/bin/

2 chown nagios.nagios /usr/local/nagios/etc/send_nsca.cfg

3 chown nagios.nagios /usr/local/nagios/bin/send_nsca

2.配置nsca.cfg文件中password
查看源代码打印帮助0 vi /usr/local/nagios/etc/send_nsca.cfg #去掉password前面的#,配置与主服务端相同的密码

1 password=xxx

二、Nagios主服务端与分布式服务端配置
nagios主服务端:
1.修改nagios.cfg文件
查看源代码打印帮助0 vi /usr/local/nagios/etc/nagios.cfg

1 #修改以下参数值

2 check_external_commands=1

3 accept_passive_service_checks=1

4 accept_passive_host_checks=1

2.修改服务与主机的监控,以下为配置示例,该示例定义的服务与主机应该与分布式服务端相同
查看源代码打印帮助00 define host{

01 name test

02 use generic-host

03 address 192.168.0.8 #分布式服务端内监控的主机地址

04 passive_checks_enabled 1 #开启被动检测模式

05 active_checks_enabled 0 #关闭主服务端对该主机的主动检测

06 }

07 define service{

08 use generic-service #根据实际情况修改

09 host_name test

10 service_description CPU Load

11 check_command check_nrpe!check_load

12 check_freshness 1 #开启强制刷新

13 freshness_threshold 450 #主服务端强制刷新的时间,具体含义请参考手册

14 passive_checks_enabled 1 #开启被动检测模式

15 active_checks_enabled 0 #关闭主服务端对该服务的主动检测

16 }

nagios分布式服务端:
1.修改nagios.cfg文件
查看源代码打印帮助0 vi /usr/local/nagios/etc/nagios.cfg

1 #修改以下参数值

2 enable_notifications=0

3 obsess_over_services=1

4 ocsp_command=submit_check_result

5 obsess_over_hosts=1

6 ochp_command=submit_check_result

2.创建submit_check_result脚本
查看源代码打印帮助00 vi /usr/local/nagios/libexec/submit_check_result

01 #!/bin/sh

02 # Arguments:

03 # = host_name (Short name of host that the service is

04 # associated with)

05 # = svc_description (Description of the service)

06 # = state_string (A string representing the status of

07 # the given service – “OK”, “WARNING”, “CRITICAL”

08 # or “UNKNOWN”)

09 # = plugin_output (A text string that should be used

10 # as the plugin output for the service checks)

11 #

12 # Convert the state string to the corresponding return code

13 return_code=-1

14 case “$3” in

15 OK)

16 return_code=0

17 ;;

18 WARNING)

19 return_code=1

20 ;;

21 CRITICAL)

22 return_code=2

23 ;;

24 UNKNOWN)

25 return_code=-1

26 ;;

27 esac

28 # pipe the service check info into the send_nsca program, which

29 # in turn transmits the data to the nsca daemon on the central

30 # monitoring server

31 /usr/bin/printf “%s\t%s\t%s\t%s\n” “$1” “$2” “$return_code” “$4” | /usr/local/nagios/bin/send_nsca -H 1.1.1.1(修改为主服务端的ip) -c /usr/local/nagios/etc/send_nsca.cfg
查看源代码打印帮助0 chmod +x /usr/local/nagios/libexec/submit_check_result

1 chown nagios.nagios submit_check_result

3.在command.cfg文件中定义submit_check_result命令
查看源代码打印帮助0 vi /usr/local/nagios/etc/objects/command.cfg

1 #加入以下内容

2 define command{

3 command_name submit_check_result

4 command_line /usr/local/nagios/libexec/submit_check_result $HOSTNAME$ ‘$SERVICEDESC$’ $SERVICESTATE$ ‘$SERVICEOUTPUT$’

5 }

4.配置示例
查看源代码打印帮助00 define host{

01 name test

02 use generic-host

03 address 192.168.0.8 #分布式服务端内监控的主机地址

04 }

05 define service{

06 use generic-service

07 host_name test

08 service_description CPU Load

09 check_command check_nrpe!check_load

10 }

BTW:请注意分布式服务端与主服务端定义主机与服务配置的区别,当分布式服务端定义了主机与服务时,同样需要在主服务端定义一次。freshness_threshold 强制刷新时间,主要的作用是当分布式服务端未提交新的数据时,服务端可以强制进行状态刷新,进行及时的预警。

如何在不安装分布式nagios的情况下,监控另一网络防火墙内的内网主机呢?其实方法很多,比如check_ssh,这里共享一个方法,该方法是同事nonamexz的创意,在此借花献佛。

通过nagios的自定义变量,在nrpe的命令行增加一个端口的参数,通过防火墙进行映射至内网不同的服务器

查看源代码打印帮助00 define command{

01 command_name check_NRPE #定义一个新的命令

02 command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p $_HOSTPORT$ -t 60

03 }

04 define host{

05 name test

06 use generic-host

07 address 2.2.2.2 #需要监控的服务器的外网地址,比如防火墙地址

08 _PORT 5668 #自定义的外网端口,改端口是通过防火墙进行内的需要监控的服务器的nrpe的端口映射

09 }

10 define service{

11 use generic-service

12 host_name test

13 service_description CPU Load

14 check_command check_NRPE!check_load #这里定义的时候,使用自定义的nrpe

15 }

openssl的编译

问题:编译nrpe的时候,提示libssl找不到,但是inc文件可以找到,已经编译了openssl,并且成功,但就是找不到libssl
出错信息如下:
checking for socklen_t… yes
checking for type of socket size… size_t
checking for SSL headers… SSL headers found in /home/system/nagios
checking for SSL libraries… configure: error: Cannot find ssl libraries

解决:
ldconfig
ld.so.conf添加路径,还是失败
PKG_CONFIG_PATH路径添加,失败
DYLD_LIBRARY_PATH路径添加,失败

没辙了,后来再网上搜到这篇文章:
http://support.nagios.com/knowledgebase/faqs/index.php?option=com_content&view=article&id=52&catid=35&faq_id=449&expand=false&showdesc=true

说明了解决办法,如果e文不好,那么我解释一句,可能您就明白了
then Ok, but with some Openssl packages, the default is to build archive libraries. Shareable libraries must be explicitly asked with a configure option, –enable-shared. Or some developpers don’t wish to use a .so variant and prefer static linkage.
大概的意思是说,openssl这个包,默认的会编译出“存档库”,如果希望编译为“共享库”,需要在编译的时候添加enable-shared的选项,一些开发人员不喜欢使用.so的变体,更喜欢prefer static linkage,

呵呵,明白了,重新编译openssl,添加enable-shared选项,即可解决。

这是我编译openssl的选项:
./config –prefix=/home/system/nagios/ enable-shared –openssldir=/home/system/nagios/openssl

check_ping用法 nagios

nagios check_ping命令使用方法
 
nagios的一些辅助工具很有用处,如check_ping,check_tcp等等,这里介绍一下check_ping的用法:

nagios的check_ping命令:
用法:
./check_ping
Usage: check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>%
                      [-p packets] [-t timeout] [-L] [-4|-6]
具体如下:
-H    主机地址
-w     WARNING 状态:   响应时间(毫秒),丢包率 (%)   阀值
-c     CRITICAL状态:    响应时间(毫秒),丢包率 (%)   阀值
-p     发送的包数           默认5个包
-t      超时时间             默认10秒
-4|-6                        使用ipv4|ipv6 地址     默认ipv4
如:
1、正常:
./check_ping -H www.google.com -w 100.0,20% -c 200.0,50% -p 3 -t 2
PING OK – Packet loss = 0%, RTA = 1.49 ms
命令执行结果返回: echo $?   为 0
2、WARNING :
./check_ping -H www.google.com -w 0.1,20% -c 200.0,50% -p 3 -t 2
PING WARNING – Packet loss = 0%, RTA = 1.71 ms
命令执行结果返回: echo $?   为 1
3、CRITICAL
./check_ping -H www.google.com -w 0.1,20% -c 0.9,50% -p 3 -t 2
PING CRITICAL – Packet loss = 0%, RTA = 1.60 ms
命令执行结果返回: echo $?   为 2
返回结果为:状态 丢包率 ping响应时间
因为check_ping的返回值非常清晰,
可以在其他程序中调用check_ping命令,作为辅助的网络检测工具。

给nagios监控服务器添加图标

nagios图标

今天看了学校总部的Nagios 2.0 statusmap,感觉其中的图标配置很不错,于是开始研究把自己配置的3.0版本也加上。默认安装完成后的Nagios并没有对Statusmap做较好的美化,图标显示都是疑问符号。由于3.0.1相对于2.0做了较大改动,早期版本中定义hostextinfo已经不可用。通过阅读官方文档,得知在host定义中有四个变量可选,用于指定每一个host的图标文件名,默认的存储位置是/usr/local/nagios/share/images/logos
icon_image: 可以使用GIF, PNG,或者是JPG文件,推荐图像尺寸为40×40
icon_image_alt: 即为HTML语法中关于image元素的ALT属性值
vrml_image: Nagios提供使用VRML语言绘制三维图像功能,这里不要使用透明图片(PNG, GIF),最好使用JPG
statusmap_image: 提供给statusmap CGI脚本使用的图片,服务器要支持GD,这个文件的类型为gd2

Nagios 3安装包中没有提供足够的图片文件,但是NagiosExchange为我们提供了很多用于Nagios的图标以及界面模板,可以从中选取下载。

总部的Nagios statusmap
nagios图标2

nagios自定义变量问题,用户自定制对象变量

6.3. 用户自定制对象变量

6.3.1. 介绍

用户通常想在主机、服务或联系人的对象里加入自已定制的变量,这些变量象SNMP共同体名、MAC地址、AIM用户名、Skype帐号和街道名称等等,可能有各种各样的东西无法列完。这样会使Nagios不具备通用性并且无法保持一个特定的架构。Nagios试图更为柔性化,这就意味着需要处理这种情况,例如在Nagios的主机对象定义中,”address”是一个IP地址也可以是任何东西,只要对使用者而言是个可读可操作的,无论用户怎么设置都行。

但还是有必要在Nagios配置文件中提供一种可供管理和保存的处理方法而不是与现有变量域混用的方法。Nagios试图在对象的定义中引用用户自定制变量来解决这个问题。用户自定制变量的方法可以让用户在主机、服务和联系人对象定义里加入属性,在通知、事件处理和对主机与服务的检测中使用这些变量。

6.3.2. 用户自定制变量的基本规则

使用用户自定制变量需要注意如下几个要点:

  1. 必须以下划线(_)开头来定义变量名称以防止与标准域名称混淆;
  2. 自定制变量名是大小写敏感的;
  3. 自定制变量是可以象一般的变量那样被继承传递的;
  4. 自定制变量名是可以被脚本里引用的,在宏和环境变量中有说明。

6.3.3. 例子

这有一个如何在对象中定义不同类型的用户自定制变量的例子:

define host{
		host_name	linuxserver
		_mac_address	00:06:5B:A6:AD:AA	; <-- Custom MAC_ADDRESS variable
		_rack_number	R32			; <-- Custom RACK_NUMBER variable
		...
		}
define service{
		host_name	linuxserver
		description	Memory Usage
		_SNMP_community	public			; <-- Custom SNMP_COMMUNITY variable
		_TechContact	Jane Doe		; <-- Custom TECHCONTACT variable
		...
		}
define contact{
		contact_name	john
		_AIM_username	john16			; <-- Custom AIM_USERNAME variable
		_YahooID	john32			; <-- Custom YAHOOID variable
		...
		}

6.3.4. 在宏里使用用户自定制变量

在Nagios的检测、通知等的脚本和执行程序里可以引用用户自定制变量,通过使用或是环境变量来实现。

为防止混淆不同对象类型中的用户定制变量,Nagios在宏和环境变量的名字里,对用户定义的主机、服务或是联系人的变量名之前分别加上了”_HOST”、”_SERVICE”或”_CONTACT”以示区分。下面的表格中给出前面例子中的用户自定制变量在宏和环境变量这中的可引用的命名。

表 6.1. 

对象类型 变量名 宏名 环境变量
主机 MAC_ADDRESS $_HOSTMAC_ADDRESS$ NAGIOS__HOSTMAC_ADDRESS
主机 RACK_NUMBER $_HOSTRACK_NUMBER$ NAGIOS__HOSTRACK_NUMBER
服务 SNMP_COMMUNITY $_SERVICESNMP_COMMUNITY$ NAGIOS__SERVICESNMP_COMMUNITY
服务 TECHCONTACT $_SERVICETECHCONTACT$ NAGIOS__SERVICETECHCONTACT
联系人 AIM_USERNAME $_CONTACTAIM_USERNAME$ NAGIOS__CONTACTAIM_USERNAME
联系人 YAHOOID $_CONTACTYAHOOID$ NAGIOS__CONTACTYAHOOID

 

6.3.5. 用户自定制变量与继承

象标准的主机、服务或联系人对象里的变量一样,用户自定制变量同样可以继承

nagios的插件安装

安装nagios-plugin的时候,附带的参数说明:
[root@localhost nagios-plugins-1.4.13]# ./configure –with-nagios-user=nagios –with-nagios-group=nagios –prefix=/usr/local/nagios –with-ping-command=”/bin/ping” –with-mysql –without-ipv6
以上我在操作的过程中mysql提示找不到库文件,出错信息如下
“configure: WARNING: Skipping mysql plugin
configure: WARNING: install mysql client libs to compile this plugin (see REQUIREMENTS).”
后来把mysql_config复制到/usr/lib/pkgconfig后,顺利configure,看来还是路径的问题,其实在nagios-plugins-1.4.13的目录下的“REQUIREMENTS”文件已经详细说明了“check_mysql, check_mysql_query:
        – Requires the MySQL libraries available from
          http://www.mysql.org/
                Lib: libmysql, libmysqlclient
                Redhat Powertools Source: mysql-3.20.32a-3.i386.rpm, mysql-devel-3.20.32a-3.i386.rpm (these seem to be broken, howev
er)
                RPMS from www.mysql.org work better
          Must have mysql_config in PATH or specified with –with-mysql=DIR for DIR/bin/mysql_config”

nagios安装,网上太多了,这个是自己安装后的手记。

nagios安装

下载:wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz
安装:
tar -zxvf nagios-3.2.0.tar.gz
cd nagios-3.2.0
./configure –prefix=/usr/local/nagios –with-command-group=nagcmd
make all
make all完毕后有如下提示:
“If the main program and CGIs compiled without any errors, you
can continue with installing Nagios as follows (type ‘make’
without any arguments for a list of all possible options):

  make install
     – This installs the main program, CGIs, and HTML files

  make install-init
     – This installs the init script in /etc/rc.d/init.d

  make install-commandmode
     – This installs and configures permissions on the
       directory for holding the external command file

  make install-config
     – This installs *SAMPLE* config files in /usr/local/nagios/etc
       You’ll have to modify these sample files before you can
       use Nagios.  Read the HTML documentation for more info
       on doing this.  Pay particular attention to the docs on
       object configuration files, as they determine what/how
       things get monitored!

  make install-webconf
     – This installs the Apache config file for the Nagios
       web interface”
依次运行如下命令:
make install
make install-init
make install-commandmode
make install-config
make install-webconf
给nginx添加认证:
修改nginx的配置文件如下:
    location /nagios/ {
    alias /usr/local/nagios/share/;
    index index.html index.htm index.php;
    auth_basic “nagios”;
    auth_basic_user_file /usr/local/nagios/etc/htpasswd admin
    }
生成htpasswd文件:
/usr/bin/htpasswd -c /usr/local/nagios/etc/htpasswd admin
其中htpasswd是apache提供的工具
配置nagios
nagios web界面提示
It appears as though you do not have permission to view information for any of the services you requested…
打开cgi.cfg配置文件,里面有个参数:
use_authentication=1
为了保障系统的安全性,nagios设置了这个参数,默认为1,改为0即可

 

配置:
下载插件:
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
tar -zxvf nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
./configure –prefix=/usr/local/nagios
make
make install
配置附件:
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar -zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure –prefix=/usr/local/nagios
make all
make install-plugin
make install-daemon
make install-daemon-config
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
返回:[root@localhost nrpe-2.12]# /usr/local/nagios/libexec/check_nrpe -H localhost
      NRPE v2.12
完成。
配置perl,cgi,nginx