【问题标题】:Custom Zabbix LLD Data - Formatting &| Accessing自定义 Zabbix LLD 数据 - 格式化和|访问
【发布时间】:2021-02-11 22:18:42
【问题描述】:

目的:

在具有多个版本和每个版本多个池的服务器上收集 PHP-FPM 指标

配置文件:

/etc/zabbix/zabbix_agent2.d/userparameter_php_fpm.conf

配置文件内容:

UserParameter=phpstuff,/usr/local/bin/php /php-status/getphpstuff.php --full

来自 zabbix 服务器的示例命令:

zabbix_get -s myserv.com -k phpstuff

命令的 JSON 输出:

    "data": [
        {
            "{#VERSION}": "7.2.34",
            "{#PID}": "19495",
            "{#CPUPCT}": "0.0",
            "{#MEMPCT}": "0.0",
            "{#POOLNAMES}": [
                "nobody",
                "one",
                "two"
            ],
            "{#POOLCOUNT}": 3,
            "{#CHILDPROCCOUNT}": 10,
            "{#CHILDCPUTOTAL}": "45.0",
            ... 
        },
        {
            "{#VERSION}": "7.3.25",
            "{#PID}": "19368",
            "{#CPUPCT}": "0.0",
            "{#MEMPCT}": "0.0",
            "{#POOLNAMES}": [
                "nobody73",
                "fifty"
            ],
            "{#POOLCOUNT}": 2,
            "{#CHILDPROCCOUNT}": 0,
            "{#CHILDCPUTOTAL}": 0,
            ...
        }
    ]
}

目标:

创建发现规则,为每个版本制作 ? 应用程序,该应用程序将为该版本下的每个统计数据提供项目(并设置图表和触发器等)

问题:

我可以创建初始发现规则,并让它为版本制作项目/应用程序:

Name: PHPStuff
Type: Zabbix Agent
Key: phpstuff

使用原型(或类似的东西):

Name: PHP-FPM Version {#VERSION}
Type: Zabbix Agent
Key: phpfpm.info.masterprocesslist[{#VERSION}]
Type: Text
App Prototype: PHP {#VERSION}

但我无法获得任何其他返回的信息。

我需要重新格式化输出吗?还是我缺少一些基本的东西?

Zabxix 5.2b1 服务器 + Zabbix 代理 2

【问题讨论】:

  • 尝试不使用"data": ,就像一个数组[ { "{#STUFF}": "value" } ]。例如,参见zabbix_agent2 -t vfs.fs.discovery 的输出 - 那里没有“数据:”,只有数组。您可以选择发现规则并手动触发它——它会显示错误还是什么?
  • LLD 只是一个列表:在您的情况下,是一个 PID 列表。在该列表之上,您构建了许多项目原型,您可以在其中使用另一个 UserParameter 读取数据。 data 部分是正确的,它只是以前/已弃用的 LLD 格式:仍然有效。
  • TY,删除了“数据”,它仍然有效。也许我没有正确理解 zabbix - 但我似乎无法在任何类型的“项目原型”中引用传递的键数组的其余部分。所有内置函数都调用其他带参数的函数。我可以重构来做到这一点,似乎一次提供更新所需的所有数据会更容易维护。

标签: zabbix


【解决方案1】:

找到了解决方案(来自 cmets 对问题的输入帮助很大),在这里发布希望能帮助其他人解决原来只是对 Zabbix 如何摄取数据的基本误解(不是作为一个巨大的块JSON,顺便说一句)。该文档令人沮丧,因为它通常只处理内置的内容以及如何为自定义数据构建数据返回,而我从未真正了解核心概念(尽管它们现在有意义)

  1. 发现规则

认为这基本上只是将一组独特的项目用作获取其他数据的键(至少在我提出的问题的用例中)。因此,如果发现规则返回以下内容:

例如

[
    {
        "{#PHPVERSION}": "7.2.34"
    },
    {
        "{#PHPVERSION}": "7.3.25"
    }
]

然后我可以将这些字段 ({#PHPVERSION}) 用作一种内置宏以在原型中使用。

如果我现在理解正确,您可以使用更多信息扩展此初始数据列表,以获得原型所需的数据:

[
    {
        "{#PHPVERSION}": "7.2.34",
        "{#PHPAWESOME}": "yes"
    },
    {
        "{#PHPVERSION}": "7.3.25",
        "{#PHPAWESOME}": "no"
    }
]

在任何情况下,在我编写的将数据传回 Zabbix 的 PHP 脚本中,我重新编写了输出的位,因此我可以在配置文件中使用 UserParameter(s) 来提取我需要的特定数据 - 例如。

UserParameter=php.info.versions,/usr/local/bin/php /phpinfoscript/phpinfo.php --versions

以 JSON 格式返回上面的列表,哪些数据将用于...

  1. 原型

原型键必须是唯一的,因为我不能一次传回所有数据,所以我能够对每条数据进行唯一的调用。我现在拥有的示例原型:

Name: PHP {#PHPVERSION} - PID
Type: Zabbix Agent
Key: php.info.processdata[{#PHPVERSION},"pid"]
...
Application Prototypes: PHP {#PHPVERSION}  // so all the data gets grouped correctly

用户参数看起来像:

UserParameter=php.info.processdata[*],/usr/local/bin/php /phpinfoscript/phpinfo.php --processs=$1 --getdata=$2

数组中的数据在末尾的 Key 中传递给位置参数 $1 和 $2。

对每条数据重复,对每条数据使用唯一的键。

值得注意的是,发现规则可能会对给它的每组数据进行一次迭代,所以如果我需要在密钥中使用 {#PHPAWESOME} 来获取其他数据或命名事物,那也应该可以工作.

结果工作正是我想要的 - 老实说,如果你可以传递一个数据块来解析它会很好 - 但它就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多