溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

nagios之集成snmptt

發(fā)布時(shí)間:2020-07-11 13:00:06 來源:網(wǎng)絡(luò) 閱讀:5566 作者:wushank 欄目:移動(dòng)開發(fā)

一、什么是SNMPTT(SNMP Trap Translator)

    SNMPTT是用perl寫的SNMP trap處理器,它需要使用Net-SNMP/UCD-SNMP snmptrapd程序。SNMPTT支持Linux,Unix和Windows。具體工作原理如下圖:

 

nagios之集成snmptt

    Net-SNMP程序的snmptrapd是收集和記錄SNMP trap,并通過TCP/IP發(fā)送消息的程序。
snmptrapd程序接收到的告警的輸出如下,一般格式為 variable name=value, variable name=value。
      Feb 12 13:37:10 server11 snmptrapd[25409]: 192.168.110.192: Enterprise Specific Trap (3008) Uptime: 306 days, 23:13:24.29, .1.3.6.1.2.1.1.5.0 = SERVER08, .1.3.6.1.4.1.232.11.2.11.1.0 = 0, .1.3.6.1.4.1.232.3.2.3.1.1.4.8.1 = rebuilding(7)

 or
      Feb 12 13:37:10 server11 snmptrapd[25409]: 192.168.110.192: Enterprise Specific Trap (3008) Uptime: 306 days, 23:13:24.29, sysName.0 = SERVER08, cpqHoTrapFlags.0 = 0, cpqDaLogDrvStatus.8.1 = rebuilding(7)
     使用SNMPTT的變量替換功能,消息可以變的更友好,如在SNMPTT 配置文件中定義如下的格式:
     FORMAT Logical Drive Status Change: Status is now $3.
那么上面收到的消息將會(huì)顯示,可以看出,第三個(gè)變量rebuilding被替換顯示出來:
     Feb 12 13:37:13 server11 TRAPD: .1.3.6.1.4.1.232.0.3008 Normal "XLOGONLY" server08 - Logical Drive Status Change: Status is now rebuilding
  
     SNMPTT可以將輸出記錄到文本日志,NT event 日志,SQL數(shù)據(jù)庫,或者通過外部程序傳給Nagios,郵件客戶端等。除了變量替換,SNMPTT允許如下復(fù)雜的配置:
   *接受或拒絕一個(gè)trap信息,基于主機(jī)名/IP地址/網(wǎng)絡(luò)段/trap變量中的值
   *執(zhí)行外部程序來發(fā)送page,email等
   *執(zhí)行正則表達(dá)式來匹配和替換消息中的內(nèi)容。
 

二、軟件前提需求
1.perl及模塊支持
  (1). Perl 5.6.1 or higher.  SNMPTT is developed with 5.6.1 and 5.8.0, but other versions may also work.
    (2). Required: Net-SNMP (formerly known as UCD-SNMP).  Specifically snmptrapd.
    (3). Required: Text::ParseWords module (included with most distributions including ActivePerl)
    (4). Required: Getopt::Long module (included with most distributions including ActivePerl)
    (5). Required: Posix module (included with most if not all distributions including ActivePerl) 
    (6). Required: Config::IniFiles module
    (7). Required: Time::HiRes module (only required when using SNMPTT in daemon mode - required by snmptthandler)
    (8). Required: Sys::Hostname module (included with most if not all distributions including ActivePerl).
    (9). Required: File::Basename module (included with most if not all distributions including ActivePerl).
    (10). Required: Text::Balanced module (included with most if not all distributions including ActivePerl).
  其中 Config::IniFiles、 Text::Balanced等比較少用,可以使用cpan進(jìn)行安裝,可能安裝過程中碰到模塊信賴的問題,像我碰到了信賴關(guān)系,例: Config::IniFiles信賴Perl::OSType、Bundle::CPAN和ExtUtils::MakeMaker,有時(shí)候還是滿麻煩的。碰到問題,慢慢解決,嘿嘿。
 
2.其他軟件支持

   (1).nagios:3版本以上,下載鏈接:http://www.nagios.org/download/core

   (2).snmptt:1.3版本了,網(wǎng)上有g(shù)z包和rpm包,根據(jù)自己需求來下載了。

           gz包下載地址:http://sourceforge.net/projects/snmptt/

