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

时间:2019-11-14 17:38:07

标签: postgresql zabbix

:)

我在Ubuntu 19.10上安装了Zabbix 4.4.1。

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

我有一个表,我想检查最后插入行的时间戳列。列名称为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=$1};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 $?

此处的密钥为my_pgsql_cdr_last_insert_time,而zabbix_sender中的密钥为my.pgsql.cdr.last_insert_time。据我了解,这些应该是两个不同的键。

为什么?!

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

  1. 使用键my.pgsql.cdr.last_insert_time和类型Zabbix Trapper的插入时间项目
  2. 带有键Zabbix Agent的{​​{1}}项信息类型:文本。

是时间戳信息的类型吗?

现在在my_pgsql_cdr_last_insert_time-> Overview上看到,

latest data无数据 和CDR last insert time即...文本被禁用?它是灰色的..也没有数据。

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

有关此问题的任何信息将不胜感激。

更新

感谢Jan Garaj提供的宝贵信息。 我希望创建这样的触发器应该比我在google上找到的触发器要容易得多,很高兴看到我是正确的。

我编辑我的bash脚本以返回自纪元以来的秒数,因为它来自PostgreSQL,它返回float,所以我将项目配置为float。我确实在Run my database trappers insert time中看到这些项目收到了正确的值。

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

例如,我创建了此触发器latest data,因此,如果最后一次插入时间大于5分钟,则返回严重错误。问题是它返回严重错误。即使不应该这样做。我找不到调试方法。因此,除了实际使触发器正常工作以外,其他所有配置都很好。

有什么想法吗?

更新2

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

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

1 个答案:

答案 0 :(得分:1)

它看起来过于复杂,因为您正在将发件人与代理方法混合在一起。更简单的方法-仅限代理:

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

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

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

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

对于代理方面的任何问题:提高日志代理级别并查看代理日志

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