【问题标题】:how to properly create my own custom items and triggers for zabbix 4如何为 zabbix 4 正确创建我自己的自定义项和触发器
【发布时间】:2019-11-14 17:38:07
【问题描述】:

:)

我在 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 之类的? :)

next.. 我在 /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. 带有my_pgsql_cdr_last_insert_time 键的Zabbix Agent 项目信息类型:文本。

那是时间戳的信息类型吗?

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

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

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

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

更新

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

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

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

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

有什么想法吗?

更新 2

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

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

【问题讨论】:

    标签: postgresql zabbix


    【解决方案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 服务器的zabbix-get 对其进行测试,例如:

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

    对于代理端的任何问题:增加日志代理级别并查看代理日志

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      相关资源
      最近更新 更多