如何为 zabbix 4 正确创建我自己的自定义项和触发器

how to properly create my own custom items and triggers for zabbix 4

:)

我在 Ubuntu 19.10.

上安装了 Zabbix 4.4.1

我配置了一个 postgresql 插件并且工作正常,所以它会检查我的数据库指标。

我有一个 table,我想检查最后插入的行的时间戳列。列名是 insert_time.

如果最后插入的行的插入时间超过 5 分钟就会出现产品警告,超过 10 分钟就会出现产品错误。

我是 zabbix 的新手..到目前为止我所做的只是谷歌搜索,不确定是否是正确的方法..这可能不是因为它不工作:)

好的,所以我做的第一件事就是在 /etc/zabbix/mytoolsget-last-insert-time.sh.

创建了一个 bash 文件

我执行查询并使用以下模板将输出发送到 zabbix_sender:

#!/bin/bash
PGPASSWORD=<PASSWORD> -U <USER> <DB> -t -c "<RELEVANT QUERY>" | awk '{=};1' | tr -d "\n" | xargs -I {} /usr/bin/zabbix_sender -z $ZABBIXSERVER -p $ZABBIXPORT  -s $ZABBIXAGENT -k "my.pgsql.cdr.last_insert_time" -o {}

有没有办法测试这一步?我怎样才能确保 zabbix_sender 收到该信息?有没有某种.. zabbix_sender_sniffer 之类的? :)

下一步.. 我在 /etc/zabbix/zabbix_agentd.d 创建了一个名为 get-last-insert-time.conf 的配置文件,模板如下:

UserParameter=my_pgsql_cdr_last_insert_time,/etc/zabbix/mytools/get-last-insert-time.sh;echo $?

这里的key是my_pgsql_cdr_last_insert_time而zabbix_sender中的key是my.pgsql.cdr.last_insert_time。据我了解,这应该是两个不同的键。

为什么?!

然后我创建了一个模板并将其附加到相关主机,并为其创建了 2 个项目:

  1. 用于插入时间的项目,键为 my.pgsql.cdr.last_insert_time,类型为 Zabbix Trapper
  2. 一个 Zabbix Agent 项,键为 my_pgsql_cdr_last_insert_time 信息类型:文本。

是时间戳的信息类型吗?

现在 Overview -> latest data 我明白了:

CDR last insert time 无数据 和 Run my database trappers insert time 那是...文本被禁用?它是灰色的..而且也没有数据。

所以在我开始创建警报之前。我做错了什么?

如能提供有关此问题的任何信息,我们将不胜感激。

更新

感谢 Jan Garaj 提供的宝贵信息。 我原以为创建这样的触发器应该比我在 google 上发现的更容易,很高兴看到我是正确的。

我将我的 bash 脚本编辑为自纪元以来的 return 秒,因为它来自 postgresql,它 return 是浮动的,所以我将项目配置为浮动。我确实在 latest data 中看到这些项目收到了正确的值。

我创建了触发器,我确保警告触发器取决于关键触发器,因此它们不会同时出现。

例如我创建了这个触发器 {cdrs:pgsql.cdr.last_insert_time.fuzzytime(300)}=0 所以如果最后插入时间大于 5 分钟 return 一个严重错误。问题是它 return 是一个严重错误..总是!即使它不应该。我找不到调试它的方法。所以除了实际让触发器正常工作之外,其他一切都配置得很好。

有什么想法吗?

更新 2

当我将脚本配置为 return 时间戳时,我将其更改为不同的时区,而不是按原样使用,这实际上是将数据与当前时间 + 未来 2 小时进行比较:)

我在查看最新数据、检查时间戳并将其转换为实际时间时发现了这一点。所以现在一切正常,非常感谢!

它看起来很复杂,因为您将发送者与代理方法混合在一起。更简单的方法 - 仅限代理:

UserParameter=pgsql.cdr.last_insert_time,/etc/zabbix/mytools/get-last-insert-time.sh

Script /etc/zabbix/mytools/get-last-insert-time.sh returns 仅最后插入 Unix 时间戳,例如 1574111464(没有换行且不要在脚本中使用 zabbix_sender)。请记住,zabbix 代理通常使用 zabbix 用户,因此您需要配置适当的脚本(exec)权限,最终配置环境变量。

使用来自 Zabbix 服务器的 zabbix-get 进行测试,例如:

zabbix_get -s <HOST IP> -p 10050 -k "pgsql.cdr.last_insert_time"

对于代理端的任何问题:提高日志代理级别并观察代理日志

当您对代理部分进行排序时,然后使用项目键 pgsql.cdr.last_insert_timeNumeric (unsigned) 类型创建模板。触发器可以使用fuzzytime(60) function.