Zabbix APIと向き合ってみたwwww

スポンサーリンク
広告




目次

はじめに

Zabbix APIと頑張って向き合いました。

Zabbix APIとは

Zabbix APIはZabbixの管理画面を使わないでも、Zabbixのデータを取得したり、設定をしたり・・・ができます。
奥が深いお。
シェルスクリプトで頑張ります。

Zabbix APIの操作

  1. Zabbixの管理画面でAPIを操作するユーザを作成
  2. アクセストークンの取得
  3. Zabbixを操作する文の発行

一発でAPIを操作するわけではなく、一旦トークンを取得する必要があります。

 2016-09-29 20.01.50

※事前準備

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/sh
USERNAME="ユーザ名"
PASSWORD="パスワード"
URL="http://ドメイン/api_jsonrpc.php"
ARGUMENT_COUNT="${#}"
ARG_STATUS="${2}"
HOSTNAME="${1}"
#Check argument error
function is_exists_argument_error(){
  if [ ${ARGUMENT_COUNT} != 2 ]; then
    echo "Error: Argument is not Enough."
    exit;
  fi
  if [ ${ARG_STATUS} = "ON" ]; then
    STATUS=0
  elif [ ${ARG_STATUS} = "OFF" ]; then
    STATUS=1
  else
    echo "Error:Invalid status."
    exit;
  fi
}
is_exists_argument_error ${ARG_STATUS}
#GET Token
TOKEN=`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 hostid
HOSTID=`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}" = "" ]; then
  echo "Error:${HOSTNAME} is not exists."
  exit;
fi
#change monitoring status
CHANGE=`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系の参考:

https://orebibou.com/2016/05/jq%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B917%E5%80%8B/#2

改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus)

応援
応援ポチっとよろしくです。 ブログランキング・にほんブログ村へ
スポンサーリンク
広告




広告




★役に立った!と思ったらシェアをお願いします。★

  • このエントリーをはてなブックマークに追加

★フォローはこちら★

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です