運用監視のZabbix(ザビックス)の運用・監視・構築

はじめに

お疲れ様です。
ITシステムを何台か運用していると運用管理が面倒くさくなりますね。
zabbixは そのような 複数のサーバーを常時監視し、アラートが上がればWEBブラウザGUIによる画面表示 もしくは
メールなどでお知らせしていただけるような運用システムになります。実際の運用監視現場でもzabbixは多く使われており、
覚えておいて、損はないと思います。
これから 構築や運用の説明をしていきたいと思いますのでよろしくお願いします。

構築環境

OSはCentOS stream9+KVMハイパーバイザ環境で、ゲストOSのCentOS9でzabbixサーバーを立てます。
※これは私の環境であり、クラウド環境(EC2やVPS環境)でも基本は同じです。
IP アドレスは自宅 DMZ に置いている、IP アドレス1個の状況で運用します。
グローバル IP が複数ある方は直接グローバル IP で運用した方が シンプルで楽ですね。
今回は、DMZ に置いているKVMマシンにアクセスさせて、そこからポートフォワーリングでゲストOSに
通信ができるというような構成で考えています。
※ゲストOSもCentOS Stream 9です。
zabbix サーバーを運用するには 5つの設定・構築が必要です。
① PHP のインストール
② MySQL のインストール(その他ポスグレやOracleでもサポートしています)
③ アパッチのインストール(NginxとかでもOK)
④ zabbix サーバーのインストール
⑤ zabbix エージェントのインストール
この5つの環境を先に整える必要があります。

●Zabbix Server → 監視データを収集・処理するメインのサーバー
●Zabbix Agent → 各監視対象のデータを収集し、Zabbix Serverに送信
●MySQL (MariaDB等ポスグレとか) → 監視データを保存するデータベース
●Apache(NginxとかWEBサーバ) → ZabbixのWebインターフェースを提供(PHPと連携)
●PHP → Zabbix Web UIの動作に必要なスクリプト環境

Zabbixの主要なディレクトリ

●設定ファイル: /etc/zabbix/zabbix_server.conf
●ログファイル: /var/log/zabbix/zabbix_server.log
●バイナリ実行ファイル: /usr/sbin/zabbix_server
●データベース: /var/lib/mysql/zabbix(MySQL使用時)
●Webインターフェース: /usr/share/zabbix/(Apache経由で提供)
 Apacheのデフォの/var/www/html ではないです。

Webインターフェースの動作

●ZabbixのWeb UIは Apache や Nginx を通じて /usr/share/zabbix/ に配置されます。
●http://ザビックスサーバーのホスト名もしくはIPアドレス/zabbix にアクセスすると、PHPが動作して管理画面が表示されます。
 デフォルトID・PWは Admin zabbix
 (必ず任意のパスワードに変更すること。できれば大文字、小文字、数字等10桁以上を推奨)
●zabbix.conf.php でデータベース接続情報を管理。
つまり、Zabbixのサーバー本体は /usr/sbin/zabbix_server にあり、
Webインターフェースは /usr/share/zabbix/ に配置されている、という構成ですね!

順番に説明していくのでご心配はいらないかと思います。
また 動作環境を確認しながら進めているので大抵の人は トラブルはないと思っています。
それでは始めましょう!

計画

zabbixサーバーは、前述のようにMySQLを使用して、一旦すべての取得データをDBに取り込みWEBのGUIに表示する仕組みに
なっています。
なので、DBが大きくなりやすいです。十分にディスクを確保した方がいいです。
また、割とサーバーリソース(CPU、メモリ、ディスクIO(DBによる))が食うので、どのくらいのサーバー監視をするのかや、
監視項目の数で、リソース割り当てを考慮しましょう!
私がテストした感じでは、以下を目安にした方が良いです。

