如何使用密钥 {#PROCNAME} 将 bash 输出转换为 JSON?

Ant*_*sev 1 bash ps python json zabbix

我尝试通过内存获取前 5 个进程的 JSON。

我想将此 JSON 发送到 Zabbix 并按内存绘制前 5 个进程。

我通过命令通过内存获得前 5 个进程:

ps axho comm --sort -rss | head -5
node
mongod
kubelet
dockerd
systemd-journal
Run Code Online (Sandbox Code Playgroud)

如何使用密钥 {#PROCNAME} 将 bash 输出转换为 JSON 以获得此结构:

{
  "data": [
    {
      "{#PROCNAME}": "node"
    },
    {
      "{#PROCNAME}": "mongod"
    },
    {
      "{#PROCNAME}": "kubelet"
    },
    {
      "{#PROCNAME}": "dockerd"
    },
    {
      "{#PROCNAME}": "systemd-journal"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

https://www.zabbix.com/documentation/current/manual/config/macros/lld_macros

低级发现 (LLD) 函数中使用了一种宏:

{#MACRO} 
Run Code Online (Sandbox Code Playgroud)

oli*_*liv 7

如果您jq具有该inputs功能,并且假设{#PROCNAME}只是一个字符串,则可以使用以下内容:

ps axho comm --sort -rss | head -5 | jq -Rn '{data: [inputs|{"#PROCNAME":.}]}'
Run Code Online (Sandbox Code Playgroud)

这些inputs函数可以jq读取所有输入字符串。剩下的就是装饰以获得想要的格式。

该选项-R获取原始字符串作为输入。该选项-n通过jq输入提供null输入。这样inputs可以一次获取所有字符串。