Zabbix Snmp Trap 配置

1. Zabbix Server 操作

1.1 Snmp Trap 安装配置

yum install -y net-snmp net-snmp-utils

vim /usr/lib/systemd/system/snmptrapd.service
ExecStart=/usr/sbin/snmptrapd $OPTIONS -f -O n vim /etc/snmp/snmptrapd.conf
authCommunity execute public
traphandle default /sbin/snmptthandler systemctl enable snmptrapd
systemctl start snmptrapd
netstat -unpl |grep 162

1.2 SnmpTT 安装配置

# rpm -ivh http://dl.fedoraproject.org/pub/epel
yum install snmptt perl-Sys-Syslog
vim /etc/snmp/snmptt.ini date_time_format= %Y/%m/%d %H:%M:%S mode = daemon ~~~
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf #默认的格式化日志配置文件
/etc/snmp/nbu.conf # 在这里可以指定其他的格式化trap日志的配置文件
END
~~~ vim /etc/snmp/nbu.conf #snmptrapd接受设备打过来的日志信息,传输到snmptt进行格式化,
~~~
EVENT general .1.3.6.1.4.1.318.* "UPSTrap" Error #EVENT general 固定格式 .1.3.6......匹配日志信息中的oid,后面的.*支持统配,将收到的日志添加 "UPSTrap" Error
FORMAT ZBXTRAP $ar $+* # 格式化数据,都打上ZABTRAP 头,$ar $+* $ar一般是ip,$+*就是后面的oid信息
EXEC /etc/snmp/xxxx.py "$+*" #执行指定的py脚本,传入format中匹配的参数,
~~~

xxxx.py中的处理 #在EXEC中指定执行的脚本

def handle(param):     

    param = """127.0.0.1 .1.3.6.1.4.1.318.2.3.10.0:B925f92_nbErrorCond_E7DC65F3 .1.3.6.1.4.1.318.2.3.23.0:E5 80 BC E9 94 99 E8 AF AF  .1.3.6.1.4.1.318.2.3.1.0:9 .1.3.6.1.4.1.318.2.3.11.0:B925f92_nbSNMPEnc156223BD .1.3.6.1.4.1.318.2.3.24.0:E5 85 AC E5 AE 89 E9 BA BB E8 B1 AA E6 94 AF E8  A1 8C 20 28 31 30 2E 34 32 2E 37 30 2E 31 39 39  29  .1.3.6.1.4.1.318.2.3.16.0: .1.3.6.1.4.1.318.2.3.25.0:UPS .1.3.6.1.4.1.318.2.3.17.0:US1503103638 .1.3.6.1.4.1.318.2.3.20.0:Smart-UPS RT 5000 XL .1.3.6.1.4.1.318.2.3.21.0:10.42.70.199 .1.3.6.1.4.1.318.2.3.26.0:E6 B9 96 E5 8C 97 E7 9C 81 E8 8D 86 E5 B7 9E E5  B8 82  .1.3.6.1.4.1.318.2.3.27.0:E6 9D 8E E6 99 93 E7 BB B4  .1.3.6.1.4.1.318.2.3.22.0:B925f92_nbSNMPEnc156223BD_UPS_BASIC_OUTPUT_STATE .1.3.6.1.4.1.318.2.3.28.0:55 50 53 20 E6 93 8D E4 BD 9C E6 A8 A1 E5 BC 8F  .1.3.6.1.4.1.318.2.3.29.0:1 .1.3.6.1.4.1.318.2.3.6.0:1547028468 .1.3.6.1.4.1.318.2.3.7.0:1547028528 .1.3.6.1.4.1.318.2.3.30.0:27 55 50 53 20 E6 93 8D E4 BD 9C E6 A8 A1 E5 BC  8F 27 E7 9A 84 E5 80 BC E8 A1 A8 E6 98 8E E4 B9  8B E5 89 8D 27 E4 B8 A5 E9 87 8D 27 E8 AD A6 E6  8A A5 E6 9B BE E7 BB 8F E5 8F 91 E7 94 9F EF BC  8C E4 BD 86 E8 AF A5 E5 80 BC E7 8E B0 E5 9C A8  E5 B7 B2 E6 81 A2 E5 A4 8D E6 AD A3 E5 B8 B8 E3  80 82
"""
data = {}
param_list = param.split('.1.3.6.1.4.1.318.2.3.')[1:] #使用1.3.6.1.4.1.318.2.3来切割字符串,得到.1.3.6.1.4.1.318.2.3.后面的值 >'10.0:B925f92_nbErrorCond_E7DC65F3 ', """
param.split('.1.3.6.1.4.1.318.2.3.')
['127.0.0.1 ',
'10.0:B925f92_nbErrorCond_E7DC65F3 ',
'23.0:E5 80 BC E9 94 99 E8 AF AF ', 16位转码 值错误
'1.0:9 ',
'11.0:B925f92_nbSNMPEnc156223BD ',
'24.0:xxxxxxxxxxx ', 公安xx支行 (10.xx.xx.xxx)
'16.0: ',
'25.0:UPS ',
'17.0:US1503103638 ',
'20.0:Smart-UPS RT 5000 XL ',
'21.0:10.42.70.199 ',
'26.0:E6 B9 96 E5 8C 97 E7 9C 81 E8 8D 86 E5 B7 9E E5 B8 82 ', 湖北省荆州市
'27.0:E6 9D 8E E6 99 93 E7 BB B4 ',
'22.0:B925f92_nbSNMPEnc156223BD_UPS_BASIC_OUTPUT_STATE ',
'28.0:55 50 53 20 E6 93 8D E4 BD 9C E6 A8 A1 E5 BC 8F ', UPS 操作模式
'29.0:1 ',
'6.0:1547028468 ',
'7.0:1547028528 ',
'30.0:27 55 50 53 20 E6 93 8D E4 BD 9C E6 A8 A1 E5 BC 8F 27 E7 9A 84 E5 80 BC E8 A1 A8 E6 98 8E E4 B9 8B E5 89 8D 27 E4 B8 A5 E9 87 8D 27 E8 AD A6 E6 8A A5 E6 9B BE E7 BB 8F E5 8F 91 E7 94 9F EF BC 8C E4 BD 86 E8 AF A5 E5 80 BC E7 8E B0 E5 9C A8 E5 B7 B2 E6 81 A2 E5 A4 8D E6 AD A3 E5 B8 B8 E3 80 82'] UPS 操作模式'的值表明之前'严重'警报曾经发生,但该值现在已恢复正常。 param.split('.1.3.6.1.4.1.318.2.3.')[1:]
将首位的ip去掉,剩下的就是对应的oid信息
'10.0:B925f92_nbErrorCond_E7DC65F3 ',
'23.0:E5 80 BC E9 94 99 E8 AF AF ',
'1.0:9 ',
'11.0:B925f92_nbSNMPEnc156223BD ',
'24.0:E5 85 AC E5 AE 89 E9.......
""" for item in param_list:
key, value = item.split(':') #用:来切割,得到所有的oid及其对应的值 >>> '10.0', 'B925f92_nbErrorCond_E7DC65F3 '
key = key.split('.')[0] #对key在进行.切割,获取统配oid后的第一位值
data[key] = value #构造字典,键值对应,以统配后的首位oid值为键
if key in ['23', '24', '26', '27', '28', '30']: #对key进行筛选,
value = binascii.a2b_hex(value.replace(' ', '')).decode('utf8') #snmptt中收到的信息是16进制转码的,需要对16位进行转义,replace将空格去掉,
else:
value = value.strip() #对于取值不是16位进制的,直接进行去空操作
data[key] = value
host = data['24'].split(' ')[0].strip() #trap信息中24打头oid指代的就是监控系统中配置的host信息
ip = data['21'].strip()
end = int(data['7'])
if end:
value = 0
else:
value = 1
if value: #对告警还是回复进行检查
key, value = check_alert_key(data)
else:
key, value = check_recover_key(data)
start = int(data['6'])
end = int(data['7'])
msg = data['30']
#logging.info(data['29'], data['30'])
return host, ip, key, value, start, end, msg if __name__ == '__main__':
if len(sys.argv) > 1:
arg = sys.argv[1]
ret = handle(arg) #接受传入参数,这里是匹配的$+*,就是匹配的所有的oid信息 """
('E5', 'xx.xx.xx.xxx', 'ups.operation.mode', 0, 1547028468, 1547028528, "'UPS 操作模式'的值表明之前'严重'警报曾经发生,但该值现在已恢复正常。") """
sender = ZabbixSender() #使用了zabbixsender来给server端发送数据
sender.add(ret[1], ret[2], ret[3]) #指定了ip key value
sender.send() #发送
item = '[{4} - {5}] host: {0} ip: {1} key: {2} value: {3} message: {6}\n'.format(*ret)
logging.info(item)

20191026

上面有个问题,就是只能对过滤的哪几个key所对应的16进制码进行转码,可以加个处理

        data[key] = value.strip() #对值进行去括号。
#if key in ['23', '24', '26', '27', '28', '30']: #对key进行筛选
不要上面这行了,
if data['key'] find(' ') !=-1:#对值进行空值查找
try: #有些不是16进制的字符串中也含有空格,所以使用try对所有进行转码,
value = binascii.a2b_hex(value.replace(' ', '')).decode('utf8') #snmptt中收到的信息是16进制转码的,需要对16位进行转义,replace将空格去掉,
except Exception as e: #不能转的的就是剩下的非16进制字符串,直接使用即可,
value = value.strip()
else:
value = value.strip() #对于取值不是16位进制的,直接进行去空操作
data[key] = value
这样就解决了对于host转码的不完整
之后可以在snmptt.log中找出匹配的告警内容,手动的更改组成一个oid字符串,然后调用脚本传入参数,将数据发送出去,其中的6键对应的是发生时间,7键对应的是恢复时间,用7键的有无判定是发生告警还是恢复,在手动调用的时候7键值为0,就是发生的告警信息,给7键随便赋值,就可以是恢复了。

重启服务

systemctl enable snmptt
systemctl start snmptt

1.3 Zabbix Server 配置

vi zabbix_server.conf
vi zabbix_proxy.conf
SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1 systemctl retart zabbix-server # 测试命令
snmptrap -v 2c -c public 127.0.0.1 "" 1.3.6.1.4.1.2345 1.3.6.1.4.1.2345 s "test v2"
发送的 ip 要与主机的 SNMP接口 ip 一致。

snmptrapd与snmptt的工作流程

  1. 例如发送hds的snmptrap信息,发送的消息传给snmptrapd进程,
  2. snmptrapd.conf中指定了数据转换的handler
        traphandle default /sbin/snmptthandler
  3. snmptt进程进行数据格式转化

    snmptt.ini中指定了日志文件的路径和相应的格式化配置文件

    日志路径

    log_file = /var/log/snmptt/snmptt.log

    格式化配置文件

    /etc/snmp/snmptt.conf

  4. snmptt.conf 及其他指定的conf文件中指定了数据格式化的形式

    EVENT general .1.3.6.1.4.1.2.6.182.* "LTOTrap" Error

    FORMAT ZBXTRAP $ar $+*

    EXEC /etc/snmp/lto_trap_handle.py "$ar $+"

    EVENT general .1.3.6.1.4.1.2.6.201.
    "IBMTrap" Error

    FORMAT ZBXTRAP $ar $+*

    EVENT general .1.3.6.1.4.1.116.* "HDSTrap" Error

    FORMAT ZBXTRAP $ar $+*

    EXEC /etc/snmp/hds_trap_handle.py "$ar $+*"
  5. 在/var/log/snmptt/snmptt.log文件中就会存上格式化好的数据

    EXEC 中指定执行的脚本,参数就是格式化之后的数据
  6. 一般在修改完配置项之后需要重启snmptrapd 及 snmptt进程

snmp_trap/snmptt的更多相关文章

  1. 如何部署Zabbix服务端

    部署环境 RHEL 6.7 Zabbix-server 2.2.14 安装zabbix官方源 # wget http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_6 ...

  2. Grafana + Zabbix --- 部署分布式监控系统

    阅读目录: 1. 关闭防火墙 2. 安装Zabbix下载源 3. ZabbixClient  --- 安装zabbix-agent代理 4. ZabbixServer --- 安装zabbix-ser ...

  3. Zabbix配置文件详解之服务端zabbix_server

    zabbix作为运维邻域不可缺少的一员,它的各种文档可是数不胜数啊,但是关于配置文件的解释与说明就有点少.这里列出zabbix配置文件篇之zabbix_server. Zabbix Server端配置 ...

  4. Zabbix Step 1 : Install CentOS6.5 and Configration

    [root@myzabbix Desktop]#rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2- ...

  5. 第八章 监控 Zabbix

    1.1   YUM部署 Zabbix 2.4 1.  前期准备(省略) l   Yum源的配置 cd /etc/yum.repos.d/; mkdir old;mv ./* old/ rpm -Uvh ...

  6. 自动化利器-Zabbix

    1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是非常复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责. ...

  7. 在centOS7.2安装配置zabbix监控

    zabbix由两部分组成,zabbix-server与可选的zabbix-agent.zabbix-server可以通过SNMP,ZABBIX-AGENT,PING,端口监视等方法提供对远程服务器/网 ...

  8. Zabbix(二) : Zabbix Server端配置文件说明

    Zabbix Server端配置文件说明 # This is a configuration file for Zabbix Server process # To get more informat ...

  9. Zabbix服务网页报错汇总

    第1章 Zabbix简介及组成 1.1 zabbix简介 zabbix是一个基于web界面,提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它可以监视各种网络参数,保证服务器自动的安全运营, ...

随机推荐

  1. BC26模组UDP调试

    BC26模组调试 数据上报AT流程 [15:33:46.819]收←◆ F1: 0000 0000 V0: 0000 0000 [0001] 00: 0006 000C 01: 0000 0000 U ...

  2. 怎样解决Script error报错问题

    如果脚本网址与网页网址不在同一个域(比如使用了 CDN), 那如果这个脚本执行报错了, 就会报:Script error. 由于同源策略, 浏览器禁止向外部脚本泄漏信息, 因此不会提供完整的报错信息, ...

  3. ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端

    原文:https://www.stevejgordon.co.uk/httpclientfactory-named-typed-clients-aspnetcore  发表于:2018年1月 上一篇文 ...

  4. React 脚手架支持Typescript和Sass

    首先,创建React工程目录,以及选择Typescript版本 进入在my-app目录,安装node-sass 然后再安装webpack的sass-loader  接下来进入node_modules ...

  5. mac下卸载android studio

    Execute these commands from the terminal rm -Rf /Applications/Android\ Studio.app rm -Rf ~/Library/P ...

  6. Django Rest framework的限流实现流程

    目录 一 什么是throttle 二 Django REST framework是如何实现throttle的 三 Django REST framework中throttle源码流程 一 什么是thr ...

  7. sql server行转列

    创建测试数据 学生表 Student create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarcha ...

  8. Guava【google】

    Guava 是什么? Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合,缓存,支持原语,并发性,常见注解, ...

  9. 删除svn用户

    以win7为例 1.进入c:/Users/[你的用户名]/AppData/Roaming/Subversion/auth目录,删除该目录下的所有文件: 2.重启eclipse/myeclipse,提交 ...

  10. MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

    /*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...