有几种方法可以通过Zabbix收集自定义指标,例如通过UserparametersZabbix sender协议等,虽然以上方法都可以用于简单指标数据的收集,但要创建更全面完善的方法(数据收集,持久连接等)并将其与Zabbix连接起来可能并不是那么简单。

使用HTTP agent监控项,Zabbix可以直接连接到RESTful Web services,但预处理新增的“错误检查”和“失败自定义”功能更加强大,可以更进一步处理获取到的数据。这允许我们创建可由Zabbix直接使用的Web services。 为了演示我们将创建一个非常简单的MySQL监控Web services,返回活动连接数和最大连接数。

Web service

Web service将接受包含MySQL数据库连接信息的POST请求,并在内部缓存中注册MySQL服务器。 该服务将定期连接到已注册的服务器并缓存所需的指标。 然后,它将使用缓存的指标数据,空数据(如果指标尚未缓存)或错误进行响应。

Protocol

POST请求将包含以下JSON数据:

{
  "username": "<mysql user name>",
  "password": "<mysql password>",
  "address": "<mysql server address>"
}

响应将采用以下格式:

{
  "value": {
    "connections": <number of active connections>,
    "max_connections": <number of maximum connections>
  },
  "error": "<error message>"
}

根据缓存状态,可能缺少值和错误字段:

  • 仅当存在缓存的指标数据时才返回值(第一个请求将永远不会返回值,因为metric缓存仅在请求之后开始)
  • 如果指标数据缓存失败,则返回错误

Zabbix配置

要获取MySQL指标,您需要创建一个HTTP代理项“MySQL stats”,其URL指向Web服务和JSON请求正文

:

接下来,我们必须将信息类型更改为字符或文本。 由于数据将被解析,保留原始数据的历史记录没有意义,因此将其历史存储周期设置为0

这将连接到我们的Web service并检索响应,现在,通过预处理,我们将配置Zabbix来解析返回的内容:

检查服务是否返回错误 这是通过添加“在JSON中检查错误”预处理步骤来完成的

获取返回值 这是通过添加“JSON路径”预处理步骤来完成的。 但是,由于该值是可选的,我们必须启用“失败自定义”并将其设置为“丢弃值”。 现在,将忽略没有值的响应。

或者,如果我们只对指标数据变化感兴趣,我们可以添加“丢弃未更改”预处理步骤。 这将通过忽略与最后一个值相同的值来节省一些处理时间和数据库空间。

这将正确处理我们的Web service“错误”和“无数据”的响应,并在成功的情况下返回JSON格式的指标。现在我们必须从中解析出单个指标。

为了实现这一点,您需要创建依赖项“MySQL最大连接数”并将“MySQL stats”项设置为主监控项。 使用$ .max_connections作为参数添加“JSON路径”预处理步骤。对于‘MySQL active connections’项,只将JSON路径更改为“$ .connections”