はじめに
自宅PCのVirtual BoxにOracle Linux 8.10を構築したのち、
下記のサイトを参考にZabbix Server 6.2.9をインストールしました。
そして、ブラウザからWebコンソールをセットアップしようとしたのですが、
表題のエラーが発生し解決まで結構時間がかかりました。
本記事では、私がとった対応策を書き残します。
環境
- OSバージョン:Oracle Linux 8.10
- DBバージョン:MySQL 8.0.36
- ミドルウェアバージョン:PHP 7.4.33、Apache 2.4.37
- Zabbixバージョン:zabbix server 6.2.9、zabbix agent 6.2.9
発生した事象および対応策
発生した事象
上記の記事に従い、無事にZabbix Serverおよび、Zabbix Agentのインストールまで
完了したので、ブラウザからhttp://[ZabbixサーバのIP]/zabbixにアクセスしました。
上記紹介した2つ目の記事にあるように、「言語を選択」→「前提条件のチェック」→
「データベースの接続設定」、といった流れでセットアップを進めましたが、
「次のステップ」ボタンを押した後にタイムアウトが発生しました。
少し時間をおいても解決しませんでした。
ちなみに、Zabbix Serverの80番、162番ポートはfirewall-cmdで開けており、
クライアント⇔Zabbix Server間のネットワーク疎通に問題はなかったです。
少し悩んだのち、/var/log/httpd/error_logを確認しました。
[Thu Jul 11 21:13:16.150358 2024] [proxy_fcgi:error] [pid 1667:tid 140094543472384] [cl
ient 192.168.56.1:58728] AH01071: Got error 'PHP message: PHP Notice: Trying to access
array offset on value of type null in /usr/share/zabbix/include/classes/core/CCookieSe
ssion.php on line 194', referer: http://192.168.56.2/zabbix/setup.php
私はPHPの知識はないに等しいので、下記の記事を読んで何となくレベルでしか
理解できませんでしたが、PHP7.4からは中身が空の変数にアクセスする際の
チェックが厳しくなり、本事象が発生しているようです。
- 「Acquia Lightning」のインストール時にエラーメッセージ「Notice: Trying to access array offset on value of type null」が出力された。(Drupal 8)
- phpでTrying to access array offset on value of type null エラーと軽めの対処法
詳しい方がいたら教えてくださいm(__)m
対応策
長いこと調査した結果、下記のサイトにたどり着き、CCookieSession.php、
ZBase.php、CWebUser.phpの中身を直接修正しました。
- v6.0.22 install fails DB connect @ install, error: "Trying to access array offset on value of type null in .../CCookieSession.php"
- d63da1229a3 ←phpファイルの具体的な修正内容が載っています
Priority:Majorとあるので、どうやら本事象はバージョン6での結構大きなバグみたいですね。
Fixedとあるので既に解決済みのようですが、phpファイルを直接修正するというのは
本当にあっているんでしょうか・・・
[root@localhost ~]# diff /usr/share/zabbix/include/classes/core/CCookieSession.php /usr/share/zabbix/include/classes/core/CCookieSession.php_20240713
33,37d32
< * Cookie lifetime.
< */
< public $lifetime = 0;
<
< /**
131,135c126,128
< # return CCookieHelper::set(self::COOKIE_NAME, $data,
< # $this->isAutologinEnabled() ? time() + SEC_PER_MONTH : 0
< # );
<
< return CCookieHelper::set(self::COOKIE_NAME, $data, $this->lifetime);
---
> return CCookieHelper::set(self::COOKIE_NAME, $data,
> $this->isAutologinEnabled() ? time() + SEC_PER_MONTH : 0
> );
199,202c192,195
< #
< # protected function isAutologinEnabled(): bool {
< # return (CWebUser::$data['autologin'] === '1');
< # }
---
>
> protected function isAutologinEnabled(): bool {
> return (CWebUser::$data['autologin'] === '1');
> }
[root@localhost ~]#
[root@localhost ~]# diff /usr/share/zabbix/include/classes/core/ZBase.php /usr/share/zabbix/include/classes/core/ZBase.php_20240713
560,563d559
< if (CWebUser::isAutologinEnabled()){
< $session->lifetime = time() + SEC_PER_MONTH;
< }
<
[root@localhost ~]#
[root@localhost ~]# diff /usr/share/zabbix/include/classes/user/CWebUser.php /usr/share/zabbix/include/classes/user/CWebUser.php_20240713
244,252d243
<
< /**
< * Check whether user has enabled autologin.
< *
< * @return bool
< */
< public static function isAutologinEnabled():bool {
< return (CWebUser::$data['autologin'] === '1');
< }
[root@localhost ~]#
この修正で合っているのか自信はありませんでしたが、
修正後、OSごと再起動してブラウザからhttp://[ZabbixサーバのIP]/zabbixに
アクセスし、コンソールを設定、Adminでログインすると・・・
正常にコンソールを起動できました!!
参考資料
再度お世話になったサイトを掲載しておきます
- 【ZABBIX】Oracle Linux 8 へ ZABBIX6.2 をインストールする
- 監視ツール「zabbix-6-4」を構築してみました!
- v6.0.22 install fails DB connect @ install, error: "Trying to access array offset on value of type null in .../CCookieSession.php"
- d63da1229a3
おわりに
PHPを全く知らない状態から、分からないなりに推測してZabbix Serverの
コンソールを起動するところまで何とかたどり着けました。。
この記事で私がやっている内容に詳しい方、一言ある方がいたら
ご教示いただきたいくらいです。
よくわからない事象でも、持っている知識を総動員して調査することの
大切さを学んだ気がします。今回でいうと、ネットワークに問題がなさそうなのに
ブラウザからアクセスできない→Apacheのエラーログを確認してみよう、
という定石を実行できた点はよかったと思います。