Bash
如何使用鍵 {#PROCNAME} 將 bash 輸出轉換為 JSON?
我嘗試通過記憶體獲取前 5 個程序的 JSON。
我想將此 JSON 發送到 Zabbix 並通過記憶體繪製前 5 個程序。
我通過命令通過記憶體獲得前 5 個程序:
ps axho comm --sort -rss | head -5 node mongod kubelet dockerd systemd-journal
如何使用鍵 {#PROCNAME} 將 bash 輸出轉換為 JSON 以獲得此結構:
{ "data": [ { "{#PROCNAME}": "node" }, { "{#PROCNAME}": "mongod" }, { "{#PROCNAME}": "kubelet" }, { "{#PROCNAME}": "dockerd" }, { "{#PROCNAME}": "systemd-journal" } ] }
https://www.zabbix.com/documentation/current/manual/config/macros/lld_macros
低級發現 (LLD) 函式中使用了一種宏:
{#MACRO}
如果您
jq
具有該inputs
功能,並且假設{#PROCNAME}
只是一個字元串,則可以使用以下內容:ps axho comm --sort -rss | head -5 | jq -Rn '{data: [inputs|{"#PROCNAME":.}]}'
這些
inputs
函式可以jq
讀取所有輸入字元串。剩下的就是裝飾以獲得想要的格式。該選項
-R
將原始字元串作為輸入。該選項-n
將jq
輸入與null
條目一起提供。這樣inputs
可以一次獲得所有字元串。
實際上,您可以使用標準的 unix cli 來實現它:
bash $ echo { \"data\": [ $(ps axho comm --sort -rss | head -5 | xargs -L1 -I% echo { \"{#PROCNAME}\": \"%\" } | paste -s -d, -) ] } { "data": [ { "{#PROCNAME}": "node" },{ "{#PROCNAME}": "mongod" },{ "{#PROCNAME}": "kubelet" },{ "{#PROCNAME}": "dockerd" },{ "{#PROCNAME}": "systemd-journal" } ] } bash $
- 結果輸出是一個有效的 JSON。