三、snmptt和snmptrapd的安裝及配置:

1.snmptt的安裝及配置
    <1>. 下載snmptt.tgz 包解壓
    <2>. 拷貝snmptt到/usr/sbin, 加可執(zhí)行權(quán)限(chmod +x snmptt)
    <3>. 拷貝snmptthandler到/usr/sbin,加可執(zhí)行權(quán)限(chmod +x snmptthandler)
    <4>. 拷貝snmptt.ini 到/etc/snmp或者/etc。更改文件中的選項(xiàng)。
    <5>. 創(chuàng)建日志文件夾/var/log/snmptt
    <6>. 創(chuàng)建spool文件夾(daemon mode會(huì)使用)
                   mkdir /var/spool/snmptt/
    <7>. 拷貝啟動(dòng)腳本到init.d目錄
               cp snmptt.init.d /etc/rc.d/init.d/snmptt
    <8>. 增加啟動(dòng)項(xiàng)
              chkconfig --add snmptt
              chkconfig --level 2345 snmptt on
              service snmptt start
          或者手工執(zhí)行snmpttt
              snmptt --daemon

     <9>. 拷貝日志輪訓(xùn)腳本cp snmptt.logrotate /etc/logrotate.d/snmptt,并根據(jù)具體目錄更改文件中的路徑
     <10>. 手工創(chuàng)建snmptt.conf文件,或者使用snmpttconvertmib工具創(chuàng)建。

               使用命令:

              snmpttconvertmib --in=<MIB file> --out=/etc/snmp/snmptt.conf.<equipment> \               --exec='/usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP 1'
       例:

nagios之集成snmptt


         其中MIB file可以到各具體設(shè)置的官網(wǎng)上進(jìn)行下載

     <11>. 更改snmptt.ini文件包含snmptt.conf.*文件,并設(shè)置選項(xiàng)        nagios之集成snmptt

     <12>. 啟動(dòng)snmptt: service snmptt restart

2.snmptrapd的配置:

     <1>.配置snmptrapd的配置文件/etc/snmp/snmptrapd.conf

              對(duì)于standlone mode: 更改Net-SNMP的snmptrapd.conf配置文件,添加如下行:
         traphandle default /usr/sbin/snmptt
              對(duì)于 daemon mode,更改Net-SNMP的snmptrapd.conf配置文件,增加如下行:
         traphandle default /usr/sbin/snmptthandler

nagios之集成snmptt

                 第一行:配置一個(gè)認(rèn)證的community,設(shè)置所有用戶的訪問權(quán)限:可執(zhí)行,記錄,傳遞同時(shí)方便agent進(jìn)行使用snmptrap進(jìn)行命令測(cè)試;

                 第二行:接收到的trap信息默認(rèn)調(diào)用/usr/sbin/snmptt來進(jìn)行處理。同時(shí)也可以針對(duì)具體的OID,來指定調(diào)用的程序;

                 第三行:禁止訪問控制檢查 will  disable  the  above  access control checks, and revert to the previous behaviour of accepting all incoming notifications.
                第四行:禁止通知的日志記錄disables  the  logging of notifications altogether.  This is useful if the snmptrapd application should only run traphandle hooks and should not log traps to any location.
                注:  snmptrapd.conf有很多很多具體的參數(shù)配置,具體可以man一下。

     <2>.snmptrapd服務(wù)啟動(dòng)配置:

        使用如下命令啟動(dòng)snmptrapd,snmptrapd -On.
        如果存在/etc/rc.d/init.d/snmptrapd文件,則也要更改添加上選項(xiàng)”-On”。

            OPTIONS="-On -Lf /var/log/snmptrapd.log -p /var/run/snmptrapd.pid"
          注:具體參數(shù)意思可查看幫助

四、snmptt.ini主配置文件的配置

[General]
snmptt_system_name =
mode = standalone
multiple_event = 1
dns_enable = 0
strip_domain = 0
strip_domain_list = <<END
domain.com
END
resolve_value_ip_addresses = 0
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 2
translate_log_trap_oid = 0
translate_value_oids = 1
translate_enterprise_oid_format = 1
translate_trap_oid_format = 1
translate_varname_oid_format = 1
translate_integers = 1
wildcard_expansion_separator = " "
allow_unsafe_regex = 0
remove_backslash_from_quotes = 0
dynamic_nodes = 0
description_mode = 2
description_clean = 1
threads_enable = 0
threads_max = 10


