Zabbix 6.4をソースからインストールする手順(RockyLinux9+Azure Database for PostgreSQL Flexible Server)

2020-06-23Azure,Database for PostgreSQL,Others,Rocky Linux/CentOS,Zabbix

Zabbixサーバーをソースからインストールする手順です。
Zabbixのバージョンは、6.4を利用しています。
Rocky Linux 9を搭載した仮想マシン(Azure VM)と、Azure Database for PostgreSQL フレキシブル サーバーを利用しています。

    • Zabbixソースをダウンロード
    • 関連パッケージをインストール
    • OSとデータベースのユーザーを作成
    • PostgreSQLの設定
    • Timescaledbの設定
    • Zabbixをソースからインストール
    • Zabbixの設定ファイルを作成
    • Rocky LinuxのSELinux設定
    • Zabbixの動作確認

パッケージを利用したインストール手順については、こちらで紹介しています。
この例では、Azure Database for MySQL フレキシブル サーバーを利用しています。

※本記事内では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。

スポンサーリンク

Azureのリソースを準備

環境

仮想マシンとAzure Database for PostgreSQL フレキシブル サーバーを、同じ仮想ネットワーク内に作成して利用しています。

使用したパッケージやバージョンです。

    • Web ServerはApacheを利用
    • Zabbixはバージョン6.4を利用
    • Rocky Linuxは9.3を利用
    • PostgreSQLは15.4を利用

リソースの設定内容です。

各項目    
仮想マシン
(Azure VM)
名前 vm-zabbix-02
IPアドレス 10.0.1.7
OS Rocky Linux 9(9.3)
Azure Database for PostgreSQL
フレキシブル サーバー
名前 psql-zabbix-01
(psql-zabbix-01.postgres.database.azure.com)
ネットワーク VNET統合
(test-vnet-01/psql-snet-01)

仮想マシンを準備

Zabbixサーバーとして使用する仮想マシンを準備します。
MarketplaceにあるRocky Linux 9のイメージを利用して作成しています。

Azure Database for PostgreSQL フレキシブル サーバーを準備

Azure Database for PostgreSQL フレキシブル サーバーのリソース作成手順については、こちらで紹介しています。
ネットワークについては、VNET統合を利用し、ローカルネットワークからのアクセスのみ許可しています。

Zabbixサーバーをソースからインストール

公式サイトのインストール手順を参考にして作業を進めます。

ソースコードからのインストール

日本語ロケールをインストール

仮想マシンに日本語ロケールをインストールします。
英語のロケールもあわせてインストールします。

[root@vm-zabbix-02 ~]# dnf -y install glibc-langpack-en.x86_64 glibc-langpack-ja.x86_64

※dnf search locale jaコマンドを実行すると、日本語パッケージ名が表示されます。
※英語のロケールが存在しない場合、ZabbixのGUIでエラーが発生することがあったため、あわせてインストールしています。

公式サイトからZabbixのソースをダウンロード

公式サイトからZabbixのソースをダウンロードします。

Download ready-to use Zabbix distributives

ダウンロードしたアーカイブ済みのソースファイルを、任意のディレクトリ(/usr/local/src/)に解凍します。

[root@vm-zabbix-02 ~]# curl -O https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.10.tar.gz
[root@vm-zabbix-02 ~]# tar -zxvf zabbix-6.4.10.tar.gz -C /usr/local/src/

PostgreSQLクライアントをインストール

PostgreSQLクライアント関連のパッケージをインストールします。
今回はマネージドデータベースを利用するため、クライアントのみをインストールします。
ZabbixサーバーからAzure Database for PostgreSQL フレキシブル サーバーに接続する際に使用します。

[root@vm-zabbix-02 ~]# dnf -y install postgresql postgresql-devel

httpd関連のパッケージをインストール

httpd関連のパッケージをインストールします。

[root@vm-zabbix-02 ~]# dnf -y install httpd

php関連のパッケージをインストール

php関連のパッケージをインストールします。

[root@vm-zabbix-02 ~]# dnf -y install php-common php-pdo php-pgsql php-ldap php-bcmath php-mbstring php-xml php-gd php-fpm

関連パッケージをインストール

関連パッケージをインストールします。
パッケージが不足している場合、configure実行時にエラーが発生します。
エラー内容に応じて、必要なパッケージを追加でインストールします。

