📖

Zabbix: 設定のエクスポートについて

2023/07/07に公開

はじめに

Zabbixは設定をエクスポートする機能を持っています。
設定をたくさん入れていけばいくほど、Webインターフェースから設定を確認するのは厳しくなっていきますし、またその時点での設定を保存しておくという意味ではエクスポートする機能というのは重要になってくると思います。

エクスポート機能がある設定の詳細は公式ドキュメントを見てもらったほうがいいと思いますが、
基本的なエクスポート方法は同じで下記いずれかの方法になります。

  • Webインターフェースのエクスポート可能な設定ページでエクスポートする
  • Zabbix APIを使用してエクスポートする

この記事では、それらの簡単な方法と少し気を付けたほうがいい点を紹介していきます。
※公式ドキュメントのURLは最下部の参考に記載しておきます。

Webインターフェースからのエクスポート

Webインターフェースからのエクスポートは非常に簡単です。

下記スクリーンショットのように、設定をエクスポートできるページには、エクスポートボタンが用意されています。(スクリーンショットは例としてホストをエクスポートしています)
使用方法としては、エクスポートしたい対象にチェックをつけて、エクスポートボタンを押すだけとなります。

また、記事投稿時点での最新LTSの6.0では、XML、Yaml、JSONの三種類のフォーマットを選択できますので、使い慣れた形式でエクスポートすればよいと思います。

Zabbix APIを使用したエクスポート

Zabbix LTSとしては6.0からAPIを使用して設定エクスポートをすることが可能です。
対象メソッドはconfiguration.exportとなります。
これを上手く活用すれば、定期的に設定をエクスポートして管理するというようなことも可能です。
ここではAPIのコードサンプルまでは記載しませんが、公式ドキュメントのURLを参考に記載しておきますので、ご参照ください。

エクスポートファイルに関する注意点

エクスポートしたファイルは基本的にはインポートも可能なようになっているので、
監視設定の保存、また別Zabbixサーバーへの移行という観点でも便利かと思います。
ただ、仕様として知っておいたほうが良いと思う注意点があるので、何点か紹介します。

エクスポートファイルには全ての設定が含まれていない

下記スクリーンショットを見てもらうと分かりやすいですが、Zabbixからエクスポートしたファイルには、全ての設定は含まれていません。

左右どちらも同じホストをエクスポートしていますが、左はステータスを有効、右は無効でエクスポートしています。
しかし青枠の部分を見ていただいたら分かるように、ステータスの設定値は無効側にしか記載されていません。
これはZabbixのエクスポートの仕様として、デフォルトの設定値はエクスポートファイルには含めないという仕様があるためです。
なので、エクスポートファイルを使用して設定パラメーターの資料に転記しようと思った場合は、ステータスや設定値によって項目数がバラバラであるということが発生します。
※あくまでも設定をインポート/エクスポートするためのファイルであって、設定保存用ではないという点に注意が必要です。

テンプレートの設定はエクスポートファイルには含まれない

これも同じホストのスクリーンショットとなって恐縮ですが、青枠で囲んでいる部分がホストに含まれるテンプレートの設定になります。

これを見ると分かるようにホスト、もしくはテンプレートにリンクされたテンプレートの情報はエクスポートファイルにはテンプレート名しか記載されていません。

そのため、インポートする際はリンクされているテンプレート名と同名のテンプレートをインポート設定にリンクするという動きになりますので、下記のような点を理解しておく必要があります。

  • エクスポートファイルに記載されているテンプレート名がインポート時にはZabbixサーバーに存在しておく必要がある
  • テンプレート名と同じテンプレートがリンクされるため、インポート先とエクスポート元でリンクテンプレートの設定値が異なっていたとしても考慮はされない
  • リンクテンプレートから継承されたアイテム、トリガーをホスト側で設定変更した上でエクスポートしても、その設定変更結果は保存されない

特に3つ目のテンプレートから継承したアイテム、トリガーの設定値を変更されている場合は注意が必要です。
作業前にエクスポートし、何かしら設定不備があった場合にインポートして設定を戻すという運用をされている場合は、インポート時のテンプレートのデフォルト設定でリンクされるため、全く同じ設定がインポートされるとは限らないためです。
このような運用をされている際は、この仕様については注意をしてください。

LLDで作成された設定はエクスポートファイルに含まれない

LLDのプロトタイプから作成された各種設定はエクスポートファイルには含まれません。
そのため、例えばLLDを使用したホスト(既にアイテムなど自動作成済)をエクスポートして、
ホストを削除してインポートし直した場合は、ホストからLLDで作成されたアイテムは無くなります。
そのため、LLDで作成されたアイテムで取得したデータ等も全て消えてしまうことになりますので、その点は注意が必要となります。

下方バージョンの互換性はない

当たり前の話ではあるのですが、例えば6.0で作成した設定をエクスポートし、5.0へインポートするということは出来ません。
そのため、エクスポートされた設定がどのバージョンで作成されたものかは注意してください。

