双六工場日誌

平凡な日常を淡々と綴ります。

エクスポートしたZabbixのテンプレートのサイズが2Mを超えてしまい、インポートができなくなった人向けメモ

自宅のZabbix設定の整理をしていて、複数のテンプレートをまとめてエクスポートしたのち、インポートで戻そうとしてハマったのでメモ。

ハマった原因は非常に単純で、「エクスポートしたテンプレートファイルのサイズが2MBを超えていたから」でした。 今回は、エクスポートしたテンプレートをそのまま戻すだけだったので、特に問題なく行くと思ってエクスポートされたXMLファイルを指定して、インポートしようとしたところ、以下のエラーが発生。

f:id:sechiro:20130827040457p:plain

メッセージは次の通り。「エラー: インポートに失敗しました ファイルサイズが大きすぎます。アップロードファイルサイズの最大値は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を再起動したところ、無事にインポート成功。

f:id:sechiro:20130827040452p:plain

この制限さえ通過してしまえば、特に問題は起こりませんでした。ただ、今回の作業対象が運用中のサーバではないので、大きいファイルのインポートによる負荷を考えなくていいという条件があってのことですが。

運用中のサーバに適用しているテンプレートをインポートにて一括で更新すると、各ホストの設定変更が一斉に走ってしまうため、かなり重い処理になります。 今回はそういうことがなかったので、この回避策を使いましたが、そういう点を考えてもテンプレートはあまりファイルサイズが大きくならない範囲でエクスポートするのがよいようです。