はじめに
早朝に後ろから「エクスキューズミー」と話しかけられて振り返ったらどっからどうみても日本人、そして質問もなにもされずそのまま歩きさっていかれたということが昔あったのを思い出しました。話は変わりまして自動的に設定をバックアップしておきたいということで、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、動かせるまでに時間かかったんで制覇した感が半端ないです。こちらを参考にしました。
以上