なお、逆に下のバージョンでエクスポートした設定を上のバージョンへインポートすることは可能です。(エクスポート場所によっては出来ないかもしれませんが基本は可能です)
特にテンプレートなどはその機会が多いと思いますが、下のバージョンの書き方で書かれたテンプレートを上のバージョンにインポートした場合は、そのバージョン間の差異を修正した上でインポートしてくれます。
過去の記載方法や条件式を最新に変える場合に悩まれた場合、新しいバージョンのZabbixに設定を移す場合などに活用されるとよいと思います。

自作スクリプトの紹介

ここまで公式に用意されているエクスポートの方法を紹介してきました。
ただ設定の仕様などで、恐らく設定チェック、パラメーター転記という観点では、
エクスポートファイルは使用しづらい場合もあると思います。

その場合は、別途Zabbix APIなどを使用して自作コードを用意して、要望の情報、フォーマットで出力することが必要になってくると思います。

全ての設定を出力できるわけではありませんが、私の自作スクリプトでもそのような機能を
用意してありますの一度使用してみてください。

入手方法

入手方法は以前別の記事で記載しておりますので、こちらを参照ください。

入手方法

設定を出力するスクリプト

スクリプトの中で設定を出力するスクリプトは下記になります。

  • get-host.php (ホスト設定を出力)
  • get-template.php (テンプレート設定を出力)
  • get-item-withhost.php (ホストのアイテム設定を出力)
  • get-item-withtemplate.php (テンプレートのアイテム設定を出力)
  • get-trigger-withhost.php (ホストのトリガー設定を出力)
  • get-trigger-withtemplate.php (テンプレートのトリガー設定を出力)

使い方

※ここで記載した内容と合わせて、リポジトリのReadme.mdの内容も確認ください。

基本的な使い方は同様なので、get-host.phpで説明をします。
今回、/tmp/work配下にファイルを展開している前提で記載しています。

  • スクリプトを配置した後、/tmp/work/various-scripts_for-Zabbix/data/get-host/ディレクトリ配下に規定のJSON形式のファイルを配置する。
    ※ディレクトリにサンプルがありますので、そちらを参考にしてください。
    ※今回はZabbix serversグループを対象に出力しています。
# cd /tmp/work/various-scripts_for-Zabbix/data/get-host
# vi 任意のファイル名.json
{
    "groups": [
        "Zabbix servers"
    ]
}
  • スクリプトを実行する
    スクリプトがあるディレクトリ(Topディレクトリ)まで戻り、スクリプトを実行します。
# cd /tmp/work/various-scripts_for-Zabbix
# ./get-host.php

Working...1/1/0 (now/max/error)
[Output File Path]
/tmp/work/various-scripts_for-Zabbix/output/get-host_20230707_221612.zip

実行するとzipファイルが出力されますので、そちらをダウンロードしてください。

  • 出力データを確認する
    zipファイルにはJSONファイルがホストごとに分かれて出力されています。
    デフォルトの設定は空白で出るなど、基本的な情報は含むようにしています。
    そちらを開いていただくと各種ホストの設定が確認できますので、こちらを使用していただくとよいと思います。
{
    "host": "Zabbix server",
    "name": "Zabbix server",
    "status": "enable",
    "proxy": "",
    "description": "",
    "templates": [
        "Linux by Zabbix agent",
        "Zabbix server health"
    ],
    "groups": [
        "Zabbix servers"
    ],
    "interfaces": [
        {
            "type": "agent",
            "main": "default",
            "useip": "ip",
            "ip": "127.0.0.1",
            "dns": "",
            "port": "10050",
            "details": {
                "version": "",
                "bulk": "",
                "community": "",
                "contextname": "",
                "securityname": "",
                "securitylevel": "",
                "authprotocol": "",
                "authpassphrase": "",
                "privprotocol": "",
                "privpassphrase": ""
            }
        }
    ],
    "tags": [],
    "macros": [],
    "inventory": {
        "mode": "disable",
        "inventory": []
    },
    "encryption": {
        "tls_connect": "no",
        "tls_accept": "no",
        "tls_issuer": "",
        "tls_subject": "",
        "tls_psk_identity": "",
        "tls_psk": ""
    },
    "ipmi": {
        "authtype": "default",
        "privilege": "user",
        "username": "",
        "password": ""
    },
    "valuemaps": []
}

余談

余談ではありますが今回紹介したホスト設定出力(get-host)で出力したフォーマットは、
別に用意しているホスト作成のスクリプト(create-host)に入力するフォーマットと同一にしてあります。
そのため、ここで出力したデータを加工して、ホスト数分を用意すれば
スクリプトを使用したホストの複数登録ができるような仕組みにしてあります。
別の記事ではその実例などを紹介できればと考えております。
(基本的にはスクリプト紹介の前に、Zabbixの小ネタ紹介を挟みつつにする予定です。)

参考

Zabbix 公式ドキュメント(6.0) - 設定のエクスポート/インポート

Zabbix 公式ドキュメント(6.0) - API(configuration.export)

Discussion