自宅の仮想サーバーやアクセスポイントが増えてきたため、ネットワーク監視サーバーソフトであるZabbix7を構築しました。
Zabbixは、ネットワーク機器の障害発生を検知する著名なサーバーソフトウェアで、AGPLv3のため商業目的でも無償で使えることから、障害監視サーバーとしてはとても人気があります。
Linuxでの構築は若干手間がかかるため、本記事が参考になると思います。
システム構成
Zabbix7のシステム環境は以下のとおりです。
構築環境
- ハードウェア:自作PC(CPU:Core i7-10700, MEM:16G)
- VM:Proxmox8 VE
- ゲストOS:Ubuntu22.04LTS
- Zabbixバージョン:7.0.3(2024年9月時点での最新バージョン)
Zabbixでの監視対象機器
今回の監視対象機器は以下の通りです。
仮想サーバーはZabbix Agent、APやルーターはPingで監視します。
L2スイッチは所有していないため、SNMPの設定はしていません。
- 基幹ルーター(Ubiquiti UDM-SE)
- 仮想サーバー(Samba3 File Server, Samba4 Active Directory, SoftEther VPN Server, Apache Web Server)
- WiFiアクセスポイント(Ubiquiti U6-Pro, Netgear WAC510, Furuno Acera1110)
Zabbixプラットフォームの選択
以下の公式サイトでは、各々の環境に合わせた環境構築の手順が記載されております。
今回の環境構築は、以下の設定を入れております。
構築手順
Zabbixインストール前にapache, MariaDB, phpをインストールします。
システム更新
最初にシステムをアップデートします。
$ sudo su # apt update # apt upgrade # apt autoremove
apache2のインストールと初期設定
apache2をインストールします。
apache2はhttps化も出来ますが、自己証明書を作成する際に証明書の有効期限問題が発生するため、今回のように内部ネットワークからのアクセス限定の場合は、https化は行わないほうが良いです。
# apt install apache2
apache2設定ファイルの編集
# nano /etc/apache2/conf-enabled/security.conf # 25行目:変更 ServerTokens Prod # nano /etc/apache2/mods-enabled/dir.conf # 2行目:ファイル名を設定を確認 <IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule> # nano /etc/apache2/apache2.conf # 70行目:サーバー名追記 ServerName falcon.local.org # nano /etc/apache2/sites-enabled/000-default.conf # 11行目:管理者アドレス変更 ServerAdmin webmaster@falcon.local
apache2の再起動
# systemctl restart apache2
Webブラウザからhttp://192.168.0.122(OSのIPアドレス)にアクセスします。
以下のページが表示されればapache2の設定は完了。
MariaDBのインストールと初期設定
データーベースはMySQLより高速であるMariaDBを使います。
MariaDBをインストールし、コンフィグ確認後、起動します。
# apt install mariadb-server # nano /etc/mysql/mariadb.conf.d/50-server.cnf # 90行目 : デフォルトの文字コードを確認する # 絵文字等 4バイト文字を扱うにはutf8mb4にしておく character-set-server = utf8mb4 collation-server = utf8mb4_general_ci # systemctl restart mariadb
MariaDBの初期設定を実施します。
途中テストデータベースの作成を聞かれるので「作成しない」で進めます。
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n ... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
参考:MariaDBの初期設定で失敗した場合は、以下手順で初期化するほうが良いです。
# systemctl stop mariadb # rm -rf /var/lib/mysql/* # mysql_install_db --datadir=/var/lib/mysql --user~mysql=mysql # systemctl start mariadb
phpとPHP-fpmのインストールと初期設定
本記事ではphp-fpmを用います。
php-fpmは、複数のリクエストが発生した場合においても、高速にレスポンスを返すことが出来るサーバーモジュールです。デメリットとしてはメモリリソースを消費します。
PHP8.1のインストール
# apt install php8.1 php8.1-mbstring php-pear # php -v PHP 8.1.2-1ubuntu2.18 (cli) (built: Jun 14 2024 15:52:55) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2-1ubuntu2.18, Copyright (c), by Zend Technologies テストスクリプト作成 # echo '<?php phpinfo(); ?>' > /var/www/html/info.php
Webブラウザから「http://(IPアドレス)/info.php」にアクセスし、以下画面が出てくればOK。
Ubuntu上のコマンドでも確認可能です。
# php /var/www/html/info.php |head phpinfo() PHP Version => 8.1.2-1ubuntu2.18 System => Linux falcon-zabbix 6.8.0-40-generic #40~22.04.3-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 30 17:30:19 UTC 2 x86_64 Build Date => Jun 14 2024 15:52:55 Build System => Linux Server API => Command Line Interface Virtual Directory Support => disabled Configuration File (php.ini) Path => /etc/php/8.1/cli Loaded Configuration File => /etc/php/8.1/cli/php.ini
PHP8.1-fpmのインストール
# apt install php-fpm
apache2との連携設定をします。
# nano /etc/apache2/sites-available/default-ssl.conf ## 最終行の</VirtualHost> の前に以下を追記 ## <VirtualHost *:80> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/" </FilesMatch> </VirtualHost> </IfModule> 環境設定を実施 # a2enmod proxy_fcgi setenvif Considering dependency proxy for proxy_fcgi: Enabling module proxy. Enabling module proxy_fcgi. Module setenvif already enabled To activate the new configuration, you need to run: systemctl restart apache2 # a2enconf php8.1-fpm Enabling conf php8.1-fpm. To activate the new configuration, you need to run: systemctl reload apache2 php-fpm apache2を再起動 # systemctl restart php8.1-fpm apache2
再度テストスクリプトを作成します。
# echo '<?php phpinfo(); ?>' > /var/www/html/info.php
Webブラウザから「http://(IPアドレス)/info.php」にアクセスし、Server API :FPM/FastCGIであれば、設定はOKです。
zabbixのインストール
Zabbixは、公式HPの手順どおりに進めていきます。
Zabbixは、Ubuntu公式リポジトリに存在しないため、手動でリポジトリを追加する必要があります。
# wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu22.04_all.deb # dpkg -i zabbix-release_7.0-2+ubuntu22.04_all.deb # apt update
Zabbixをインストールします。
公式ページにはphpモジュールのインストールが記載されていないため、同時にインストールします。
# apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2 php-mysql php-gd php-bcmath php-net-socket
初期データベースの作成を行います。
# 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 オプションを無効にします。
# mysql -uroot -p password mysql> set global log_bin_trust_function_creators = 0; mysql> quit;
ファイル /etc/zabbix/zabbix_server.conf を編集し、起動します。
# nano /etc/zabbix/zabbix_server.conf ## 100行目あたりにある以下の値を記載します ## DBName=zabbix #デフォルトのまま DBUser=zabbix #デフォルトのまま DBPassword=password #データベースのpasswordを入力 zabbixを起動します # systemctl restart zabbix-server # systemctl enable zabbix-server
同時に自身監視用のzabbix-agentの設定も行います。
# nano /etc/zabbix/zabbix_agent2.conf ## 80行目あたりにある以下の値を記載します ## Server=127.0.0.1 #デフォルトのまま ServerActive=127.0.0.1 #デフォルトのまま Hostname=falcon.local.org #サイト名を書き換え # systemctl restart zabbix-agent2
Zabbixの要件にあうようにphp設定を行います。
/etc/php/8.1/fpm/pool.d/www.confの最終行に以下を記載し、php-fpmを再起動します。
# nano /etc/php/8.1/fpm/pool.d/www.conf ## 最終行に以下の値を記載します ## ;php_admin_value[memory_limit] = 32M 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 php_value[always_populate_raw_post_data] = -1 php_value[date.timezone] = Asia/Tokyo # systemctl restart apache2 php8.1-fpm
Webブラウザから「http://(IPアドレス)/zabbix」にアクセスし、zabbixが起動していることを確認します。
前提条件はPHPで設定した値になっています。
データベースのパスワードは、公式HPどおりに設定している場合は「password」になります。
ログイン画面の初期アカウントは以下のとおりです。
- ユーザー名:Admin
- パスワード:zabbix
ログインできるとZabbixのダッシュボード画面になります。
以上がZabbixのインストール要領になります。
この要領通りにすれば大きな障害なくインストール出来ると思います。
Webエンジンは使い慣れたapache2を使っていますが、何かの機会があればnginxも使ってみたいと思います。
Zabbixの監視設定については、直感的な設定ができずハマる方が多いと思うので、別途記事で記載します。