はじめに
「ZABBIX4.0」で使用していたテンプレートを「ZABBIX7.0」にインポートしようとしたところ、アップロードサイズ制限でインポートに失敗した。
※ ファイル選択時にエラーが出た。
アップロードを行おうとしたファイルを確認すると、約「5MB」であった。
以下サイトを参考に対応しようとしたが、ZABBIXの仕様の変更?などでうまくいかなかった。なので自分なりに調べて解決できたので、ここに情報を残したいと思う。
【エクスポートしたZabbixのテンプレートのサイズが2Mを超えてしまい、インポートができなくなった人向けメモ】
解決方法(結論)
さっさと解決方法が知りたいんじゃ!という方のために、結論から先に書いときますね。
① 「upload_max_filesize」のアップロード最大サイズを上げる。
② 「memory_limit」のメモリ使用上限を上げる。
③ 「systemctl reload php-fpm」を実施し、変更した定義を適用する。
[zabbix]
user = apache
group = apache
listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
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[max_input_vars] = 10000
環境
ZABBIX環境を以下に記載する。
以下参照:
【検証】ZABBIX7.0 構築編
状況確認
PHP設定でアップロード最大サイズが現在どうなっているか確認してみる。
ZABBIXで使用されているPHP関連のファイルが配置されている階層は、「/usr/share/zabbix」である。そこに以下のファイルを配置し、PHPの設定状況をブラウザから確認する。
<?php
phpinfo();
ブラウザアクセス:
http://<zabbix-serverのIP>/zabbix/info.php
アップロード最大サイズは「upload_max_filesize」で設定されている。「2M」になっていることがわかる。
「upload_max_filesize」設定変更
今回「PHP-FPM」をPHPの実行環境として使用しているので、「upload_max_filesize」を変更するには「/etc/php-fpm.d/zabbix.conf」を修正する必要がある。
私の場合は、アップロードするサイズが約「5MB」あるので「upload_max_filesize」を「5MB」に変更しました。
[zabbix]
user = apache
group = apache
listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
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[max_input_vars] = 10000
変更後は、「systemctl reload php-fpm」を実行し、変更を反映させる。
再度ブラウザからPHP設定状況を確認すると変更されていることが確認できる。
再アップロード
再度、ファイルを選択してみると、「2M」制限エラーは出てこない。
これでインポートできる!!!
っと、思ったが「想定しないエラーが発生しました。」と別のエラーが出た。
・・・。(;゚Д゚)は?
原因究明
原因究明するために、以下のフロントエンドのエラーログファイルを確認してみる。
・/var/log/php-fpm/error.log(PHP-FPM エラーログファイル)
・/var/log/httpd/error_log(Apache HTTP エラーログファイル)
再度インポートを実施し、エラーログを確認してみたところ以下のエラーが出力された。
※ PHP-FPM エラーログファイルは、特に何も出力されなかった。
[root@RHEL8 ~]# tail -f /var/log/httpd/error_log
[Mon Oct 14 22:09:36.377876 2024] [proxy_fcgi:error] [pid 6452:tid 140362467235584] [client 192.168.10.1:53884] AH01071: Got error 'PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /usr/share/zabbix/include/classes/html/CTag.php on line 106', referer: http://zabbixsvr/zabbix/zabbix.php?action=template.list
PHP 致命的なエラー: usr/share/zabbix/include/classes/html/CTag.php on line 106', referer: http://zabbixsvr/zabbix/zabbix.php?action=template.list において、許容メモリサイズ 134217728 バイトを使い果たしました (20480 バイトを割り当てようとしました)。
どうやらPHPの処理でメモリ制限(128MB)を超える処理をしてしまったことにより、インポートが失敗したようだ。てことは、PHPのメモリ制限の上限を上げればいいってこと。
※ ブラウザから現在のメモリ制限状態を確認(memory_limit)
メモリ制限の引き上げ
メモリ制限は「memory_limit」で設定する。値を変更するには、再度「/etc/php-fpm.d/zabbix.conf」を修正する必要がある。
私の場合は、とりあえず2倍の「256MB」に変更したよ。
[zabbix]
user = apache
group = apache
listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
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[max_input_vars] = 10000
変更後は、「systemctl reload php-fpm」を実行し、変更を反映させる。
再度ブラウザからPHP設定状況を確認すると変更されていることが確認できる。
再々アップロード
再度インポートをしてみると、今度はうまくいきました。
その他
#
# Zabbix monitoring system php web frontend
#
Alias /zabbix /usr/share/zabbix
ProxyTimeout 300
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/zabbix.sock|fcgi://localhost"
</FilesMatch>
</Directory>