はじめに
お疲れ様です。
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無効が多いような気がします。
![]() |
再起動を行います!
![]() |
![]() |
![]() |
![]() |
まずは、OKですね!
PHP8.2のインストール
CentOS Stream 9にはデフォルトでPHPは含まれていませんが、AppStreamリポジトリを利用してインストールできます。一応、どのバージョンのインストールができるか確認しましょ。
![]() |
![]() |
![]() |
![]() |
![]() |
とりあえずOKですね!よかった!
最新式でなくて、デフォルトの[d]がついてるの選んだ方が、私は良いと思います。
![]() |
一応、PHPの動作確認します。Webサーバの/var/www/html配下にxxx.phpファイルを配置して、phpの動作テストをします。
以下のコマンドを入力し、コマンドの標準出力をファイルに出力します。
初期設定では、phpを起動させる php-fpmサービス が起動していないので、これを起動させます。
![]() |
![]() |
![]() |
テストとして、Webサーバの/var/www/html配下にxxx.phpファイルを配置して、phpの動作テストをします。
以下のコマンドを入力し、コマンドの標準出力をファイルに出力します。
![]() |
![]() |
解放しないと行けないです。忘れないようにお願いします。
![]() |
あっ!そういや、80番ポート開けたけど、Apachインストール忘れてた!いかん!前後するけど今からinstallします!
恐れ入ります!!
Apache2系のinstall
インストールできるApacheのバージョン確認です ![]() |
ではインストールしましょう!
![]() |
![]() |
![]() |
![]() |
ブラウザのURLのところに http://192.168.0.201/phpinfo.php でテストページが表示されるかテストする。
※上記IPアドレスの部分は、ご自身の環境でサーバのアドレス/phpinfo.php でテストしてください。
![]() |
![]() |
とりあえず、PHPのインストールとWEBサーバーのApacheのインストールは完了。次はMySQLです!
MySQL8.0のインストール
では、MySQLのどのバージョンが使えるか確認しましょう! ![]() |
MySQLリポジトリを追加 dnf install https://dev.mysql.com/get/mysql80-community-release-el9.rpm
![]() |
![]() |
dnf install mysql-server する
![]() |
![]() |
![]() |
[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 に記載があるので、メモっておいてください!
![]() |
/var/log/mysqld.log で初期rootパスワードを確認する。
vim /var/log/mysqld.log で確認するか cat /var/log/mysqld.log | grep password
![]() |
ではMySQLにログイン mysql -u root -p でパスワードを聞かれるのでメモしておいた初期パスワードを入力する。
![]() |
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
![]() |
![]() |
●初期データベースを作成しましょう。
データベース サーバーが起動して実行されていることを確認してください。
データベース ホストで次のコマンドを実行します。
# 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 です。
![]() |
![]() |
次のステップへ行きましょう!
![]() |
次のステップへ!
![]() |
私の場合、サーバー名をzabbixとしたので、zabbixにした。
次のステップへ!
![]() |
![]() |
設定ファイル"etc/zabbix/web/zabbix.conf.php"を作成しましたとなっています。
※ZabbixのWebインターフェースの設定ファイルです。
- DBサーバー情報(ホスト名、ポート)
- データベース名
- DBユーザー名とパスワード
- Zabbixサーバーの接続情報
- タイムゾーン設定
- その他のWebインターフェース関連のオプション
このファイルを適切に設定することで、ZabbixのWebインターフェースがデータベースと正しく通信できるようになります。
設定を変更した後は、Webサーバー(ApacheやNginx)を再起動することで反映されます。
zabbixのWEBインターフェイスにログイン
![]() |
ログイン直後に必ず行います。
![]() |
うんうん!成功です!
私の環境の場合、自宅サーバーのDMZ内の物理サーバーのKVMゲストOSでzabbixサーバーを立てたので、別途ポートフォワーディングで
外部からアクセス出来るように設定します。一応物理サーバにport8080の穴を空けます。また、現在の設定では、zabbixサーバー自信を
監視しているだけなので監視対象のサーバーを追加する場合は別途、port 10050と10051を空け、さばく必要があります。