欢迎访问生活随笔!

生活随笔

您现在的位置是:首页 > 生活科学 > 经验

经验

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

发布时间:2022-09-27经验 小博士
感谢本文作者胡璞玉投稿!欢迎更多用户分享踩过的坑的使用经验!胡璞玉|Zabbix手册官方译者Zabbix5.0、6.0指导手册官方译者系统架构师,长期从事IT工作,目前关注医疗信息化、医疗大数据方向在

感谢本文作者胡璞玉投稿!欢迎更多用户分享踩过的坑的使用经验!胡璞玉|Zabbix手册官方译者Zabbix5.0、6.0指导手册官方译者系统架构师,长期从事IT工作,目前关注医疗信息化、医疗大数据方向在使用Zabbix监控中,发现最新值中有些项对

感谢本文作者胡璞玉投稿!欢迎更多用户分享踩过的坑的使用经验!

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

胡璞玉 | Zabbix手册官方译者

Zabbix 5.0、6.0指导手册官方译者

系统架构师,长期从事IT工作,目前关注医疗信息化、医疗大数据方向

在使用Zabbix监控中,发现最新值中有些项对应的值为乱码,其他字段显示正常。检查对应的值,发现应该是中文被显示为乱码。

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

通常在监控一些网络设备时常出现,尤其是提供Web界面配置时,在描述字段使用中文,导致乱码,如端口描述、设备描述等:

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

对于这种情况,可以有以下几种处理方法。

更换为英文

通常Zabbix是支持中文的,包括中文界面,使用UTF-8的字符监控内容也可以正常显示。出现乱码一般是无法识别字符集导致的。常见中文编码有GB2312、GBK、GB18030等,容易产生乱码。英文26个字母在不同的字符集中保存一致,一般不会产生乱码。对于可以修改的目标监控项的值,最简单的策略是换成英文或者拼音。对于一些有终端界面的网络设备,即使一些描述可以在Web界面配置成中文,也不建议使用。后续在终端操作,较大概率会出现乱码无法显示的情况。

使用值映射

如果无法调整或必须使用中文,建议先进行观察,如果文字较少且固定,可采用映射替换的办法。在Zabix中设立相应的中文值映射,主要步骤如下:

在“模版”或“主机”下,选择“值映射”,创建对应项后,对话框保存后在“模版”或“主机”下保存。

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

再次打开出现乱码的监控项,在“值映射”栏选择对应的映射

进行测试

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

使用值映射,需要预先配置。优点是简单好用。如果发生变化了修改或值超出映射范围,那只能进行调整的映射信息。涉及的监控项目较多或者值变化较大,会产生大量工作,且容易出错。

使用预处理

对于变化较大或其他复杂场景,可使用预处理方式。原理是将获取到的字符串逐项使用脚本,按照规则替换成文本。以某医院的无线网络监控为例,在AC中对120个AP采用中文命名,命名规则为”XXX单位+ 数字+无线AP”,需要将AC及管理的AP接入基于zabbix搭建的全院监控平台。

如何处理Zabbix监控值中文字符乱码情况?3点思路分享

Zabbix使用SNMP方式监控AC,得到管理的AP名数据为类似 “ED CC F3 …” 的字符串,十六进制每个字符都认识,但连在一起却无法识别,相当于乱码。经检查发现编码中汉字使用Unicode,两个字节可以表示为一个汉字,获取到的是两个字节用十六进制字符显示。由于涉及AP较多,且名字中有变量,使用值映射配置就较麻烦,宜采用预处理方式,加载js代码。本例中直接替换掉中文(固定名称作用不大,当然也可以直接添加),取出英文、数字后组合输出,参考js如下:

var out=''value = value.replace(/\s+/g,'').replace(/[\r\n]/g,'')for (var i = 0; i < value.length / 2; i++) { if (value[2*i] < '8' ){ var tmp = '0x' + value[2*i] + value[2*i + 1] out += String.fromCharCode(tmp); } else { // 忽略非ascii码字符 i +=1 } }return out

此外,可以使用js进行编码转化,由于常用中文字符较多,对应的js代码体积大,运行消耗资源较多。对于监控,不建议在Zabbix的预处理中使用复杂的js脚本,可以使用第三方工具进行转码后再由Zabbix监控。

Tags: