ab’s blog

インフラの呟きです。

Zabbix APIでホストの設定をエクスポート(XML)

hahahahahaha

はじめに

早朝に後ろから「エクスキューズミー」と話しかけられて振り返ったらどっからどうみても日本人、そして質問もなにもされずそのまま歩きさっていかれたということが昔あったのを思い出しました。話は変わりまして自動的に設定をバックアップしておきたいということで、hostの設定をXMLでエクスポートするためのシェルを作成します。(このshellはREHEL7とzabbix4.0で動作検証しているので、他の環境だと動かないかもです)

設定方法

※このシェルをRHEL7で動かすにはjson形式のデータを加工するための「jq」のバイナリをダウンロードしてシェルと同じ場所に配置しておくかEPELレポジトリからインストールする必要があります。(RHEL8だとjqが標準で入っているのでインストールする必要なし、入ってなくてもRHEL標準リポジトリからyumでインストール可能)

xmlexport.sh
#!/bin/bash
#################################################################
TMPFILE=tmp.tmp
header='Content-Type:application/json-rpc'
apiurl='http://localhost/zabbix/api_jsonrpc.php'
RPC='"jsonrpc":"2.0"'

# ログイン
METHOD='"method":"user.login"'
PARAMS='"params":{"user": "APIuser","password": "xxxxx"}'
ID='"id": 1'
AUTH='"auth": null'
json="{$RPC,$METHOD,$PARAMS,$ID,$AUTH}"

curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} > $TMPFILE
zbxauth=$(jq -r .result < $TMPFILE)



# host一覧取得
METHOD='"method": "host.get"'
PARAMS='"params": {"output": ["hostid"]}'
ID='"id": 2'
AUTH='"auth": "'$zbxauth'"'
json="{$RPC,$METHOD,$PARAMS,$ID,$AUTH}"

curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} > $TMPFILE

HOSTID=$(cat $TMPFILE | jq .result[].hostid | sed -z s/\\n/,/g | sed s/,$//g)



# xmlエクスポート
METHOD='"method": "configuration.export"'
PARAMS='"params": {"options": {"hosts":['$HOSTID']},"format": "xml"}'
ID='"id": 3'
AUTH='"auth": "'$zbxauth'"'
json="{$RPC,$METHOD,$PARAMS,$ID,$AUTH}"

curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} > $TMPFILE
EXPORTXML=$(jq -r .result < $TMPFILE)

echo $EXPORTXML | xmllint --format - > hosts.xml



# ログアウト
METHOD='"method":"user.logout"'
PARAMS='"params":[]'
ID='"id": 4'
AUTH='"auth": "'$zbxauth'"'
json="{$RPC,$METHOD,$PARAMS,$ID,$AUTH}"

curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} > $TMPFILE

exit 0

その他

少しパラメータの内容を変えればhost以外にもテンプレートやマップのエクスポートもできるようになります。

長年使いたいなと思っていたZABBIXのAPI、動かせるまでに時間かかったんで制覇した感が半端ないです。こちらを参考にしました。

以上