障害時に障害が起きたアイテムのグラフをメールで送信する記事はあったのですが、トリガーなしでグラフを定期的にスマホに送信したかったのでちょっとアレンジしました。
LINEだと他人にも共有しやすいのが良いです。
参考サイト
Zabbixのアラートメールにグラフ画像を添付する
手順
前提パッケージインストール
ZabbixAPIを使用してアクセストークンを取得する際にjqでJSONを加工します。
$ sudo apt install jq
ユーザ認証用API実行
以下のコマンドを実行してZabbixのuser.login APIを実行し、アクセストークンを取得。
$ /usr/bin/curl -s -XPOST http://<ZabbixのIPアドレス>/zabbix/api_jsonrpc.php -H 'Content-Type: application/json-rpc' -d '{"jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "Adminのパスワード"}, "id": 1}' | sed -e 's/[,{}]/\n/g' -e 's/"//g' | awk -F: '/^result/{print $2}'
d99bb315eb52f632fb2edcbeb75be269
d99bb315eb52f632fb2edcbeb75be269
32文字のアクセストークンが返却されます。このアクセストークンは次以降の手順で使用します。
グラフIDの取得
送信したいグラフのIDをgraph.get APIで取得します。
$ curl -s -XPOST http://<ZabbixのIPアドレス>/zabbix/api_jsonrpc.php -H 'Content-Type: application/json-rpc' -d '{"jsonrpc":"2.0", "method":"graph.get", "id":1, "auth":"<取得したアクセストークン>", "params": {}}' | jq -r '.result[] | [.graphid, .name] | @csv'
(中略)
"730","CPU utilization"
"731","Memory utilization"
"736","CPU utilization"
"737","Memory utilization"
"775","CPU utilization"
"788","Zabbix preprocessing queue"
"789","Zabbix preprocessing queue"
"790","気温・湿度(ペット部屋)"
全てのグラフIDとグラフ名が表示されるので、送信するグラフのグラフIDをここで特定します。(中略)
"730","CPU utilization"
"731","Memory utilization"
"736","CPU utilization"
"737","Memory utilization"
"775","CPU utilization"
"788","Zabbix preprocessing queue"
"789","Zabbix preprocessing queue"
"790","気温・湿度(ペット部屋)"
今回はペット部屋の気温・湿度を送信するのでグラフIDは790となります。
グラフ取得
グラフIDを指定してグラフを画像で取得します。
periodに取得したい範囲の時間を秒で指定します。今回は12時間分を出したいので43200にしてます。
periodに取得したい範囲の時間を秒で指定します。今回は12時間分を出したいので43200にしてます。
$ curl -s -XGET -b zbx_sessionid=<取得したアクセストークン> "http://<ZabbixのIPアドレス>/zabbix/chart2.php?graphid=790&period=43200" >/var/tmp/hoge.png
/var/tmpにpngファイルとしてグラフがダウンロードされていると思います。
LINEでグラフを送信
LINE Notifyでトークン取得
下記のサイトに自分のLINE IDでログインします。LINE Notify
画面右上の自分の名前のメニューからマイページを開き、トークンを発行するをクリック。
適当にトークン名を入力、送信するトークルームは「1:1でLINE Notifyから通知を受け取る」にするか適宜トークルームを選択し発行するをクリック。
トークンが発行されるのでコピーする。
再表示できなくなるので、忘れないようにメモするなどしてください。
LINE Notifyで画像を送信
先ほど指定したトークルームへ画像を送信。
$ /usr/bin/curl -s -XPOST https://notify-api.line.me/api/notify -H 'Authorization: Bearer <LINE Notifyで発行したトークン>' -F 'message=グラフ送信テスト' -F 'imageFile=@/var/tmp/hoge.png'
こんな感じで画像がトークルームに送信されます。
あとは一連の流れをスクリプトで定期的に実行すれば目的達成となります。
既にシェルスクリプトで実装したんですが、Slackへの通知機能も追加してから載せようと思います。
0 件のコメント :
コメントを投稿