项目中使用了中国电信系统集成公司的虚拟化平台,为通过zabbix监控,接收HyperCenter发送的告警,需要将trap消息中的汉语编码转译。网络上snmptt资料不多,官网文档也不甚友好,通过参考 zabbix开源社区公众号的《第三方平台告警接入、翻译、关联恢复》 文章成功完成了工作,特此将经验分享给有需要的人。

以下为/etc/snmp/snmptt.conf文件中的兜底规则,将所有内容记录下来。

EVENT general .* "Default" Normal
FORMAT ZBXTRAP $aA $ar $+*

一条/var/log/snmptt.log文件中记录如下(例)

14:19:03 2022/03/31  SNMPv2-SMI::enterprises.49625.10.100.8.1.1 Normal "Default" 10.110.3.14 - ZBXTRAP 10.110.3.14 10.110.3.14 enterprises.49625.10.100.8.1.1.1:1509389294969348096 enterprises.49625.10.100.8.1.1.2:24589 enterprises.49625.10.100.8.1.1.3:0 enterprises.49625.10.100.8.1.1.4:1648701421000 enterprises.49625.10.100.8.1.1.5:4e36e0b6-b63d-4955-97ab-a769d97fb8d4 enterprises.49625.10.100.8.1.1.6:4e36e0b6-b63d-4955-97ab-a769d97fb8d4 enterprises.49625.10.100.8.1.1.7:v_vm enterprises.49625.10.100.8.1.1.8:alert-collector enterprises.49625.10.100.8.1.1.9:3 enterprises.49625.10.100.8.1.1.10: enterprises.49625.10.100.8.1.1.11: enterprises.49625.10.100.8.1.1.12: enterprises.49625.10.100.8.1.1.13: enterprises.49625.10.100.8.1.1.14:01010201 enterprises.49625.10.100.8.1.1.15:E8 99 9A E6 8B 9F E6 9C BA 20 34 65 33 36 65 30  62 36 2D 62 36 33 64 2D 34 39 35 35 2D 39 37 61  62 2D 61 37 36 39 64 39 37 66 62 38 64 34 20 E5  86 85 E5 AD 98 E4 BD BF E7 94 A8 E7 8E 87 E9 98  88 E5 80 BC E5 91 8A E8 AD A6  enterprises.49625.10.100.8.1.1.16:E5 86 85 E5 AD 98 E4 BD BF E7 94 A8 E7 8E 87 3A  E5 B7 B2 E8 BE BE E6 88 96 E8 B6 85 E8 BF 87 E9  99 90 E5 AE 9A E9 98 88 E5 80 BC 37 30 2C E5 BD  93 E5 89 8D E5 80 BC 37 39 2E 39 31  enterprises.49625.10.100.8.1.1.17: enterprises.49625.10.100.8.1.1.18: enterprises.49625.10.100.8.1.1.19:d815ea322799765943e592369fa17e76 enterprises.49625.10.100.8.1.1.20:613ae843-b7e5-4b75-8cf9-d6356e497059

可以看出某些字段形似乱码,其实是16进制utf-8编码,需要通过snmtt的EXEC配置脚本进行解析。我们将最关键的第15个字段alarmTitle和第16个字段alarmCause进行解析:

EVENT HyperCenter .1.3.6.1.4.1.49625.10.100.8.1.* "CSTI HyperCenter" Normal
EXEC /etc/snmp/HyperCenterTrapTranslate.py $aA "$15" "$16"
SDESC
CSTi Hyper Center Trap alarm
EDESC

特别要注意的是,由于16进制编码字符之间有空格,必须要用引号""包起来,否则脚本会误以为是入参结束而解析失败。

调用的/etc/snmp/HyperCenterTrapTranslate.py脚本代码如下:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import time
import urllib
import re def hex_to_chinese(hex_str):
chn_msg = "null"
if len(hex_str) > 0:
try:
tmp = "%" + re.sub("\s+","%", hex_str.strip())
chn_msg = urllib.unquote(tmp)
except :
chn_msg = 'ZBXTRAP can not translate this message'
return chn_msg logtime = time.strftime('%H:%M:%S %Y/%m/%d', time.localtime())
snmptrapfile = "/var/log/snmptt/snmptt.log" agentIP = sys.argv[1].strip()
alarmTitle = hex_to_chinese(sys.argv[2].strip()).replace("\n", " ")
alarmCause = hex_to_chinese(sys.argv[3].strip()).replace("\n", " ") zbxtrapmessage = logtime + " ZBXTRAP " + agentIP + " alarmTitle:" + alarmTitle + " alarmCause:" + alarmCause
with open(snmptrapfile, 'a+') as f:
f.write(zbxtrapmessage)
f.write("\n")
f.close()

如此在zabbix界面可以得到如下消息(例)