●小規模(100監視項目)→ →  CPU 1コア / メモリ 1GB / MySQL
●中規模(500監視項目)→ →  CPU 2コア / メモリ 2GB / MySQL
●大規模(1000監視項目以上→  CPU 4コア / メモリ 8GB / MySQL
※サーバ台数でなく監視項目数なので注意を!
 今回の場合は、サーバー3台監視で以下のテンプレートを利用予定
 Template OS Linux → Linuxサーバーの一般的な監視(CPU, メモリ, ディスク, ネットワーク)
 Template App MySQL → MySQLのパフォーマンス監視(接続数, クエリ速度, ストレージ使用量)
 Template App Apache → Apacheの稼働状況監視(リクエスト数, 接続数, メモリ使用量)

KVM仮想マシンの構成(ゲストOS)(物理KVMホスト、自分自身(zabbixサーバ)、外部WEBサーバの3台を監視)

●CentOS Stream 9 CPU 2コア / メモリ 4GB/ Swap 3GB で仮想マシン構築
●PHP8.2
●Apache2.4.62
●MySQL8.0.41
●zabbix7.0LTSを構築する(現在最新は7.4だが、7.0がLTSのため7.0を選択)
 ※LTSは、ロングタイムサポートの略で7.0LTSは、フルサポート: 2024年6月 〜 2027年6月、
 リミテッドサポート: 2027年6月 〜 2029年6月、延長サポート: 2029年6月 〜 2031年6月と
 なっており。2029年9月までは、安全につかえるかなーと。
 フルサポート期間 では、すべてのバグ修正や機能改善が提供されます。
 リミテッドサポート期間 では、深刻なバグ修正やセキュリティアップデートのみが提供されます。
 延長サポート は、特定の契約を結んだ場合に提供される追加サポートです。(ここだけ有償)

構築手順

まずはselinuxを無効化(disabled)する。

zabbix公式では、disabledを推奨しているワケではないですが、
いろいろ調べてると、
###
Zabbix サーバ上で SELinux が有効になっていると、設定ファイルの書き込みに失敗するため、インストールに失敗します。
事前に SELinux を無効もしくは permissive に変更する、設定ファイルのセキュリティコンテキストを変更する、のいずれかの設定を行う必要があります。

#####
上記みたいに記載されていることが、多いので無効化します。(有効にしたままが良い人は、zabbix公式マニュアル参照で対応)
実際の現場でもselinux無効が多いような気がします。

 
通常installしたばかりのselinuxはEnforcing(有効)になっているので、 vim /etc/selinux/config で SELINUX=disabled として、設定を有効にするため
再起動を行います! 
 
 
保存して、仮想マシンを再起動しましょう!
 

 
再起動したら、disabled(無効)になりました。
まずは、OKですね!

PHP8.2のインストール

CentOS Stream 9にはデフォルトでPHPは含まれていませんが、AppStreamリポジトリを利用してインストールできます。
一応、どのバージョンのインストールができるか確認しましょ。
 
PHP8.2がデフォで行けるので、PHP8.2で行くことにします!
 
 
 
うんうん。上手くinstallできた。
 
phpのバージョン8.2.28が上手くインストール出来ました。
とりあえずOKですね!よかった!
最新式でなくて、デフォルトの[d]がついてるの選んだ方が、私は良いと思います。
 

一応、PHPの動作確認します。Webサーバの/var/www/html配下にxxx.phpファイルを配置して、phpの動作テストをします。
以下のコマンドを入力し、コマンドの標準出力をファイルに出力します。
初期設定では、phpを起動させる php-fpmサービス が起動していないので、これを起動させます。
 
disabledで起動していないので、起動させます。
 
php-fpmをスタートさせるとともに再起動しても恒久的に立ち上がるようenableしてサービスとして起動させる。
 
上手く起動できていますね!
テストとして、Webサーバの/var/www/html配下にxxx.phpファイルを配置して、phpの動作テストをします。
以下のコマンドを入力し、コマンドの標準出力をファイルに出力します。
 

 
ファイルができていますね。では、ブラウザでテストページが表示されるか試しましょう。でもここで注意はファイアウォールのポート80番を
解放しないと行けないです。忘れないようにお願いします。
 

あっ!そういや、80番ポート開けたけど、Apachインストール忘れてた!いかん!前後するけど今からinstallします!
恐れ入ります!!

Apache2系のinstall

インストールできるApacheのバージョン確認です
 
Apacheの2.4.62がインストール出来ることが分かりました。
ではインストールしましょう!
 
 
インストール完了。では起動します。
 
起動確認
 
うんうん起動OKです。先ほど、PHP環境のテストしようとしたときApacheインストールを忘れちゃったので、ここでテストします。
ブラウザのURLのところに http://192.168.0.201/phpinfo.php でテストページが表示されるかテストする。
※上記IPアドレスの部分は、ご自身の環境でサーバのアドレス/phpinfo.php でテストしてください。
 
うんうん、上手くいった! 念のため http://192.168.0.201/ もテスト。Apacheのテストページは出るはず!
 
問題ないです!
とりあえず、PHPのインストールとWEBサーバーのApacheのインストールは完了。次はMySQLです!

MySQL8.0のインストール

では、MySQLのどのバージョンが使えるか確認しましょう!
 
mysql8.4があるけど、[d]がついてないから8.0にするね。
MySQLリポジトリを追加 dnf install https://dev.mysql.com/get/mysql80-community-release-el9.rpm
 
yを指定して継続する。
 
上手く行きました。
dnf install mysql-server する
 
 
yで進めます。
 
いくつか公開鍵とか聞いてくるがyで進み、インストール完了。

[root@zabbix ~]# mysql --version
mysql Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL)
[root@zabbix ~]#
インストールしたバージョンを調べたら mysql Ver 8.0.42  が、きちんとインストールされています。
 

