使用 Nagios 和向上集成模块实现 IBM 系统的管理(3)
- UID
- 1066743
|
使用 Nagios 和向上集成模块实现 IBM 系统的管理(3)
Nagios 的插件开发和有关配置简介这里将根据上文提到的"利用向上集成模块支持 Nagios 的主要功能"简介为例,简要介绍一下如何利用插件机制使 UIMs 支持 Nagios 监控 IBM 系统的,还有如何对 SNMPTT 进行脚本配置来实现在 Nagios 上接收基于 SNMP 事件的。
Nagios 插件开发简介Nagios 的插件是以服务和命令的方式被引入到 Nagios 的框架当中的,所以在开发出一个 Nagios 插件之后,需要对其进行一些配置。首先,在配置文件 /usr/local/nagios/etc/objects /commands.cfg 当中定义需要的服务命令,比如下面定义的"check_agent"和"submit_check_result":
1
2
3
4
5
6
7
8
9
10
11
| # 'check_agent' command definition
define command{
command_name check_agent
command_line $USER1$/check_agent $HOSTADDRESS$
}
#'submit_check_result' command definition
define command{
command_name submit_check_result
command_line $USER1$/eventhandlers/submit_check_result
}
|
这里"check_agent"是用于执行监控客户机状态信息的命令,$HOSTADDRESS$ 是其对应的参数;而"submit_check_result"是用于处理事件的命令。
其次,为需要被监控的平台 ( 比如下面代码当中 Windows 系统名称 my_host_name) 定义需要的服务,这里我们使用上述命令"check_agent"和"submit_check_result"为 Windows 平台定义下面这个服务"Director Agent",我们需要为配置文件 /usr/local/nagios/etc/objects/windows.cfg 添加下面这些内容:
1
2
3
4
5
6
7
8
9
10
11
12
| # Define a service to check Denali Agent on the this windows machine "my_host_name".
define service{
use generic-service ; Name of service template to use
host_name my_host_name ; Host name to be monitored
service_description Director Agent ; Service Name
event_handler submit_check_result ; Event handler command name
check_command check_agent ; Developed plugins command name
max_check_attempts 1 ; Max times for the attempt
active_checks_enabled 1 ; Active mode enabled
passive_checks_enabled 1 ; Passive mode enabled
is_volatile 1 ; If it is a volatile service
}
|
然后,为服务"check_agent"编写 C 文件"check_agent.c"来获取硬件状态信息,编译之后发布到目录 /usr/local/nagios/libexec/ 下。这里可以利用安装了 IBM Systems Director 平台代理程序客户端的特殊信息 ( 比如 OID) 来识别该客户端是否为 IBM 的系统并通过它们获取该系统上的性能数据和状态信息等。下面是一部分示例性的代码片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| int main (int argc, char **argv)
{
int result = STATE_UNKNOWN;
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
if (process_arguments (argc, argv) == ERROR)
usage4 (_("Could not parse arguments"));
/* initialize alarm signal handling */
signal (SIGALRM, socket_timeout_alarm_handler);
alarm (socket_timeout);
/* Get the status of the host */
result = check_agent(server_name, port, ...);
alarm (0);
return (result);
}
|
最后,为服务 submit_check_result 添加以下内容,并发布该文件 submit_check_result 到目录 /usr/local/nagios/libexec/eventhandlers/ 下。这一部分是为处理事件功能做的配置工作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| #!/bin/sh
# SUBMIT_CHECK_RESULT
# Written by Ethan Galstad (nagios@nagios.org)
# Last Modified: 02-18-2002
#
# This script will write a command to the Nagios command
# file to cause Nagios to process a passive service check
# result. Note: This script is intended to be run on the
# same host that is running Nagios. If you want to
# submit passive check results from a remote machine, look
# at using the nsca addon.
#
# Arguments:
# $1 = host_name (Short name of host that the service is
# associated with)
# $2 = svc_description (Description of the service)
# $3 = return_code (An integer that determines the state
# of the service check, 0=OK, 1=WARNING, 2=CRITICAL,
# 3=UNKNOWN).
# $4 = plugin_output (A text string that should be used
# as the plugin output for the service check)
#
echocmd="/bin/echo"
CommandFile="/usr/local/nagios/var/rw/nagios.cmd"
# get the current date/time in seconds since UNIX epoch
datetime=`date +%s`
# create the command line to add to the command file
cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"
# append the command to the end of the command file
`$echocmd $cmdline >> $CommandFile`
|
关于 SNMPTT 及其在 Nagios 上的脚本开发和配置在 Nagios 服务器上接收基于 SNMP 的事件,必须事先安装 Net-SNMP 和 SNMPTT。Net-SNMP 是接收基于 SNMP 事件的客户端,而 SNMPTT 是用来转换 SNMP 事件的服务。它们的安装资料可以在因特网上查到,这里就不多做介绍,请查看 部分。这里主要介绍一下 SNMPTT 和 Nagios 怎样结合在一起接收基于 SNMP 的事件并显示在 Nagios 的 web 界面上的。
在做完基本的 SNMPTT 配置之后,我们首先需要定义 IBM 自己的 Events 文件 snmptt.conf.ibm,下面是其中一个 Event 定义示例片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| EVENT ibmSystemTrapPowerSupply .1.3.6.1.4.1.2.6.159.1.1.0.23 "Status Alarms" Critical
FORMAT $5
EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result $A "Director
Agent" 2 "$5"
SDESC
"This event is sent when the Remote Supervisor Adapter detects that the
state of a system's power supply changes with respect to availability."
Variables:
1: ibmSystemTrapPowerSupplyIdentifier
Syntax="String (Octet String) "
Descr=""
2: ibmSystemTrapPowerSupplySourceObjectPath
Syntax="String (Octet String) "
Descr=""
3: ibmSystemTrapPowerSupplyTargetObjectPath
Syntax="String (Octet String) "
Descr=""
4: ibmSystemTrapPowerSupplySeverity
Syntax="Uint16 (Integer) (0..65535)"
Descr="2=Critical -- A power supply in a system has failed."
5: ibmSystemTrapPowerSupplydescription
Syntax="String (Octet String) "
Descr=""
6: ibmSystemTrapErrorLogTimeStamp
Syntax="Datetime (Octet String) "
Descr=""
EDESC
#
#
|
上面第三行当中的 submit_check_result 是上文当中定义的处理事件的命令,参数 $A 是被监控的 IBM 系统主机名称,参数"Director Agent"是我们在上文当中定义的 UIMs 的服务名称,参数 2 代表 Severity 为"Critical",参数 $5 是该事件的描述内容。
然后我们需要把文件 snmptt.conf.ibm 添加到 SNMPTT 的主配置文件 snmptt.ii 当中:
1
2
3
4
5
6
7
| [TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.ibm
END
|
重新启动 SNMPTT 服务 : service snmptt restart
最后,在安装了 IBM Systems Director 平台代理程序的系统上发送 SNMP 事件,然后 Nagios 服务器就会接收到该事件,并显示到 Nagios 的 web 管理平台上,您可以通过左边菜单"Service Problems"查看当前接收到的事件 ( 见 和 ),也可以通过菜单"Alert History"查看所有主机的所有历史事件 ( 见下面的图 6)。
图 6. 历史事件视图想了解更多关于 Nagios 及其插件的内容,请查看 部分。 |
|
|
|
|
|