[DaemonMode]
daemon_fork = 1
daemon_uid = snmptt
pid_file = /var/run/snmptt.pid
spool_directory = /var/spool/snmptt/
sleep = 5
use_trap_time = 1
keep_unlogged_traps = 1
duplicate_trap_window = 0


[Logging]
stdout_enable = 0
log_enable = 1
log_file = /var/log/snmptt/snmptt.log
log_system_enable = 1
log_system_file = /var/log/snmptt/snmpttsystem.log

unknown_trap_log_enable = 1
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log
statistics_interval = 0
syslog_enable = 0
syslog_facility = local0
syslog_level_debug = <<END
END
syslog_level_info = <<END
END
syslog_level_notice = <<END
END
syslog_level_warning = <<END
END
syslog_level_err = <<END
END
syslog_level_crit = <<END
END
syslog_level_alert = <<END
END
syslog_level = warning
syslog_system_enable = 0
syslog_system_facility = local0
syslog_system_level = warning

[Exec]
exec_enable = 1
pre_exec_enable = 1

[TrapFiles]
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf.default
/etc/snmp/snmptt.conf.hp

END


     注:根據(jù)自己的需求進(jìn)行配置各選項(xiàng),對(duì)于和mysql,pgsql等配置在此不做詳解;

五、SNMPTT.CONF 配置文件格式

 snmptt.conf文件的語法為:
 EVENT event_name event_OID "category" severity
 FORMAT format_string
 [EXEC command_string]
具體信息參見 snmptt官網(wǎng)

   1.EVENT event_name event_OID "category" severity
        <1>.event_name:
    不能包含空格。當(dāng)使用snmpttconvertmib轉(zhuǎn)換時(shí),這個(gè)名字將與MIB文件中TRAP-TYPE或者NOTIFICATION-TYPE行的名字匹配
        <2>.event_OID:
     一般形式如:.1.3.6.1.4.1.232.0.11001
 如果Net-SNMP perl模塊安裝,并且在snmptt.ini文件中設(shè)置了net_snmp_perl_enable為開啟,則可以使用符號(hào)名,如: linkDown   IF-MIB::linkDown