では、MySQLを起動し、恒久的に自動起動させます。
初回起動後、自動生成されたMySQLのデフォルトのrootパスワードが、/var/log/mysqld.log に記載があるので、メモっておいてください!
 
runningと表示があるので問題なく起動しています。
/var/log/mysqld.log で初期rootパスワードを確認する。
vim /var/log/mysqld.log で確認するか cat /var/log/mysqld.log | grep password
 
root@localhost の:のあとが、自動生成された初期パスワードとなる。必ず変更しておくこと。
ではMySQLにログイン mysql -u root -p でパスワードを聞かれるのでメモしておいた初期パスワードを入力する。
 
上手くログインできたので、rootパスワードを変更する。
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード'; で有効となる
' 'の中にPassword 設定する Query OK, 0 rows affected (0.08 sec) で即時有効となる。(ここは見えちゃうから画像なしで!)

zabbixユーザーの作成

zabbixで使うユーザーを登録します。
create user zabbix@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.06 sec) で、登録完了。

zabbixユーザーに、zabbixデータベース内のすべてのテーブルに対する全ての権限を付与するため以下を設定
grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.06 sec) で 完了。

zabbixユーザーに、想定通りの権限が付与されていることを確認する
SHOW GRANTS FOR 'zabbix'@'localhost';
 
どうやら大丈夫見たいです。

Zabbix7.0LTSのインストール

インストールはzabbix社の公式ページを参照してインストールする。
https://www.zabbix.com/download?zabbix=7.0&os_distribution=centos&os_version=9&components=server_frontend_agent&db=mysql&ws=apache
 

●Zabbixリポジトリをインストールする
EPEL で提供されている Zabbix パッケージがインストールされている場合は、無効にする。
/etc/yum.repos.d/epel.repo ファイルを編集する※epelを登録していなければ読み飛ばしてください

[epel]
...
excludepkgs=zabbix*   → → これを追加する

●zabbix リポジトリのインストールを行いましょう!
# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/centos/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
# dnf clean all

