:)
我在Ubuntu 19.10上安装了Zabbix 4.4.1。
我配置了一个postgresql插件,并且可以正常工作,因此它可以检查我的数据库指标。
我有一个表,我想检查最后插入行的时间戳列。列名称为insert_time
。
如果最后插入的行的插入时间超过5分钟(产品警告)和10分钟(产品错误)。
我是zabbix的新手。.到目前为止,我所做的只是谷歌搜索,不确定是否要这样做。.可能不是因为它不起作用:)
好吧,我要做的第一件事是在/etc/zabbix/mytools
,get-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个项目:
my.pgsql.cdr.last_insert_time
和类型Zabbix Trapper
的插入时间项目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小时进行了比较:)
我发现这是在获取最新数据时,检查了时间戳并将其转换为实际时间。所以现在一切正常,非常感谢!
答案 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_time
和Numeric (unsigned)
类型创建模板。触发器可以使用fuzzytime(60)
function。