如何为 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/mytools
、get-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 个项目:
- 用于插入时间的项目,键为
my.pgsql.cdr.last_insert_time
,类型为 Zabbix Trapper
- 一个
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_time
和 Numeric (unsigned)
类型创建模板。触发器可以使用fuzzytime(60)
function.
:)
我在 Ubuntu 19.10.
上安装了 Zabbix 4.4.1我配置了一个 postgresql 插件并且工作正常,所以它会检查我的数据库指标。
我有一个 table,我想检查最后插入的行的时间戳列。列名是 insert_time
.
如果最后插入的行的插入时间超过 5 分钟就会出现产品警告,超过 10 分钟就会出现产品错误。
我是 zabbix 的新手..到目前为止我所做的只是谷歌搜索,不确定是否是正确的方法..这可能不是因为它不工作:)
好的,所以我做的第一件事就是在 /etc/zabbix/mytools
、get-last-insert-time.sh
.
我执行查询并使用以下模板将输出发送到 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 个项目:
- 用于插入时间的项目,键为
my.pgsql.cdr.last_insert_time
,类型为Zabbix Trapper
- 一个
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_time
和 Numeric (unsigned)
类型创建模板。触发器可以使用fuzzytime(60)
function.