●Zabbixサーバー、フロントエンド、エージェントをインストールする
# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
 
公開鍵のこととか聞かれるがyで問題なしで進めてください。
 
完了!

●初期データベースを作成しましょう。
データベース サーバーが起動して実行されていることを確認してください。
データベース ホストで次のコマンドを実行します。
# mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';  →すでに設定済み
mysql> grant all privileges on zabbix.* to zabbix@localhost;   →すでに設定済み
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

●Zabbixサーバーホストに初期スキーマとデータをインポートします。新しく作成したパスワードの入力を求められます。
※少々時間がかかるので心配しないで待ちましょう!
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
 
上手く終了した。

●データベース スキーマをインポートした後、log_bin_trust_function_creators オプションを無効にします。
log_bin_trust_function_creators は、ストアドファンクションやプロシージャの作成を制御するオプションらしい。
これを無効にすることで、セキュリティを強化し、バイナリログの整合性を維持できるらしい。
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
ただし、この設定は一時的なもので、恒久的にするには、以下の設定を施すこと。
vim /etc/my.cnf
[mysqld] → mysqldセクションに以下を追加し、mysqlを再起動する

log_bin_trust_function_creators=OFF

systemctl restart mysqld

●abbixサーバーのデータベースを構成する
ファイル/etc/zabbix/zabbix_server.confを編集する。

DBPassword=zabbixユーザーで設定したPSSWORD

●Zabbixサーバーとエージェントのプロセスを起動する
Zabbix サーバーおよびエージェントのプロセスを起動し、システムの起動時に起動するようにします。

# systemctl restart zabbix-server zabbix-agent httpd php-fpm
# systemctl enable zabbix-server zabbix-agent httpd php-fpm

●うまく設定できたらしい!テスト Zabbix UIウェブページを開く
Apache Webサーバーを使用する場合のZabbix UIのデフォルトのURLはhttp://ドメインまたはIPアドレス/zabbix です。
 
上手くいった!最初は英語のランゲージになっているので、日本語に設定して、次のステップする。
 
ステータスがすべてOKになっているハズなので、確認。(上手く行かなかったらどうするか?もう一回後戻りして設定しなおして見て!)
次のステップへ行きましょう!
 
ここでは、基本zabbixユーザーのPWを指定します。
次のステップへ!
 
zabbixサーバー名をzabbixとしたが、localhostでもOK。
私の場合、サーバー名をzabbixとしたので、zabbixにした。
次のステップへ!
 
パラメータの確認画面です。基本OKなので次のステップへでOK
 
やりました!インストール完了です。終了で、ZabbixのWEBのインターフェイスが出てきます!
設定ファイル"etc/zabbix/web/zabbix.conf.php"を作成しましたとなっています。
※ZabbixのWebインターフェースの設定ファイルです。
- DBサーバー情報(ホスト名、ポート)
- データベース名
- DBユーザー名とパスワード
- Zabbixサーバーの接続情報
- タイムゾーン設定
- その他のWebインターフェース関連のオプション
このファイルを適切に設定することで、ZabbixのWebインターフェースがデータベースと正しく通信できるようになります。
設定を変更した後は、Webサーバー(ApacheやNginx)を再起動することで反映されます。

zabbixのWEBインターフェイスにログイン

 
WEBインターフェイスの初期IDとパスワードは ID Admin  PW zabbix です。必ずパスワードを変更してください。
ログイン直後に必ず行います。

 

うんうん!成功です!
私の環境の場合、自宅サーバーのDMZ内の物理サーバーのKVMゲストOSでzabbixサーバーを立てたので、別途ポートフォワーディングで
外部からアクセス出来るように設定します。一応物理サーバにport8080の穴を空けます。また、現在の設定では、zabbixサーバー自信を
監視しているだけなので監視対象のサーバーを追加する場合は別途、port 10050と10051を空け、さばく必要があります。