Board logo

标题: 使用 Nagios 和向上集成模块实现 IBM 系统的管理(3) [打印本页]

作者: look_w    时间: 2018-6-13 14:09     标题: 使用 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 及其插件的内容,请查看 部分。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0