エクスポートしたZabbixのテンプレートのサイズが2Mを超えてしまい、インポートができなくなった人向けメモ
自宅のZabbix設定の整理をしていて、複数のテンプレートをまとめてエクスポートしたのち、インポートで戻そうとしてハマったのでメモ。
ハマった原因は非常に単純で、「エクスポートしたテンプレートファイルのサイズが2MBを超えていたから」でした。 今回は、エクスポートしたテンプレートをそのまま戻すだけだったので、特に問題なく行くと思ってエクスポートされたXMLファイルを指定して、インポートしようとしたところ、以下のエラーが発生。
メッセージは次の通り。「エラー: インポートに失敗しました ファイルサイズが大きすぎます。アップロードファイルサイズの最大値は2097152バイトです」
それで、ファイルのサイズを確認してみたところ、確かに1つのXMLファイルで2.5MB。アイテム数が多いテンプレートをまとめてエクスポートしてしまったばっかりに、これだけ大きいファイルになってしまっていました…。
手元のCentOS 6に入っているPHP 5.3では、ファイルアップロードの最大サイズをデフォルトで「upload_max_filesize」で制限している様子。そこで、まずは/etc/php.iniを開いて、以下のように編集。
upload_max_filesize = 2M
↓
upload_max_filesize = 4M
これで大丈夫だと思って再チャレンジするも、結局表示は変わらず…。どうやら、ZabbixはPHP全体の設定とは別にアップロード制限をしている様子。
仕方ないので、問題切り分けのため、「/usr/share/zabbix/info.php」に以下の内容のファイルを配置して、ブラウザから「http://<zabbix-serverのIP>/zabbix/info.php」にアクセスしてZabbixのPHP設定を確認。
$ vi <?php phpinfo();
「upload_max_filesize」を確認してみると、やはり、/zabbix にはローカルの値が設定されていることがわかりました。
Directive | Local Value | Master Value |
---|---|---|
upload_max_filesize | 2M | 4M |
/zabbixのローカルの設定は、httpd設定や.htaccessにあるはずなので、Zabbix Webの設定ファイル「/etc/httpd/conf.d/zabbix.conf」を調べたところ、案の上、以下のようなPHP設定が書かれていました。
<Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 # php_value date.timezone Europe/Riga </Directory>
こちらをエクスポートしたファイルサイズよりも大きい値に書き換えて、httpdを再起動したところ、無事にインポート成功。
この制限さえ通過してしまえば、特に問題は起こりませんでした。ただ、今回の作業対象が運用中のサーバではないので、大きいファイルのインポートによる負荷を考えなくていいという条件があってのことですが。
運用中のサーバに適用しているテンプレートをインポートにて一括で更新すると、各ホストの設定変更が一斉に走ってしまうため、かなり重い処理になります。 今回はそういうことがなかったので、この回避策を使いましたが、そういう点を考えてもテンプレートはあまりファイルサイズが大きくならない範囲でエクスポートするのがよいようです。