目次
はじめに
Zabbix APIと頑張って向き合いました。
Zabbix APIとは
Zabbix APIはZabbixの管理画面を使わないでも、Zabbixのデータを取得したり、設定をしたり・・・ができます。
奥が深いお。
シェルスクリプトで頑張ります。
Zabbix APIの操作
- Zabbixの管理画面でAPIを操作するユーザを作成
- アクセストークンの取得
- Zabbixを操作する文の発行
一発でAPIを操作するわけではなく、一旦トークンを取得する必要があります。
※事前準備
Zabbixサーバ対して、リクエストを出すからこのコマンドを実行するIPアドレスからのリクエストを受け付けられるようにする必要がある。
具体的には、80番ポートを開けておく必要がある。Zabbixサーバのセキュリティグループを確認すること。(HTTPSなら443)Zabbixサーバから実行する場合も、自分自身を指定してポート開けておかなくちゃいけないみたい。
アクセストークンの取得
curl -X -sS GET -H "Content-Type:application/json-rpc" -d '{"auth":null, "method":"user.login", "id":1, "params":{"user":"ユーザ名", "password":"パスワード"}, "jsonrpc":"2.0"}' http://ドメイン/api_jsonrpc.php
※オプションの説明
curl -X メソッドGETの指定
-H ヘッダ情報の追加
-s -S 標準エラー出力だけを出して、進行状況は出さない
スクリプトにするときは以下のようにjqコマンドを使ってトークンだけ出力するようにすると良いと思う。
curl -X -sS GET -H "Content-Type:application/json-rpc" -d '{"auth":null, "method":"user.login", "id":1, "params":{"user":"ユーザ名", "password":"パスワード"}, "jsonrpc":"2.0"}' http://ドメイン/api_jsonrpc.php | jq -r '.result'`
ホスト一覧を取得
curl -sS -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"トークン", "method":"host.get", "id":1, "params":{"output":"extend","selectInterfaces":"extend"}, "jsonrpc":"2.0"}' http://ドメイン/api_jsonrpc.php | jq '.'
jqコマンドで見やすく整形
ホスト名からhostidを取得する
curl -sS -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"トークン", "method":"host.get", "id":1, "params":{"output":"extend"}, "jsonrpc":"2.0"}' http://ドメイン/api_jsonrpc.php | jq -r '.result[] | select(.name=="ホスト名") | .hostid'
ホストを無効化・有効化する
host.updateでhostの情報を変更できるっぽい。
ホストid 1は無効化, 0で有効
curl -sS -XGET -H "Content-Type:application/json-rpc" -d '{"auth":"トークン","id":1,"params":{"hostid":'ホスト名',"status":1},"method":"host.update","jsonrpc":"2.0"}' http://ドメイン/api_jsonrpc.php
スクリプト
TOKEN発行
TOKENを発行するスクリプト。ただそれだけ。テストでコマンドを発行したい時に使う。そのままコマンドを発行するだけだとjson形式で出力されるので選択してコピーが面倒なので作りました。必要なのはあきりんごだけかなあ。
#!/bin/sh
#include user information
USERNAME="ユーザ名"
PASSWORD="パスワード"
URL="http://ドメイン/api_jsonrpc.php"
#GET Token
TOKEN=`curl -X -sS GET -H "Content-Type:application/json-rpc" -d '{"auth":null, "method":"user.login", "id":1, "params":{"user":"'${USERNAME}'", "password":"'${PASSWORD}'"}, "jsonrpc":"2.0"}' ${URL} | jq -r '.result'`
echo ${TOKEN}
ホストの有効・無効切り替え
使い方:スクリプト名 ON/OFF ホスト名
ホストの有効・無効を切り替えられる引数チェック付きのスクリプトです。あきりんごのプログラミング力ではこれが限界でした。
#!/bin/shUSERNAME="ユーザ名"PASSWORD="パスワード"URL="http://ドメイン/api_jsonrpc.php"ARGUMENT_COUNT="${#}"ARG_STATUS="${2}"HOSTNAME="${1}"#Check argument errorfunction is_exists_argument_error(){if [ ${ARGUMENT_COUNT} != 2 ]; thenecho "Error: Argument is not Enough."exit;fiif [ ${ARG_STATUS} = "ON" ]; thenSTATUS=0elif [ ${ARG_STATUS} = "OFF" ]; thenSTATUS=1elseecho "Error:Invalid status."exit;fi}is_exists_argument_error ${ARG_STATUS}#GET TokenTOKEN=`curl -sS -X GET -H "Content-Type:application/json-rpc" -d '{"auth":null, "method":"user.login", "id":1, "params":{"user":"'${USERNAME}'", "password":"'${PASSWORD}'"}, "jsonrpc":"2.0"}' ${URL} | jq -r '.result'`#Get hostidHOSTID=`curl -sS -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"'${TOKEN}'", "method":"host.get", "id":1, "params":{"output":"extend", "filter": {"host":"'${HOSTNAME}'"}}, "jsonrpc":"2.0"}' ${URL}| jq -r '.result[].hostid'`if [ "${HOSTID}" = "" ]; thenecho "Error:${HOSTNAME} is not exists."exit;fi#change monitoring statusCHANGE=`curl -sS -XGET -H "Content-Type:application/json-rpc" -d '{"auth":"'${TOKEN}'","id":1,"params":{"hostid":'${HOSTID}',"status":'${STATUS}'},"method":"host.update","jsonrpc":"2.0"}' ${URL}`echo "${HOSTNAME} monitoring ${ARG_STATUS}"exit;
まとめ
Zabbixの管理画面でできることはZabbix APIで全部できそう。ほんと柔軟に色々できるので、もうちょっと触ってみる予定なんじゃ。
参考;
jq系の参考:
![]() |
改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus) |