zabbix利用SNMPTrap接收華為存儲服務器主動告警


zabbix利用SNMPTrap接收華為存儲服務器主動告警

概述

接收SNMP trap與查詢啟用SNMP的設備相反。

在這種情況下,信息發送自啟用SNMP的設備並由Zabbix收集或“trapped”。

通常在某些條件更改時發送trap,並且代理通過端口162連接到服務器(相反的,代理端的161端口是用於查詢代理的)。 使用trap可以檢測在查詢間隔期間發生的一些可能被查詢數據遺漏的短期問題。

在Zabbix中接收SNMP trap旨在使用snmptrapd和內置機制之一來傳遞trap到Zabbix - 一個perl腳本或SNMPTT。

接收trap的工作流程:

  1. snmptrapd 收到trap
  2. snmptrapd將trap傳遞給SNMPTT或調用Perl trap接收器
  3. SNMPTT或Perl trap接收器解析,格式化並將trap寫入文件
  4. Zabbix SNMP trap讀取並解析trap文件
  5. 對於每個trap,Zabbix發現主機接口與接收的trap地址匹配的所有“SNMP trap”監控項。請注意,在匹配期間只使用主機接口中選定的“IP”或“DNS”。
  6. 對於每個找到的監控項,將trap與“snmptrap[regexp]”中的regexp進行比較。 trap設置為all匹配項的值。如果沒有找到匹配的監控項,並且有一個“snmptrap.fallback”監控項,則將trap設置為該監控項的值。
  7. 如果trap未設置為任何監控項的值,Zabbix默認記錄未匹配的trap。(通過管理 → 常規 → 其它中的“記錄未匹配的SNMP trap(Log unmatched SNMP traps)”進行配置。)

一、在zabbix—proxy上安裝配置snmptrapd

# 安裝net-snmp以及相關工具(里面包含SNMPTrapd)
yum install -y net-snmp net-snmp-utils net-snmp-perl 

# 修改配置文件
[root@zabbix_proxy_bridging /etc/snmp]# egrep -v "^#|^$" snmptrapd.conf 
authCommunity   log,execute,net Admin@123 # 指定團體名
# 指定snmptt為trap接收器,此時還沒安裝snmptt
traphandle default /usr/sbin/snmptthandler

# 啟動snmptrapd並加入開機啟動項
[root@zabbix_proxy_bridging ~]# systemctl enable --now snmptrapd.service


1)存儲設備進入ipmc開啟snmp和snmptrap,並指定團體名和trap目標主機IP

華為進軍服務器還沒幾年,所以在遠程管理卡(BMC)方面跟hp、dell相比相去甚遠。華為RH2285 v1的遠程管理平台為BMC,后續推出了iMana200、iBMC等。以下統稱BMC

華為BMC提供了以下基本功能:

  • 遠程console功能
  • 開關機功能
  • 虛擬安裝介質功能

2)proxy 實時監聽日志查看

二、安裝配置snmptt

yum -y install epel-release     # 安裝EPRL源 有可以不安裝
yum -y install snmptt           # 安裝snmptt
yum -y install perl-Sys-Syslog  # 安裝perl-syslog
# 修改配置snmptt配置文件
[root@zabbix_proxy_bridging /etc/snmp]# egrep -v "^#|^$"   /etc/snmp/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_cache_enable = 1
net_snmp_perl_best_guess = 0
translate_log_trap_oid = 2 
# 0:數字形式顯示OID,1:顯示OID名稱,
# 2:顯示OID所屬模塊名及其名稱
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 = 0
description_clean = 1
threads_enable = 0
threads_max = 10
date_time_format = %Y/%m/%d %H:%M:%S # 時間日期格式
[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 = 0
log_system_file = /var/log/snmptt/snmpttsystem.log
unknown_trap_log_enable = 0
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log
statistics_interval = 0
syslog_enable = 1
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 = 1
syslog_system_facility = local0
syslog_system_level = warning
[SQL]
db_translate_enterprise = 0
db_unknown_trap_format = '$-*'
sql_custom_columns = <<END
END
sql_custom_columns_unknown = <<END
END
mysql_dbi_enable = 0
mysql_dbi_host = localhost
mysql_dbi_port = 3306
mysql_dbi_database = snmptt
mysql_dbi_table = snmptt
mysql_dbi_table_unknown = snmptt_unknown
mysql_dbi_table_statistics = 
mysql_dbi_username = snmpttuser
mysql_dbi_password = password
mysql_ping_on_insert = 1
mysql_ping_interval = 300
postgresql_dbi_enable = 0
postgresql_dbi_module = 0
postgresql_dbi_hostport_enable = 0
postgresql_dbi_host = localhost
postgresql_dbi_port = 5432
postgresql_dbi_database = snmptt
postgresql_dbi_table_unknown = snmptt_unknown
postgresql_dbi_table_statistics = 
postgresql_dbi_table = snmptt
postgresql_dbi_username = snmpttuser
postgresql_dbi_password = password
postgresql_ping_on_insert = 1
postgresql_ping_interval = 300
dbd_odbc_enable = 0
dbd_odbc_dsn = snmptt
dbd_odbc_table = snmptt
dbd_odbc_table_unknown = snmptt_unknown
dbd_odbc_table_statistics = 
dbd_odbc_username = snmptt
dbd_odbc_password = password
dbd_odbc_ping_on_insert = 1
dbd_odbc_ping_interval = 300
[Exec]
exec_enable = 1
pre_exec_enable = 1
unknown_trap_exec = 
unknown_trap_exec_format = 
exec_escape = 1
[Debugging]
DEBUGGING = 0
DEBUGGING_FILE = 
DEBUGGING_FILE_HANDLER = 
[TrapFiles]
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
END


1)備份規則文件
mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.bak
2)自定義trap格式化規則
#匹配Linkdown的規則
EVENT LinkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Warning
FORMAT ZBXTRAP $aA LinkDown on interface $4.  Admin state: $2.  Operational state: $3

