前回は SQLite を使ってやってみたけど、今回は Zabbix にそのまま送る方法。
PING コマンドの出力の時間部分だけを使う。
$ ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.094 ms :
Zabbix 側には予め Zabbix トラッパーでアイテムを作成しておく。今回は「ping_now」という名前。
grep
してすぐ出力したいので stdbuf
を噛ませる。
#!/bin/bash PING_HOST=192.168.1.1 PING_INTERVAL=5 ZABBIX_SENDER_HOST=raspberrypi ZABBIX_SENDER_KEY=ping_now ZABBIX_SERVER_HOST=192.168.1.200 ZABBIX_SERVER_PORT=10051 ping -i${PING_INTERVAL} ${PING_HOST} | stdbuf -oL grep -E -o 'time=[0-9.]+' | while read do eval ${REPLY} test -n "${time}" || continue nc ${ZABBIX_SERVER_HOST} ${ZABBIX_SERVER_PORT} <<! { "request": "sender data" , "data": [ { "host": "${ZABBIX_SENDER_HOST}" , "key": "${ZABBIX_SENDER_KEY}" , "value": "${time}" } ] } ! done
set -x
で見るとこんな感じのが続く。
+ eval time=116 ++ time=116 + test -n 116 + nc 192.168.1.200 10051 ZBXDZ{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000077"}+ read
最小/平均/最大の計算は Zabbix 側でやってくれるので楽ちん。