[root@vm-zabbix-02 ~]# dnf -y install gcc gcc-c++
[root@vm-zabbix-02 ~]# dnf -y –enablerepo=crb install OpenIPMI-devel
[root@vm-zabbix-02 ~]# dnf -y install net-snmp net-snmp-devel
[root@vm-zabbix-02 ~]# dnf -y install libcurl-devel libevent-devel libxml2-devel pcre-devel

OS上にZabbixグループとユーザーを作成

OS上にZabbixのグループとユーザーを作成します。

ソースコードからのインストール(ユーザーアカウントの作成)

[root@vm-zabbix-02 ~]# groupadd –system zabbix
[root@vm-zabbix-02 ~]# useradd –system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c “Zabbix Monitoring System" zabbix

PostgreSQL上でZabbixユーザーとZabbixのデータベースを作成

PostgreSQL上にZabbixユーザーとZabbix用のデータベースを作成します。
ユーザー名とデータベース名は、デフォルト値であるzabbixとしています。

データベースの作成

[root@vm-zabbix-02 ~]# psql -h psql-zabbix-01.postgres.database.azure.com -p 5432 -U 管理者ユーザー名 -d postgres
Password for user 管理者ユーザー名:

postgres=> CREATE USER zabbix WITH PASSWORD 'PostgreSQL上に作成するzabbixユーザーのパスワード’;
postgres=> GRANT zabbix TO 管理者ユーザー名;
postgres=> CREATE DATABASE zabbix OWNER zabbix ENCODING 'Unicode’ TEMPLATE template0;
postgres=> quit

※公式サイトには記載がありませんが、権限不足でエラーになることがあったため、GRANTコマンドで権限を付与しています。

初期スキーマを作成して、SQLでデータをインポート

作成したZabbixのデータベースに、初期スキーマを作成します。
また、SQLを利用してデータをインポートします。
zabbixユーザーでPostgreSQLにログインし、SQLファイルを実行します。

[root@vm-zabbix-02 ~]# psql -h psql-zabbix-01.postgres.database.azure.com -p 5432 -U zabbix -d zabbix
Password for user zabbix:Zabbixユーザー(PostgreSQL)のパスワード’

zabbix=> CREATE SCHEMA AUTHORIZATION zabbix;

zabbix=> \i /usr/local/src/zabbix-6.4.10/database/postgresql/schema.sql
zabbix=> \i /usr/local/src/zabbix-6.4.10/database/postgresql/images.sql
zabbix=> \i /usr/local/src/zabbix-6.4.10/database/postgresql/data.sql

※公式サイトには記載がありませんでしたが、CREATE SCHEMAコマンドでzabbixデータベースにzabbixスキーマを作成しています。

Azure Database for PostgreSQL フレキシブル サーバーでTimescaleDBを有効化

ZabbixはTimescaleDBをサポートしています。
Azure Database for PostgreSQL フレキシブル サーバーはTimescaleDBをサポートしています。
必須ではありませんが、利用することもできます。

Azure Database for PostgreSQL フレキシブル サーバーのデフォルト値は、TimescaleDBが無効になっています。
Azure CLIコマンドやAzure Portalで有効化することができます。
コマンド実行後は、Azure Database for PostgreSQL フレキシブル サーバーが自動的に再起動します。

Azure CLIを使って有効化する場合の手順です。

PS C:> az postgres flexible-server parameter set –resource-group test-rg-01 –server-name psql-zabbix-01 –name shared_preload_libraries –value timescaledb

Azure Portalから有効化する場合の手順です。

サーバーパラメーターでTimescaleDBを有効化
左側のメニューでサーバーパラメーターを選択します。shared_preload_librariesと入力して検索します。
選択肢の中にTIMESCALEDBがあるので、チェックを入れて保存します。
サーバーを再起動します。

ZabbixのデータベースでTimescaleDBの設定

ZabbixのデータベースでTimescaleDBを有効にします。

TimescaleDBのセットアップ

[root@vm-zabbix-02 ~]# psql -h psql-zabbix-01.postgres.database.azure.com -p 5432 -U zabbix -d zabbix
zabbix=>
CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA zabbix CASCADE;
zabbix=> \i /usr/local/src/zabbix-6.4.10/database/postgresql/timescaledb/schema.sql

※公式サイトの記述ではtimescaledb.sqlとなっていますが、ソースからインストールする場合はファイル名が異なりました。解凍したソース内のファイルを確認したところ、schema.sqlが同じ内容であったため、今回はこちらを利用しています。

configureからmake install

Zabbixをソースからインストールしていきます。
英語版マニュアルには、exportコマンドの記載があります。

Installation from sources

[root@vm-zabbix-02 ~]# export CFLAGS="-std=gnu99″
[root@vm-zabbix-02 ~]# cd /usr/local/src/zabbix-6.4.10/
[root@vm-zabbix-02 zabbix-6.4.10]# ./configure –enable-server –enable-agent –with-postgresql –with-openssl –with-net-snmp –with-openipmi –with-libcurl –with-libxml2

~メッセージが表示される~

[root@vm-zabbix-02 zabbix-6.4.10]# make install

~メッセージが表示される~

Zabbix関連のディレクトリを作成

パッケージインストールの設定ファイルを利用するために、関連するディレクトリを作成します。
権限付与やファイルをコピーします。

###ディレクトリ作成###

[root@vm-zabbix-02 ~]# mkdir -m u=rwx,g=rx,o= -p /var/log/zabbix
[root@vm-zabbix-02 ~]# mkdir -m u=rwx,g=rx,o= -p /var/run/zabbix
[root@vm-zabbix-02 ~]# mkdir -m u=rwx,g=rx,o=rx -p /etc/zabbix

[root@vm-zabbix-02 ~]# mkdir -m u=rwx,g=rx,o=rx -p /usr/share/zabbix
[root@vm-zabbix-02 ~]# mkdir -m u=rwx,g=rx,o=rx -p /etc/zabbix/web

###ファイルコピー###

[root@vm-zabbix-02 ~]# cp -rfp /usr/local/sbin/zabbix_* /usr/sbin/
[root@vm-zabbix-02 ~]# cp -rfp /usr/local/etc/zabbix_* /etc/zabbix/
[root@vm-zabbix-02 ~]# cp -rfp /usr/local/src/zabbix-6.4.10/ui/* /usr/share/zabbix/

###権限付与###

[root@vm-zabbix-02 ~]# chown -R root:root /usr/share/zabbix
[root@vm-zabbix-02 ~]# chown -R zabbix:zabbix /var/run/zabbix
[root@vm-zabbix-02 ~]# chown -R zabbix:zabbix /var/log/zabbix
[root@vm-zabbix-02 ~]# chown -R apache:apache /etc/zabbix/web

この手順は必須ではありません。パッケージからインストールした場合のディレクトリ構成に合せるための手順です。後続手順のパスは自身の環境のディレクトリ構成に合せて、読み替えてください。

zabbix_server.confを設定

zabbix_server.confを設定します。
書き換え前後の設定値を表にしています。
PostgreSQLを利用する場合には、DBSchemaの設定が必要になります。

書き換え前 書き換え後
LogFile=/tmp/zabbix_server.log LogFile=/var/log/zabbix/zabbix_server.log
# DBHost=localhost DBHost=psql-zabbix-01.postgres.database.azure.com
# DBPassword= DBPassword=Zabbix(PostgreSQL)ユーザーのパスワード
# DBSchema= DBSchema=zabbix
LogFile=/tmp/zabbix_server.log LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=1 LogFileSize=0
PidFile=/tmp/zabbix_server.pid PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/tmp SocketDir=/run/zabbix
(記述無し) DBTLSConnect= required

sedコマンドを利用して設定します。DBTLSConnectは、echoコマンドを利用して追記しています。

[root@vm-zabbix-02 ~]#sed -i -e “s/^LogFile=\/tmp\/zabbix_server.log/LogFile=\/var\/log\/zabbix\/zabbix_server.log/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# DBHost=localhost/DBHost=psql-zabbix-01.postgres.database.azure.com/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# DBPassword=/DBPassword=PostgreSQL上のZabbixユーザーのパスワード/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# DBSchema=/DBSchema=zabbix/g" /etc/zabbix/zabbix_server.conf

[root@vm-zabbix-02 ~]#sed -i -e “s/^LogFile=\/tmp\/zabbix_server.log/LogFile=\/var\/log\/zabbix\/zabbix_server.log/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# LogFileSize=1/LogFileSize=0/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# PidFile=\/tmp\/zabbix_server.pid/PidFile=\/var\/run\/zabbix\/zabbix_server.pid/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/# SocketDir=\/tmp/SocketDir=\/run\/zabbix/g" /etc/zabbix/zabbix_server.conf
[root@vm-zabbix-02 ~]#echo DBTLSConnect= required >> /etc/zabbix/zabbix_server.conf

zabbix_agentd.confを設定

zabbix_agentd.confを設定します。
書き換え前後の設定値を表にしています。

書き換え前 書き換え後
PidFile=/tmp/zabbix_agentd.pid PidFile=/var/run/zabbix/zabbix_agentd.pid
# LogFileSize=1 LogFileSize=0
LogFile=/tmp/zabbix_agentd.log LogFile=/var/log/zabbix/zabbix_agentd.log

sedコマンドを利用して設定します。

[root@vm-zabbix-02 ~]#sed -i -e “s/^# PidFile=\/tmp\/zabbix_agentd.pid/PidFile=\/var\/run\/zabbix\/zabbix_agentd.pid/g" /etc/zabbix/zabbix_agentd.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^# LogFileSize=1/LogFileSize=0/g" /etc/zabbix/zabbix_agentd.conf
[root@vm-zabbix-02 ~]#sed -i -e “s/^LogFile=\/tmp\/zabbix_agentd.log/LogFile=\/var\/log\/zabbix\/zabbix_agentd.log/g" /etc/zabbix/zabbix_agentd.conf

zabbix.confを作成(php-fpmの設定)

/etc/php-fpm.d/zabbix.confファイルを作成します。
今回は、パッケージインストール時の設定内容を流用しています。

[root@vm-zabbix-02 ~]# vi /etc/php-fpm.d/zabbix.conf

[zabbix]
user = apache
group = apache

listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200

php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

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

※memory_limitなどの設定値は、環境に合わせて適宜増やしてください。

zabbix.confを作成(httpdの設定)

/etc/httpd/conf.d/zabbix.confファイルを作成します。
今回は、パッケージインストール時の設定内容を流用しています。

[root@vm-zabbix-02 ~]# vi /etc/httpd/conf.d/zabbix.conf

#
# Zabbix monitoring system php web frontend
#

Alias /zabbix /usr/share/zabbix

ProxyTimeout 300

<Directory “/usr/share/zabbix">
  Options FollowSymLinks
  AllowOverride None
  Require all granted

  <IfModule dir_module>
   DirectoryIndex index.php
  </IfModule>

  <FilesMatch \.(php|phar)$>
   SetHandler “proxy:unix:/run/php-fpm/zabbix.sock|fcgi://localhost"
  </FilesMatch>
</Directory>

<Directory “/usr/share/zabbix/conf">
  Require all denied
</Directory>

<Directory “/usr/share/zabbix/app">
  Require all denied
</Directory>

<Directory “/usr/share/zabbix/include">
  Require all denied
</Directory>

<Directory “/usr/share/zabbix/local">
  Require all denied
</Directory>

<Directory “/usr/share/zabbix/vendor">
  Require all denied
</Directory>

SELinuxの許可設定

SELinuxで、Zabbixで必要となる許可設定をします。

SELinuxの設定

[root@vm-zabbix-02 ~]# setsebool -P httpd_can_connect_zabbix on
[root@vm-zabbix-02 ~]# setsebool -P httpd_can_network_connect_db on
[root@vm-zabbix-02 ~]# setsebool -P zabbix_can_network on

Rocky Linux 9でのSELinux無効化手順についてはこちらで紹介しています。
SELinuxの無効化は推奨されません。
どうしても無効化する場合は、十分にご注意ください。

zabbix-server.serviceファイルを作成

zabbix-serverのサービスファイルを作成します。
今回は、パッケージインストール時の設定内容を流用しています。

[root@vm-zabbix-02 ~]# vi /usr/lib/systemd/system/zabbix-server.service