注:當(dāng)翻譯OID時(shí),Net-SNMP 5.0.9 和更早的版本不支持包含模塊名字(如:IF-MIB::) 。
    SNMP V1 traps 的企業(yè)ID格式為(.1.3.6.1.4.1.232) ,后面跟上一個(gè)0,再跟上trap號(hào)(11001)。這樣可能導(dǎo)致在配置文件中相同的trap OID存在多條定義。如果在snmptt.ini文件中允許了multiple_event,那么將處理所有匹配的traps。如果multiple_event禁止,只有第一個(gè)匹配的條目被使用,OID中可以使用通配符,例如:.1.3.6.1.4.1.232.1.2.*
        <3>.category
    特色字符串包含在雙引號(hào)中。如果為“IGNORE”,則snmptt.conf中包含的FORMAT和EXEC都忽略。如果類型為“LOGONLY”,則trap信息被日志記錄,EXEC聲明被忽略。
    注:如果你打算使用Naigos等外部程序,則最好不要設(shè)置任何trap為L(zhǎng)OGONLY,就好像不要使用EXEC來進(jìn)行被動(dòng)服務(wù)檢查。
        <4>.severity:
             事件的級(jí)別,用于日志。如:Minor,Major,Normal,Critical,Warning。
 
    2.FORMAT format_string
    每個(gè)EVENT只能有一行FORMAT
    使用如下的變量在字符串上進(jìn)行變量替換:
 $A - Trap agent host name (see Note 1)
 $aA - Trap agent IP address
 $Be - securityEngineID (snmpEngineID) (see Note 7)
 $Bu - securityName (snmpCommunitySecurityName) (see Note 7)
 $BE - contextEngineID (snmpCommunityContextEngineID) (see Note 7)
 $Bn - contextName (snmpCommunityContextName) (see Note 7)
 $c - Category
 $C - Trap community string
 $D - Description text from SNMPTT.CONF or MIB file (see Note 6)
 $E - Enterprise trap OID in symbolic format
 $e  - Enterprise trap OID in number format
 $Fa  - alarm (bell) (BEL)
 $Ff  - form feed (FF)
 $Fn  - newline (LF, NL)
 $Fr  - return (CR)
 $Ft  - tab (HT, TAB)
 $Fz  - Translated FORMAT line (EXEC only)
 $G  - Generic trap number (0 if enterprise trap)
 $H  - Host name of the system running SNMPTT
 $S  - Specific trap number (0 if generic trap)
 $N  - Event name defined in .conf file of matched entry
 $i  - Event OID defined in .conf file of matched entry (could be a wildcard OID)
 $O - Trap OID in symbolic format (see Note 4)
 $o - Trap OID in numerical format (see Note 4)
 $R, $r  - Trap hostname (see Note 1)
 $aR, $ar - IP address
 $s  - Severity
 $T  - Uptime:  Time since network entity was initialized
 $X  - Time trap was spooled (daemon mode) or current time (standalone mode)
 $x  - Date trap was spooled (daemon mode) or current date (standalone mode)
 $# - Number of (how many) variable-bindings in the trap
 $$  - Print a $
 $@ - Number of seconds since the epoch of when the trap was spooled (daemon mode) or the current time (standalone mode)
 $n  - Expand variable-binding n (1-n) (see Note 2,5)
 $+n  - Expand variable-binding n (1-n) in the format of variable name:value (see Note 2,3,5)
 $-n  - Expand variable-binding n (1-n) in the format of variable name (variable type):value (see Note 2,3,5)
 $vn  - Expand variable name of the variable-binding n (1-n)(see Note 3)
 $*  - Expand all variable-bindings (see Note 5)
 $+*  - Expand all variable-bindings in the format of variable name:value (see Note 2,3,5)
 $-*  - Expand all variable-bindings in the format of variable name (variable type):value (see Note 2,3,5)


    * 注2: 如果snmptt.ini文件中的translate_integers被允許,SNMPTT將嘗試查找MIB文件,將收到的trap中的數(shù)字轉(zhuǎn)換為文本。為了使這個(gè)功能可用還有如下條件需要滿足:必須安裝了Net-SNMP/UCD-SNMP模塊,并在snmptt.ini文件中開啟了net_snmp_perl_enable選項(xiàng)。
    另外,為了是該功能可用,需要確保Net-SNMP/UCD-SNMP配置正確。如果選項(xiàng)開啟,卻沒有將數(shù)字轉(zhuǎn)換成文本,數(shù)字將會(huì)使用。如果MIB文件存在,但是卻沒有轉(zhuǎn)換,需要在snmp.conf文件中正確配置,來處理所有的mibs?;蛘撸憧梢栽趕nmptt.ini文件中設(shè)置mibs_enviroment變量為ALL
   
    * 注3:如果需要$vn,$+n,$-n變量名和類型轉(zhuǎn)換為文本,則也需要在snmptt.ini文件中開啟net_snmp_perl_enable選項(xiàng)。 這個(gè)其實(shí)和注2一樣。
    * 注4:如果需要將數(shù)字的OID轉(zhuǎn)換為文本,需要在snmptt.ini文件中,開啟translate_trap_oid選項(xiàng)和net_snmp_perl_enable選項(xiàng),并安裝了Net-SNMP/UCD-SNMP模塊。
    * 注6: snmptt.ini文件中必須設(shè)置description_mode值為1或者2。 如果設(shè)置為1,描述從SNMPTT.CONF文件中獲取。如果設(shè)置為2,描述從MIB文件中獲取。

    3.[EXEC command_string]
   可以一個(gè)EVENT,多行EXEC。
   當(dāng)一個(gè)trap接收到后,則按照順序執(zhí)行命令。
   EXEC使用的變量替換跟FORMAT行中的一樣。 例如:
 EXEC /usr/bin/qpage -f TRAP alex "$r: $x $X - NIC switchover to slot $3, port $4 from slot $5,  port $6"
 EXEC c:\snmp\pager netops "$r: $x $X - NIC switchover to slot $3, port $4 from slot $5, port  $6"


    4.此次案例中snmptt.conf.cisco文件的內(nèi)容為:
      #端口開啟操作定義