#匹配Linkup的規則
EVENT LinkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA Linkup on interface $4.  Admin state: $2.  Operational state: $3

# 默認規則,沒有其他規則匹配上時,所有trap信息都按此規則處理
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $1
3) 啟動snmtt
systemctl enable --now snmptt
tail -F /var/log/snmptt/snmptt.log   #打開並跟蹤snmptt日志

三、配置zabbix-proxy

[root@zabbix_proxy_bridging /etc/zabbix]# egrep -v "^#|^$" zabbix_proxy.conf
ProxyMode=0 # 主動模式
Server=192.168.60.243 # server地址
ServerPort=10051 # 監聽端口
Hostname=zabbix_proxy_241 # 主動模式跟web配置一樣
LogFile=/var/log/zabbix/zabbix_proxy.log # 日志文件
LogFileSize=0 # 不啟用日志切割
DebugLevel=3 # 調試等級
EnableRemoteCommands=0 # 允許zabbix-server在本機遠程執行命令
LogRemoteCommands=1 # 遠程執行命令后吧記錄日志為警告
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
DBPort=3306
ConfigFrequency=60 # 多久主動向server索要一次配置數據
DataSenderFrequency=1 # proxy采集到的數據多久向server發送一次 秒
StartPollers=5 # 輪詢進程的初始實例數量。
StartIPMIPollers=5 # IPMI 輪詢進程的初始實例數量。
StartPreprocessors=3 
# pre-forked實例的預處理線程數量 
# 預處理器工作進程啟動時,預處理管理器進程將自動啟動

StartPollersUnreachable=1 
# 不可達主機 (包括IPMI 和 Java)的輪詢進程的初始實例數量
StartTrappers=5
trapper進程的初始實例數量。
Trapper接收來自Zabbix發送者、主動agent的數據。
至少要運行一個trapper進程用於在web前端展示服務器可用性和隊列視圖
StartPingers=1 # ICMP pingers進程的初始實例數量
StartDiscoverers=1 # 發現進程的初始實例數量。
StartHTTPPollers=1 # HTTP 輪詢進程的初始實例數量。
SNMPTrapperFile=/var/log/snmptt/snmptt.log 
臨時文件, 用於傳遞 SNMP trap守護進程的數據給server.
必須和 zabbix_trap_receiver.pl或 SNMPTT 配置文件中的配置保持一致。
StartSNMPTrapper=1 # 設置為1, SNMP trapper進程將啟動。
StartDBSyncers=4 # 數據庫進程的初始實例數量。
Timeout=4 # agent、SNMP設備或外部檢查的超時時長
TrapperTimeout=300 # 定義trapper處理數據的超時時間
ExternalScripts=/usr/lib/zabbix/externalscripts 
# 外部腳本位置 (依賴編譯安裝時的環境變量datadir)。
LogSlowQueries=3000
數據庫查詢消耗時間,大於該時間將會記入日志 (毫秒)。
0 - 不記錄慢查詢日志。
DebugLevel=3時該選項可用。

StatsAllowedIP=127.0.0.1
ip地址列表以”,”分割,也可以使用CIDR、或者DNS. 
只接受ip里表中的請求. 如果未設置此參數,則不接受請求.

# 更改配置后重啟zabbix-proxy
systtemctl restart zab

四、配置zabbix-server

[root@zabbix-server /etc/zabbix]# egrep -v "^#|^$" zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
StartPollers=5
StartIPMIPollers=5
StartPreprocessors=3
StartPollersUnreachable=1
StartTrappers=5
StartPingers=1
StartDiscoverers=1
StartHTTPPollers=1
SNMPTrapperFile=/tmp/zabbix_traps.tmp # 指定snmptt日志文件
StartSNMPTrapper=1 # 開啟SNMPTrapper功能
StartDBSyncers=4
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

五,配置zabbix-web頁面

在Key字段中使用一個SNMP trap Key:
Key
描述 返回值 注釋
snmptrap[regexp]
捕獲與regexp中指定的正則表達式匹配的所有SNMP trap。如果regexp未指定,則捕獲任何trap。 SNMP trap 該監控項只能用於SNMP接口 此監控項從Zabbix 2.0.0.開始支持 注意: 從Zabbix 2.0.5開始,該監控項的參數支持用戶宏和全局正則表達式。
snmptrap.fallback
捕獲未被該接口的任何snmptrap[]監控項捕獲的所有SNMP trap。 SNMP trap 該監控項只能用於SNMP接口。 該監控項從Zabbix 2.0.0.以后支持

目前不支持多行正則表達式匹配。

將要解析的時間戳的信息類型設置為'Log'。 請注意,其它格式(如“數字”)也是可以接受的,但可能需要自定義trap處理程序。

要使SNMP trap監控工作,必須首先正確設置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM