Ubuntu22.04にZabbix7を構築

Linux

自宅の仮想サーバーやアクセスポイントが増えてきたため、ネットワーク監視サーバーソフトである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 is being downloaded over 4 000 000 times every year for a reason. Download Zabbix for free and try it yourself!

今回の環境構築は、以下の設定を入れております。

構築手順

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の監視設定については、直感的な設定ができずハマる方が多いと思うので、別途記事で記載します。