EVENT authenticationFailure .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT Link Up
EXEC    /apps/usr/nagios/libexec/eventhandlers/submit_check_result "$A" "Snmp_Trap" "2" "$2 $Fz"

      #端口關(guān)閉操作定義
EVENT authenticationFailure .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link Down
EXEC    /apps/usr/nagios/libexec/eventhandlers/submit_check_result "$A" "Snmp_Trap" "2" "$2 $Fz"

 
    5. PREEXEC
    [PREEXEC command_string]
    每個(gè)EVENT,可以有多行PREEXEC
當(dāng) 一個(gè)trap收到后,在FORMAT和EXEC聲明執(zhí)行之前,要執(zhí)行得語句和命令。外部程序的輸出將保存在$pn變量中,n從1開始計(jì)數(shù)。當(dāng)有多行 PREEXEC時(shí),第一個(gè)PREEXEC存儲(chǔ)結(jié)果到$p1,第二個(gè)PREEXEC將結(jié)果存在$p2。要開啟這個(gè)功能,需要在snmptt.ini文件中, 設(shè)置pre_exec_enable選項(xiàng)
例子:
 EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
 FORMAT Link down on interface $1($p1). Admin state: $2. Operational state: $3
 PREEXEC /usr/local/bin/snmpget -v 1 -Ovq -c public $aA ifDescr.$1

    6. NODES
     [NODES sources_list]
    可以限制哪些設(shè)備可以映射為事件定義
每個(gè)EVENT,可以有多個(gè)NODES行。
sources_list中可以包含任意主機(jī)名、IP地址、網(wǎng)絡(luò)地址或者文件名的組合。如果這個(gè)字符串被省略,則所有的設(shè)備都被接受。
如果想192.168.1.0/24網(wǎng)段的設(shè)備可以觸發(fā)這個(gè)EVENT, 你可以使用一條NODE語句:
 NODES 192.168.1.0/24
這里有兩種操作模式,POS(positive-默認(rèn))和NEG(negative)。如果設(shè)置為POS,那么NODES中的任何一行匹配,則允許。如果設(shè)置為NEG,只有當(dāng)NODES中都不匹配時(shí),才允許。為了改變操作模式,使用如下聲明:
 NODES MODE=POS
 NODES MODE=NEG
這個(gè)特色經(jīng)常用在,對(duì)于相同的事件,一些需要按照常規(guī)處理,一些需要按照特殊處理。如
例一
 NODES fred barney betty wilma
例二
 NODES fred barney betty wilma
 NODES MODE=NEG 

  7. MATCH
