ZabbixをDockerコンテナで運用時の主キー設定

TL;DR Zabbixは6.0よりhistoryテーブルに主キーを使うようになりました。server,frontendのパフォーマンス向上とテーブルサイズ削減が見込めるようです。 https://www.zabbix.com/whats_new_6_0#performance_improvements 公式のDockerコンテナを運用している場合、DBコンテナは別なので/usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sqlがなく、以下から取得したところ、うまくいきました。 https://git.zabbix.com/projects/ZT/repos/rsm-scripts/browse/database/mysql/history_pk_prepare.sql 経緯 Zabbixのダッシュボードのシステム情報に、「データベースのヒストリテーブルが主キーを使用: いいえ」と表示されていることに気づきました。 調べたところ、Zabbix 6.0よりhistoryテーブルの主キーの使用に対応しているとのことでした。 https://www.zabbix.com/whats_new_6_0#performance_improvements 新規に6.0以降をインストールすれば自動で主キーが設定されるが、以前のバージョンのアップグレードの場合は手動で対応する必要があるようです。 https://www.zabbix.com/documentation/6.0/en/manual/appendix/install/db_primary_keys 弊社の環境は公式のDockerコンテナで運用してて、DBはMariaDBの公式Dockerコンテナを使用しています。「MySQL 8.0+ with mysqlsh」の手順に従って進めたところ、途中で指定されている「/usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql」が見つかりません。 この手順は1つのサーバーにweb,server,DBをインストールする想定と思われます。公式のDockerコンテナのweb,serverをマウントしてファイル名で検索しても見つからず。 単体のZabbixサーバを構築してファイルを取り出すのも面倒だったのでいろいろ検索し、公式のリポジトリと思われる以下よりダウンロードして流し込んだところ、うまくいきました。 https://git.zabbix.com/projects/ZT/repos/rsm-scripts/browse/database/mysql/history_pk_prepare.sql

<span title='2023-05-09 00:00:00 +0900 +0900'>May 9, 2023</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

Raspbian 11でapt経由でzabbixを利用する際はnginx利用不可

TL;DR Raspbian 11でapt経由でzabbix6をインストールする場合、nginxは事実上利用できずapache2を利用することになる。 zabbix-nginx-confパッケージをインストールするとなぜかapache2がインストールされてしまう。 経緯 Raspberry Pi 4(8GB)にRaspbian OS 11 Liteをインストールしてzabbixサーバを構築しようとした。リポジトリを追加するためのパッケージは以下 https://repo.zabbix.com/zabbix/6.0/raspbian/pool/main/z/zabbix-release/zabbix-release_6.0-3+debian11_all.deb Raspbian 10の時と同じ手順で進める。Webサーバはnginx。設定は問題なく完了するのだが、Webを見に行くと、Apache2の既定のメッセージが出てしまう。 実際、サービスを確認するとnginxのほかにapahce2が起動しており、apache2はポートをbindできずにエラーとなっている。 が、途中でapache2を入れた記憶はない。よくよく調べていくとdpkg rdepends zabbix-nginx-confでなぜかapache2をインストールしているっぽい。nginxはインストールしないのに。 明らかな不具合だと思い、forumに報告。ひとまずはapache2で構築した。

<span title='2022-06-28 00:00:00 +0900 +0900'>June 28, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

DockerコンテナのZabbixからDockerホストの監視

Ubuntu20.04で構築しているDocker環境にて Dockerコンテナで構築したZabbix serverでDockerホストにzabbix agentをインストールして監視する場合、Zabbix serverの接続元IPがDocker内部IPになってしまう。既定ではDockerコンテナのIPは毎回変わるため、zabbic agent側でzabbix serverのIPを指定できない(configファイルに記載が必須)。 Dockerホスト1台で運用する環境であれば、内部IPを固定してしまえばよい。 当方では、2台でActive-Standbyで運用しており、自サーバがActiveの場合は内部IPでアクセスが来るが、Standbyの場合には(自サーバでないActiveサーバの)外部IPでアクセスが来るため、serverとして2つのIPを指定したい。 https://www.zabbix.com/forum/zabbix-help/379138-one-node-monitored-by-2-differents-zabbix-servers によると、configのSERVER値に複数のIPをカンマ区切りで指定することもできるらしい。 一方で、SERVER値にはホスト名の指定もできるので、ホスト名に対するAレコードを複数登録して動作確認したところ、こちらも問題なく動作した。なお、PTRレコードは不要。 環境によっては、IP直指定よりもDNSの方がよいというところもあるだろう。

<span title='2021-07-02 00:00:00 +0900 +0900'>July 2, 2021</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

ZabbixのDockerイメージバージョンアップ時にtimezoneエラー

Dockerにて、本家のイメージを使って運用している。 4.0.22から4.0.24にアップしたところ、以下のエラーが出て監視画面が表示されなくなってしまった。 DateTime::__construct(): Invalid date.timezone value '"Asia/Tokyo"', we selected the timezone 'UTC' for now. よくよくみると、「Asia/Tokyo」の前後にダブルクォーテーションとシングルクォーテーションがついている。ひょっとしてと思い、Dockerで環境変数を指定している箇所 PHP_TZ="Asia/Tokyo" をダブルクォーテーションなしで PHP_TZ=Asia/Tokyo と修正したところ、無事表示されるようになった。

<span title='2020-10-21 00:00:00 +0900 +0900'>October 21, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

zabbix起動時にエラー

zabbix起動時に以下のエラーが表示されてログイン画面が表示されない。 DateTime::__construct(): Invalid date.timezone value '"Asia/Tokyo"', we selected the timezone 'UTC' for now. [再起動] 再起動ボタンを押しても同じ画面が再度表示されるだけ。zabbixは公式のDockerイメージ(zabbix/zabbix-web-nginx-mysqlのタグ「4.0-latet」を使用していた。「4.0.22」に戻したところ、正常に動作することを確認。原因は調査できていない。

<span title='2020-09-15 00:00:00 +0900 +0900'>September 15, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41