zabbix利用SNMPTrap接收华为存储服务器主动告警
概述
接收SNMP trap与查询启用SNMP的设备相反。
在这种情况下,信息发送自启用SNMP的设备并由Zabbix收集或“trapped”。
通常在某些条件更改时发送trap,并且代理通过端口162连接到服务器(相反的,代理端的161端口是用于查询代理的)。 使用trap可以检测在查询间隔期间发生的一些可能被查询数据遗漏的短期问题。
在Zabbix中接收SNMP trap旨在使用snmptrapd和内置机制之一来传递trap到Zabbix - 一个perl脚本或SNMPTT。
接收trap的工作流程:
- snmptrapd 收到trap
- snmptrapd将trap传递给SNMPTT或调用Perl trap接收器
- SNMPTT或Perl trap接收器解析,格式化并将trap写入文件
- Zabbix SNMP trap读取并解析trap文件
- 对于每个trap,Zabbix发现主机接口与接收的trap地址匹配的所有“SNMP trap”监控项。请注意,在匹配期间只使用主机接口中选定的“IP”或“DNS”。
- 对于每个找到的监控项,将trap与“snmptrap[regexp]”中的regexp进行比较。 trap设置为all匹配项的值。如果没有找到匹配的监控项,并且有一个“snmptrap.fallback”监控项,则将trap设置为该监控项的值。
- 如果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监控工作,必须首先正确设置。