[MATCH [MODE=[or | and]] | [$n:[!][(    )[i] | n | n-n | > n | < n | x.x.x.x | x.x.x.x-x.x.x.x | x.x.x.x/x]]
匹配這個(gè)MATCH的trap,才可以引發(fā)相應(yīng)的EVENT定義。
如果一條MATCH聲明已經(jīng)存在,沒有trap匹配它,默認(rèn)的,沒有EVENT定義會(huì)被匹配。
如下的perl正則表達(dá)式被支持:
 i – 忽略大小寫
如下的命令模式可用:
 MATCH MODE=[or | and]
 MATCH $x: [!] (reg) [i]
 MATCH $x: [!] n
 MATCH $x: [!] n-n
 MATCH $x: [!] < n
 MATCH $x: [!] > n
 MATCH $x: [!] & n
 MATCH $x: [!] x.x.x.x
 MATCH $x: [!] x.x.x.x-x.x.x.x
 MATCH $x: [!] x.x.x.x/x
 $x 是任意變量(如$3,$A等)
 reg是正則表達(dá)式
 ! 是用于negate結(jié)果(非)
 & 相當(dāng)于AND
 n 是一個(gè)數(shù)字
 x.x.x.x 是IP地址
 x.x.x.x-x.x.x.x 是IP地址段
 x.x.x.x/x 是IP段
注:如果為了基于IP地址/主機(jī)名來限制可以映射的EVENT的設(shè)備,推薦使用NODES關(guān)  鍵字。
 如果模式設(shè)置為’or’,只要有一條匹配,則認(rèn)為結(jié)果是true;如果模式為and,只要有一  條匹配失敗,則認(rèn)為結(jié)果為false。
 在表達(dá)式中使用圓括號(hào)(),需要跟在\號(hào)之后。
 如果沒有MATCH MODE=這樣的行存在,默認(rèn)為or。
 每個(gè)EVENT,只能有一條match mode存在。如果多行MATCH MODE=存在,只有最后一樣被使用。
例如:
 $2必須在1000到2000之間:MATCH $2: 1000-2000
 任何匹配(or):$3等于52,或者$4是IP地址段192.168.1.10-192.168.1.20,或者severity為Major:
  MATCH $3: 52
  MATCH $4: 192.168.1.10-192.168.1.20
  MATCH $s: (Major)
 全部匹配(and): $3大于20,$5不包含關(guān)鍵詞alarm或者critical, $6 必須字符串’(1)remaining’ , $7 必須包含字符串’power’,不管是大寫還是小寫:
  MATCH $3: >20
  MATCH $5: !(alarm|critical)
  MATCH $6: (\(1\) remaining)
  MATCH $7: (power)i
  MATCH MODE=and

  8. REGEX
[REGEX(    )(    )[i][g][e]]
在translated FORMAT/ EXEC行 進(jìn)行搜索和替換。
多個(gè)REGEX()()行被允許。
第一個(gè)()包含了查找的表達(dá)式;第二個(gè)()包含了替換的文本。
如下的Perl正則表達(dá)式被支持:
 i - 當(dāng)匹配左側(cè)時(shí)忽略大小寫
 g - 替換所有匹配的部分,而不是僅替換查找到的第一個(gè)匹配
 e - 執(zhí)行右側(cè)的代碼
為了使用capture替換,或者e參數(shù),需要在snmptt.ini文件中設(shè)置allow_unsafe_regex為1
如果有多行REGEX,那么從上到下的處理,并且結(jié)果是累加的。即第二行處理第一行產(chǎn)生的結(jié)果。
例1:
 處理前的FORMAT行:UPS has       detected a      building alarm.       Cause: UPS1 Alarm #14: Building alarm 3.
 REGEX (Building alarm 3)(Computer room high temperature)
 REGEX (Building alarm 4)(Moisture detection alarm)
 REGEX (roOm)(ROOM)ig
 REGEX (UPS)(The big UPS)
 REGEX (\s+)( )g
 處理后的FORMAT行:The big UPS has detected a building alarm. Cause: UPS1 Alarm #14: Computer ROOM high temperature

列2:在查找部分使用圓括號(hào),需要前面加上\。替換部分不需要使用
 處理前的FORMAT行:Alarm (1) and (2) has been triggered
 
 REGEX (\(1\))(One)
 REGEX (\(2\))((Two))
 處理后的FORMAT行:Alarm One and (Two) has been triggered
列3: 如果設(shè)置了allow_unsafe_regex,那么captures可以在替換部分使用
 處理前的FORMAT行:The system has logged exception error 55 for the service testservice
 REGEX (The system has logged exception error (\d+) for the service (\w+))(Service $2 generated error $1)
 處理后的FORMAT行:Service testservice generated error 55
列4:如果設(shè)置了allow_unsafe_regex允許,并且使用了e參數(shù),右側(cè)的部分被執(zhí)行。
 處理前的FORMAT行:Authentication Failure Trap from IP address: C0 A8 1 FE
 REGEX (Address: (\w+)\s+(\w+)\s+(\w+)\s+(\w+))("address: ".hex($1).".".hex($2).".".hex($3).".".hex($4))ei
 處理后的FORMAT行:Authentication Failure Trap from IP address: 192.168.1.254

  9.  SDESC EDESC
這兩個(gè)標(biāo)識(shí)符之間的是描述,會(huì)被snmptt忽略。
 
六、其他配置說明 

    1.Standalone 模式
    為了在standalone模式下使用SNMPTT,snmptrapd.conf文件需要包含如下行:
             traphandle default /usr/sbin/snmptt

    當(dāng)SNMPTRAPD收到一個(gè)trap,將這個(gè)trap傳遞給/usr/sbin/snmptt腳本。SNMPTT執(zhí)行如下的任務(wù):
          * 讀取從snmptrapd傳遞的trap
          * 載入包含trap定義的配置文件
          * 查找trap的匹配
          * 記錄日志,執(zhí)行EXEC語句等
          * 退出

 
   2. Daemon 模式
    當(dāng)SNMPTT運(yùn)行在daemon模式時(shí),需要在snmptrapd.conf文件中,添加如下行:
               traphandle default /usr/sbin/snmptthandler
    當(dāng)SNMPTRAPD接收到一個(gè)trap時(shí),trap被傳遞給/usr/sbin/snmptthandler腳本。SNMPTTHANDLER完成如下任務(wù):
          * 讀取從snmptrapd傳遞過來的trap
          * 將trap寫到/var/spool/snmptt目錄中的一個(gè)唯一文件
          * 退出
 
     運(yùn)行在daemon模式的SNMPTT完成如下任務(wù):
          * 啟動(dòng)時(shí),載入包含trap定義的配置文件
          * 從spool目錄讀取trap
          * 從trap中查找匹配
          * 日志記錄,執(zhí)行EXEC聲明等
          * 休眠5秒鐘
          * loops back up to ‘從spool目錄讀取trap’.
 
     注:使用SNMPTTHANDLER和SNMPTT在daemon模式下,可以輕松的處理大量的traps。在命令行使用--daemon參數(shù)或者在snmptt.ini文件中設(shè)置daemon變量,可以使SNMPTT運(yùn)行在daemon模式下。通過設(shè)置snmptt.ini文件中的use_trap_time變量為1(默認(rèn)的),日志中的日期和時(shí)間為trap被傳入spool文件的時(shí)間,如果變量設(shè)置為0,日志中的日期和時(shí)間為SNMPTT處理后的時(shí)間。

    3.SNMPTT.CONF 配置文件Notes
   當(dāng)在配置文件中對(duì)相同的trap存在多個(gè)定義時(shí),如下的規(guī)則被應(yīng)用:
       A match occurs when:
     * 接收到的trap的OID匹配配置文件中定義的OID
     * AND(當(dāng)主機(jī)名匹配NODES中定義的主機(jī)名,或者沒有NODES定義)
     * AND(MATCH部分匹配為true ,或者沒有MATCH條目)

如果在snmptt.ini文件中設(shè)置multiple_event為1:
     * 一個(gè)trap匹配配置文件中的多個(gè)定義,則被處理多次
     * 如果所有的精確匹配都符合,那么通配符匹配將不執(zhí)行
     * 如果一個(gè)精確匹配不存在,通配符匹配被執(zhí)行,假如(主機(jī)名匹配NODES中定義的主機(jī)或者沒有NODES定義)和(MATCH部分匹配為真或者沒有MATCH定義)
如果snmptt.ini文件中設(shè)置multiple_event 為0:
     * trap匹配到的第一個(gè)定義被處理
     * 如果一個(gè)精確匹配存在,通配符匹配將不執(zhí)行
     * 如果一個(gè)精確匹配不存在,通配符匹配被執(zhí)行,假如主機(jī)名匹配NODES中定義的主機(jī)或者沒有NODES定義)和(MATCH部分匹配為真或者沒有MATCH定義)
 
   4. 域名解析/DNS
     如果配置選項(xiàng) dns_enable設(shè)置為0 (禁止),那么AGENT的主機(jī)名在變量$A , NODES匹配,數(shù)據(jù)庫中的hostname列,中不可用。僅有一種例外,主機(jī)IP地址同agent IP地址相同,snmptrapd配了解析主機(jī)名。在這種情況下,主機(jī)名將會(huì)被agent名字替代。
     如果配置選項(xiàng)dns_enable設(shè)置為1(允許),那么主機(jī)名和agent名都會(huì)通過dns解析。NODES中的條目將會(huì)在匹配前被轉(zhuǎn)換為IP地址。
     主機(jī)名可能為FQDN(Fully Qualified Domain Name),在/etc/hosts或者%systemroot%\system32\drivers\etc\hosts下添加條目,可能會(huì)導(dǎo)致短名被 使用。你可以通過strip_domain/strip_domain_list選項(xiàng)設(shè)置去掉FQND名字中的域名。

七、 同Nagios的集成

 1. Nagios Passive Servie Checks
    被動(dòng)檢查允許Nagios處理由外部程序提交的檢查結(jié)果。使用SNMPTT的EXEC聲明,接收到的trap可以通過Nagios的submit_check_result腳本船體給Nagios。一旦Nagios收到,trap將會(huì)被記錄日志,發(fā)郵件等。
    所有的主機(jī)使用一個(gè)SNMPTT服務(wù)定義,你在Nagios console上只能看到收到的最后一個(gè)trap。每一個(gè)trap都被記錄日志,發(fā)郵件等,但是只能在console上看到最后一個(gè)trap的告警或critical狀態(tài)。
 
 2. Nagios Volatile Services
    收到SNMPTT轉(zhuǎn)換的trap,當(dāng)為這個(gè)定義了服務(wù),服務(wù)必須定義為volatile。當(dāng)一個(gè)服務(wù)的狀態(tài)從OK變?yōu)閚on-OK,則聯(lián)系人被通知。一般的Nagios的一個(gè)服務(wù),沒有定義volatile,意味著,另一個(gè)服務(wù)檢查被執(zhí)行了,狀態(tài)仍然為non-OK, 那么聯(lián)系人不會(huì)被通知。因?yàn)檫@里為SNMP traps只定義一個(gè)服務(wù)條目,我們需要確保每次收到trap,我們都被通知。
 
 3. 創(chuàng)建Nagios服務(wù)條目
    如下是一個(gè)Nagios服務(wù)條目
