首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Nagios 和向上集成模块实现 IBM 系统的管理(3)

使用 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 及其插件的内容,请查看 部分。
返回列表