[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
After=mysql.service
After=mysqld.service
After=mariadb.service
After=postgresql.service
After=pgbouncer.service
After=postgresql-9.4.service
After=postgresql-9.5.service
After=postgresql-9.6.service
After=postgresql-10.service
After=postgresql-11.service
After=postgresql-12.service
After=postgresql-13.service
After=postgresql-14.service
After=postgresql-15.service
After=postgresql-16.service

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

zabbix-agent.service設定

zabbix-agentのサービスファイルを作成します。
今回は、パッケージインストール時の設定内容を流用しています。

[root@vm-zabbix-02 ~]# vi /usr/lib/systemd/system/zabbix-agent.service

[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target

Zabbixの自動起動設定

Zabbix関連のサービスの起動設定です。
Zabbix関連のサービスを自動起動するように設定します。

Download and install Zabbix

[root@vm-zabbix-02 ~]# systemctl restart zabbix-agent zabbix-server php-fpm httpd
[root@vm-zabbix-02 ~]# systemctl enable zabbix-agent zabbix-server php-fpm httpd

手順確認時にエラーになった事象

公式サイトの手順を確認しながら実施しましたが、何度かつまずくことがありました。
色々とありましたが、主につまずいた部分をまとめると以下のようになります。

    • ./configureのエラー
      • 必要なパッケージ不足が原因
        • パッケージ追加インストールで対応
    • DB type “MYSQL" is not supported by current setup. Possible values POSTGRESQLのエラーメッセージ表示される
      • 設定ミスが原因
          • ディレクトリへの権限設定が足りてなかった
          • zabbix_server.confでDBSchemaの設定が足りてなかった
          • zabbix.conf.phpが初期化されていた
          • SELinuxの設定が足りてなかった(setsebool -P zabbix_can_network on)
    • PostgreSQLのエラー
      • ユーザーに権限付与が追加で必要だった

—広告—

Zabbix Webインタフェースの初期設定

公式サイトのインストール手順を参考にして作業を進めます。

Webインターフェースのインストール

Zabbixフロントエンドの初期設定

http://ZabbixサーバーのIPアドレス/zabbix へアクセスして、Webインターフェイスの設定を行います。
Database hostには、Azure Database for PostgreSQL フレキシブル サーバーのサーバー名を指定します。

    • DBの設定情報
      • データベースタイプ:PostgreSQL
      • データベースホスト:psql-zabbix-01.postgres.database.azure.com
      • データベース名:zabbix
      • データベーススキーマ:zabbix
      • ユーザー:zabbix
      • パスワード:Zabbixユーザー(PostgreSQL)のパスワード
      • データベース接続のTLS暗号化:チェックを入れる
Zabbixフロントエンドの初期設定手順

セットアップ画面が表示されます。
文字コードを選択します。

前提条件のチェック画面です。
すべてOKであることを確認します。

データベース接続の設定です。
各項目を入力します。

※データベースホストを設定すると、データベース接続のTLS暗号化のチェック項目が表示されます。

Zabbixサーバー名やタイムゾーンを設定します。
タイムゾーンは日本時間に設定しています。
確認画面が表示されます。
次のステップへを選択します。

“詳細ファイルが作成できません。"というメッセージが表示されます。設定ファイルのダウンロードのリンクを選択して、zabbix.conf.php をダウンロードします。
ダウンロードしたファイルを案内されたディレクトリにアップロードします。

※ソースからインストールした場合は、この画面が表示されるようです。
※設定ファイルを配置後に再度ボタンを押すと、完了メッセージが表示されます。

Zabbixサーバーへサインイン

初期ユーザーを利用して、Zabbixサーバーへサインインします。

    • 初期ユーザー
      • ユーザー名:Admin
      • パスワード:zabbix
Zabbixサーバーへサインイン
初期ユーザーを利用して、Zabbixサーバーにサインインします。

“Zabbixサーバーの起動"の値が"はい"になっていることを確認できます。
Zabbixサーバーが正常に稼働していることを確認できます。

※Zabbixサーバーのインストールに失敗している場合は、"Zabbixサーバーの起動"の値が"いいえ"になります。

—広告—

最後に

今回は、Zabbix サーバーをソースからインストールする場合の手順を確認しました。
設定手順の中でさまざまなつまずきもありましたが、それらもあわせて確認しています。

引き続き、いろいろ試してみたいと思います。

パッケージを利用したインストール手順については、こちらで紹介しています。
こちらの例では、Azure Database for MySQL フレキシブル サーバーを利用しています。

ZabbixサーバーのHAクラスター構成手順については、こちらで紹介しています。

Zabbixプロキシのインストールからプロキシグループを利用したHA構成手順については、こちらで紹介しています。

ZabbixからSendGridを利用してメール送信するための設定手順については、こちらで紹介しています。

Zabbixを利用したAzureのリソース監視設定方法ついては、こちらで紹介しています。

スポンサーリンク