こんにちは。サイオステクノロジー OSS サポート担当 山本 です。
先日、Zabbix について「ホストのアイテムなどの設定をテンプレートとして使いたくなったらどうすればいいのか?」というお話を伺いました。実際、現在使っている設定がいい感じだからテンプレートにしたいとか、何らかの理由で同じ監視設定を別のホストに適用したくなった、といった場合に確かにそういった機能があれば便利だと思います。
新規にあるホストと同じ設定を持つホストを 1つ2つ作成するなら、コピー元にしたい設定を持つホストの編集画面から「すべて複製」ボタンを使用して、同じ設定を持つ新しいホストを作成する方法で対応できると思います。
それでも、後々に設定の変更や追加をそれらのホストに同時に行う場合など、テンプレートにしておいたほうが便利なケースは十分に考えられます。そもそも、この方法では新規でないホストへ設定を移すことはできません。
しかし、残念ながら Zabbix4.0 ではホストの設定をそのままテンプレートに移す機能は確認できませんでした。
ところで、Zabbix のホストとテンプレートには設定を xml ファイルに出力するエクスポート機能と、xml ファイルから設定を読みこむインポート機能があります。
ホストとテンプレートの設定項目は似通っているので、この機能を使ってなんとかできそうに思えます。しかし、ホストでエクスポートした xml をテンプレート画面からインポートするだけでは、エクスポートされたホストと同じ設定を持つテンプレートは作成できません。
今回はちょっと強引にですが、ホストに設定したアイテムなどをテンプレートに移す方法を確認していきます。
■エクスポートとインポート
本題に入る前にエクスポートとインポートについて、簡単にお話しします。
先述のとおり、これらは Zabbix の設定を xml ファイルに書き出す機能と、その逆に xml ファイルを Zabbix に読み込ませて設定を登録する機能です。Zabbix の監視設定をバックアップしたり、あるいは別サーバの Zabbix に移したい場合などに使えます。
これらの機能は、「設定」の「テンプレート」「ホスト」、「監視データ」の「マップ」「スクリーン」、「管理」の「一般設定 – 値のマッピング」などで使用することができます。
使用方法はどの画面でも同じです。今回はホスト画面で確認してみます。
・エクスポート
まずはエクスポートから。
対象の一覧画面を開いたら、一覧からエクスポートしたいホスト (など) の左にあるチェックボックスにチェックをつけて、画面下部にある「エクスポート」ボタンを押下します。
そうすると、チェックを付けたホストの設定情報が xml ファイルとしてダウンロードされます。
・インポート
続いてインポートです。
画面右上にある「インポート」ボタンを押下すると、インポートするファイルと、インポート処理の「ルール」の選択画面に移ります。
どの画面から「インポート」画面に遷移したかによって、ファイルからどの要素をインポートするのかを決定する「ルール」の初期のチェック内容は変化します。(※画像は「ホスト」画面から遷移した場合)
インポートするファイルを選択し、ルールの設定ができたら画面下の「インポート」ボタンを押下すると、インポートが実行できます。
■ホストの設定をテンプレートに移す
それでは、このエクスポート/インポートを利用してホストの設定をテンプレートに移してみましょう。
!!このセクションの手順は非公式な方法です。実施する場合、先に必ず検証などを行なってください!!
・ホストの設定をエクスポートする
まずは、テンプレートとして使用したいホストをエクスポートします。手順は先述のとおり、一覧画面でテンプレート化したい設定を持つホストのチェックボックスにチェックをつけて「エクスポート」ボタンを押下するだけです。
・新規テンプレートの作成&エクスポート
テンプレート化したいホストの設定を適用するための新規テンプレートを作成します。
作成したらそのままそのテンプレートをエクスポートします。
・エクスポートした xml ファイルを編集
先の手順で出力したテンプレートの xml ファイルをベースに、ホストの xml ファイルから設定を移してインポート用のテンプレートの xml ファイルを作っていきます。
1, ホスト側の xml ファイルから <applications> ~ <macros/> をコピーして、テンプレート側の xml の <applications> ~ <macros/> を上書きします。(※アプリケーションが作成されていない場合 <applications> は出力されていないなど、出力内容には若干差異が出る可能性がありますので、適宜コピー範囲は調整してください。)
: <applications/> <items/> <discovery_rules/> <httpstests/> <macros/> :
: <applications> <application> <name>sample_app</name> </application> </applications> <items> <item> <name>sample_item</name> <type>0</type> <snmp_community/> <snmp_oid/> <key>vm.memory.size[pused]</key> <delay>30s</delay> <history>90d</history> <trends>365d</trends> <status>0</status> <value_type>0</value_type> <allowed_hosts/> <units/> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <params/> <ipmi_sensor/> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications/> <valuemap/> <logtimefmt/> <preprocessing/> <jmx_endpoint/> <timeout>3s</timeout> <url/> <query_fields/> <posts/> <status_codes>200</status_codes> <follow_redirects>1</follow_redirects> <post_type>0</post_type> <https_proxy/> <headers/> <retrieve_mode>0</retrieve_mode> <request_method>0</request_method> <output_format>0</output_format> <allow_traps>0</allow_traps> <ssl_cert_file/> <ssl_key_file/> <ssl_key_password/> <verify_peer>0</verify_peer> <verify_host>0</verify_host> <master_item/> <interface_ref>if1</interface_ref> </item> </items> <discovery_rules/> <httpstests/> <macros/> :
2, テンプレート側の xml で、1, で追加した部分から <interface_ref> を含む行を全て削除します。(※アイテム1つにつき1行存在しています。)
:
<verify_host>0</verify_host>
<master_item/>
<interface_ref>if1</interface_ref>
</item>
</items>
:
: <verify_host>0</verify_host> <master_item/> </item> </items> :
3, ホスト側の xml から <triggers> 以降をコピーして、テンプレート側 xml の </templates> の次の行に追加します。(※ホストの設定項目次第では <triggers> 以降の項目は存在しない場合もあります。)
: </template> </templates> </zabbix_export> :
: </template> </templates> <triggers> <trigger> <expression>{export_test:vm.memory.size[pused].last()}>80</expression> <recovery_mode>0</recovery_mode> <recovery_expression/> <name>sample_trigger</name> <correlation_mode>0</correlation_mode> <correlation_tag/> <url/> <status>0</status> <priority>1</priority> <description/> <type>0</type> <manual_close>0</manual_close> <dependencies/> <tags/> </trigger> </triggers> <graphs> <graph> <name>sample_graph</name> <width>900</width> <height>200</height> <yaxismin>0.0000</yaxismin> <yaxismax>100.0000</yaxismax> <show_work_period>1</show_work_period> <show_triggers>1</show_triggers> <type>0</type> <show_legend>1</show_legend> <show_3d>0</show_3d> <percent_left>0.0000</percent_left> <percent_right>0.0000</percent_right> <ymin_type_1>0</ymin_type_1> <ymax_type_1>0</ymax_type_1> <ymin_item_1>0</ymin_item_1> <ymax_item_1>0</ymax_item_1> <graph_items> <graph_item> <sortorder>0</sortorder> <drawtype>0</drawtype> <color>1A7C11</color> <yaxisside>0</yaxisside> <calc_fnc>2</calc_fnc> <type>0</type> <item> <host>export_test</host> <key>vm.memory.size[pused]</key> </item> </graph_item> </graph_items> </graph> </graphs> </zabbix_export> :
4, テンプレート側の xml で、(設定をエクスポートしたホスト名) を全て (新規作成したテンプレート名) に置換します。(今回の例では “export_test” → “import_test_from_host” に置換しました。)
これでテンプレート側の xml ファイルにホストのアイテムなどの設定を移すことができました。
・インポート
作成した xml ファイルをテンプレート画面からインポートします。
インポートに成功すると、先の手順で新規作成したテンプレートにホストで設定していたアイテムなどが登録されているはずです。(念のため、テンプレート画面から望んだとおりの設定が登録できているかを確認してください。)
■最後に
今回は「Zabbix でホストの設定をテンプレートにする」ちょっと強引な方法を紹介してみました。
テンプレートの使い方については以前の記事で紹介していますので、そちらを見て頂ければと思います。
エクスポートされた xml の書式などについてより詳しく知りたい場合は、公式ドキュメントで確認することができます。