分类目录归档:监控系统

nagios,本地发送报警邮件超时问题

最近在外网新搭了一套nagios系统,开始几天系统出了问题nagios还能发邮件通知,可最近出了问题老收不到邮件,手工在服务器上发邮件又可以,后来一查sendmail的日志和nagios的日志,发现sendmail的邮件只有邮件信息,没有进邮件队列.nagios那边的日志又报下面的警告:

[1292174436] Warning: Contact ‘wahaha’ service notification command ‘/usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type: PROBLEM\n\nService: /boot\nHost: hostname\nAddress: 192.168.3.11\nState: CRITICAL\n\nDate/Time: Mon Dec 13 01:20:05 CST 2010\n\nAdditional Info:\n\nDISK CRITICAL – free space: /boot
8 MB (8% inode=99%):” | /bin/mail -s “** PROBLEM Service Alert: hostname//boot is CRITICAL **” wahaha@163.com’ timed out after 30 seconds

从上面的日志看,应该是发送超时了,也就是说设置的通知时间还不够能让sendmail发出邮件的时间,到这就好办了.通过修改nagios的配置文件nagios.cfg,将notification_timeout=30改为notification_timeout=120后重起nagios.发现已经能收到报警邮件了,到此问题解决!

cacti插件安装

thold插件安装,0.8.7g的cacti

点击thold的标签,出错“You are missing a dependency for thold, please install the ‘Settings’ plugin.”
原来只是需要在安装个settings插件就可以了,郁闷的。

下载后安装即可
wget http://docs.cacti.net/_media/plugin:settings-v0.7-1.tgz

snmpd的日志手册

LOGGING OPTIONS
The mechanism and destination to use for logging of warning and error mes-
sages can be controlled by passing various parameters to the -L flag.

-Le Log messages to the standard error stream.

-Lf FILE
Log messages to the specified file.

-Lo Log messages to the standard output stream.

-Ls FACILITY
Log messages via syslog, using the specified facility (’d’ for
LOG_DAEMON, ’u’ for LOG_USER, or ’0’-’7’ for LOG_LOCAL0 through
LOG_LOCAL7).

There are also "upper case" versions of each of these options, which allow
the corresponding logging mechanism to be restricted to certain priorities
of message. Using standard error logging as an example:

-LE pri
will log messages of priority ’pri’ and above to standard error.

-LE p1-p2
will log messages with priority between ’p1’ and ’p2’ (inclusive)
to standard error.

For -LF and -LS the priority specification comes before the file or facil-
ity token. The priorities recognised are:

0 or ! for LOG_EMERG,
1 or a for LOG_ALERT,
2 or c for LOG_CRIT,
3 or e for LOG_ERR,
4 or w for LOG_WARNING,
5 or n for LOG_NOTICE,
6 or i for LOG_INFO, and
7 or d for LOG_DEBUG.

Normal output is (or will be!) logged at a priority level of LOG_NOTICE

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. 用户自定制变量与继承

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

ucd-snmp和net-snmp是什么

snmp—简单网络管理协议

ucd-snmp和net-snmp—ucd-snmp源自于卡耐基.梅隆大学的SNMP软件包CMU snmp 2.1.2.1, 由加州大学Davis分校(University of Califonia at Davis)开发与维护, 所以命名为ucd-snmp. 2000年11月ucd-snmp项目转到由SourceForge(www.sourceforge.net)管理, 并更名为net-snmp. ucd-snmp 4.2 是以ucd-snmp命名的最后的一个主要版本. 也就是说, 以后发布的 ucd-snmp 4.2.x仅仅修改软件包中的Bugs; 而大的修改版本将以net-snmp命名, 并发布为5.x. ucd-snmp 4.2.1是最新的发布版本, 于2001年4月4日发布.