define service{
   host_name                    127.0.0.1
   service_description          SNMP TRAP
   check_command                check-host-alive
   is_volatile                  1
   check_period                 24x7
   max_check_attempts           1
   normal_check_interval        1
   retry_check_interval         1
   active_checks_enabled        0
   passive_checks_enabled       1
   check_freshness              0
   event_handler_enabled        1
   flap_detection_enabled       0
   process_perf_data            1
   notification_period          24x7
   notification_options         w,u,c,r
   notifications_enabled        1
   notification_interval        31536000
   contact_groups               somegroup
}

 

 4. Creating the SNMPTT EXEC statement
    Nagios 應(yīng)該包含了腳本submit_check_result在contrib/eventhandlers目錄。在libexec下(/usr/local /nagios/libexec)創(chuàng)建一個(gè)eventhandlers目錄,拷貝submit_check_result腳本到這個(gè)目錄中,并加上可執(zhí)行 權(quán)限(chmod a+x submit_check_result)
submit_check_result腳本需要如下參數(shù):
        host_name
        svc_description
        return_code
        plugin_output
    返會(huì)代碼如下:0=OK, 1=WARNING, 2=CRITICAL, -1=UNKNOWN.
    在snmptt.conf文件中,為每一個(gè)EVENT創(chuàng)建一條EXEC聲明:
 EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP 1 "xxxxxx"
“xxxxxx”是trap的文本,可以使用FORMAT聲明,例如:
 EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP 1 "Drive $1 in bay $2 has failed"
 
 5.  在Nagios中清除收到的traps
    使用上面的配置,一旦收到某主機(jī)的trap,它將保持WARNING狀態(tài)。為了從Nagios console中清除trap,打開TRAP服務(wù),單擊’Schedule an immediate check of this service’. 這將導(dǎo)致定義的服務(wù)檢查被運(yùn)行(check-host-alive),然后狀態(tài)變?yōu)镺K,warning被清除。
另外一種選擇是使用check-host-alive創(chuàng)建一條新的命令,叫做reset-trap:
 #!/bin/sh
 /bin/echo "OK: No recent traps received"
 exit 0
在你的 *commands.cfg中添加這條命令的定義。
    Nagios2.0引入了服務(wù)結(jié)果和主機(jī)結(jié)果的freshness 檢查。服務(wù)的freshness檢查可以用來自動(dòng)重置trap通知的告警為OK狀態(tài),這個(gè)需要在服務(wù)定義中添加check_freshness和 freshness_threshold。推薦使用freshness檢查,因?yàn)楫?dāng)服務(wù)狀態(tài)改變時(shí),normal_check_interval所引起的 下一次檢查時(shí)間沒有變。對(duì)于freshness檢查,檢查命令會(huì)在最后一次被動(dòng)檢查后的freshness_threshold秒后運(yùn)行
要使freshness檢查啟動(dòng),需要normal_check_interval為1,valid check_period 設(shè)置為24x7,并添加如下的定義:
check_freshness 1 Enable freshness checking
freshness_threshold 86400 Reset trap alert every 24 hours.

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI