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. [Luogu5320][BJOI2019]堪破神机(DP+斯特林数)

    https://www.cnblogs.com/cjyyb/p/10747543.html 特征方程+斯特林反演化简式子,要注意在模998244353意义下5没有二次剩余,所以每个数都要用$a+b\s ...

  2. Centos7+puppet+foreman,模板介绍

    一.简介 provision templates 是灵活部署合适的操作系统的核心,模板包括有好几类 1.模板种类 pxe相关的模板,比如pxelinux,pxegrub,pxegrub2 kickst ...

  3. hdu 1501 贪心问题

    这道题目的关键就是逐个搜索的过程 找个时间得复习一下dfs了    这里使用temp作为参照变量 每次比较以后(由于已经排序好) 已temp为参照进行下一次的比较

  4. mongodb入门基本语法

    show dbs 查看所有数据库列表 二. 创建数据库 使用数据库. 创建数据库 use student 如果真的想把这个数据库创建成功, 那么必须插入一个数据. 数据库中不能直接插入数据,只能往集合 ...

  5. 最全的ADB命令行大全(转)

    基本用法 命令语法 adb 命令的基本语法如下: adb [-d|-e|-s ] 如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb . 为命令指定目标设备 ...

  6. python3 super().__init__()

    父类不会自动调用__init__方法 class A: def __init__(self): A = 'A' self.a = 'a' print('init A') class B(A): def ...

  7. S5PV210 启动流程

    S3C6410启动流程 首先,看一下S3C6410启动流程 ① iROM supports initial boot up : initialize system clock, D-TCM, devi ...

  8. for循环的耗时问题

    结论——用变量来缓存数组长度,效率会更高

  9. Hive调优笔记

    Hive调优 先记录了这么多,日后如果有遇到,再补充. fetch模式 <property> <name>hive.fetch.task.conversion</name ...

  10. [#Linux] CentOS 7 美化调优

    优化美化系统,是为了让新系统能更顺眼顺手,符合自己过去在windows下的使用习惯,从而实现平稳过渡. 正如开篇时谈到的,现在的桌面版linux已相当友好(特别是Ubuntu),基本不需要做什么额外设 ...