22:47:33 2022/04/02 alarmTitle:虚拟机 9978069f-c316-44d4-ac07-cfe6fcee1897 内存使用率阈值告警 alarmCause:内存使用率:已达或超过限定阈值70,当前值77.12

snmptt解析中文trap消息的更多相关文章

  1. Android 手机卫士--解析json与消息机制发送不同类型消息

    本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...

  2. iOS开发之网络数据解析--中文输出

    对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果: 为了避免这个问题,可以通过类别来重写系统和打印相关的方法. 步骤: 1.新建文件名:Foundation+Lo ...

  3. RobotFramework中解析中文报错UnicodeDecodeError

    在RobotFramework中解析一段包含中文的字符串时遇到下面的报错: FAIL : UnicodeDecodeError: 'ascii' codec can't decode byte 0xe ...

  4. 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)

    在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等.但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单.容易或有效.下面给出一个实现了自定义构建和解析协议消 ...

  5. python3下urlopen解析中文url编码错误

    这是在ipython下测试的结果: In [24]: x Out[24]: 'http://127.0.0.1:8000/xxx/?id=a45ex0bad3c9&game=五子棋' In [ ...

  6. Socket与Http方式解析发送xml消息封装中间件jar包

    最近项目代码中太多重复的编写Document,不同的接口需要不同的模板,于是重写提取公共部分打成jar包,方便各个系统统一使用~ 提取结构: Http连接方式: import java.nio.cha ...

  7. nodejs实现接收Snmp的Trap消息

    var assert = require('assert'); var ASN1 = { EOC: 0, Boolean: 1, Integer: 2, BitString: 3, OctetStri ...

  8. 关于rapidxml无法解析中文路径问题

    先放结果 setlocale(LC_ALL, ""); rapidxml::file<> f(szPath); setlocale(LC_ALL, "C&qu ...

  9. 阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)

    一.谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动.创建连接.创建 ...

  10. FrameWork内核解析之Handler消息机制(二)

    阿里P7Android高级架构进阶视频(内含Handler视频讲解)免费学习请点击:https://space.bilibili.com/474380680 一.Handler 在Android开发的 ...

随机推荐

  1. Spring源码系列(补充):详解ApplicationContext

    前言 在之前的文章中,我们已经对Spring源码中的一些核心概念进行了分析.由于篇幅限制,我们并没有详细解释ApplicationContext类所继承的父接口及其作用.因此,本文将单独为Applic ...

  2. List嵌套排序并取第一个对象

    using Newtonsoft.Json;using 嵌套List排序; //示例listvar exampleString = "{\"code\":1,\" ...

  3. java无效发源版本xx

    这三个地方统一一下 就可以解决了

  4. java Stack(栈)类、Queue和Deque队列

    1. java Stack类 特性是:LIFO(后进先出)先进后出,最先进入的在栈底. Stack底层也是通过数组实现的,同时也是线程安全的 Stack stack=new Stack(); //添加 ...

  5. awk判断整除(包含小数和负数)

    awk判断整除常用的方法是用内置的int或者求余数的算符% 被整数整除 输出0-100之间能被9整除的整数 使用 num/9==int(num/9) 的判断方法可以很好实现. awk 'BEGIN{ ...

  6. 第一个c语言项目

    怎么写代码呢 工具:编译器 市面上编译器主要有:clang,gcc,win-tc,msvc,turbo c等 怎么写呢 1.创建一个项目(项目名字不能以中文文字命名) 2.创建一个文件(项目名字不能以 ...

  7. 2022-05-03:Alice 和 Bob 再次设计了一款新的石子游戏。现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值。给你一个整数数组 stones ,其中 stones[i] 是第

    2022-05-03:Alice 和 Bob 再次设计了一款新的石子游戏.现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值.给你一个整数数组 stones ,其中 stones[i] 是第 ...

  8. 园子的商业化努力-AI人才服务:招募AI导师

    各位园子的小伙伴: 感谢大家对园子的支持,园子差不多接近20年的历程,一直是最低配模式生存和发展,感谢大家对于前段时间的困局给予了商业化的各种建议!在大家的鼓励与支持之下,园子的商业化努力正在以更快的 ...

  9. 汉字编码新尝试:字理组字编码方案v0.0

    ↑对,这就是正片↑(同步自敝知乎专栏,不定期更新) 高清(确信)版:http://farter.cn/zzdm/latest.png 不用任何教程,试试对着表解码一下: 43 295 817 146 ...

  10. Kubernetes使用Harbor作为私有镜像仓库

    概述 Harbor使用了基于角色的访问控制策略,当从Harbor中拉去镜像的时候,首先要进行身份认证,认证通过后才可以拉取镜像.在命令行模式下,需要先执行docker login,登陆成功后,才可以d ...