4 返回值的编码

Zabbix server 要求每个返回的文本值都是UTF8编码,这涉及每一种类型的检查: zabbix agent、ssh、telnet等等。

不同的监视系统/设备和检查的返回值中可能有非ascii字符。对于这种情况,几乎所有的zabbix keys都包含一个额外的item key参数- <encoding> 。 这个关键参数是可选的,但是如果返回的值不是UTF8编码,并且它包含非ascii字符,则应该指定它。否则,结果可能是出乎意料的和不可预测的。

在这种情况下,对不同数据库后台的行为描述如下。

MySQL

如果某个值在非 UTF8 编码中包含非 ASCII 字符,则数据库在存储该值时会丢弃该字符及其后续内容。不会向 zabbix_server.log 写入任何警告消息。
这至少适用于 MySQL 5.1.61 版本。

PostgreSQL

如果某个值在非 UTF8 编码中包含非 ASCII 字符,则会导致 SQL 查询失败(PGRES_FATAL_ERROR:ERROR invalid byte sequence for encoding),并且数据将不会被存储。相应的警告消息将被写入 zabbix_server.log
至少与 PostgreSQL 9.1.3 版本相关。