Zabbix 6.4をソースからインストール(RockyLinux9+PostgreSQL Flexible Server)

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

Azureマネージドデータベースを利用したZabbix6(6.4)をソースからインストールする場合の手順纏めです。
Rocky Linux 9の仮想マシン(Azure VM)とAzure Database for PostgreSQL フレキシブル サーバー(Flexible Server)の組み合わせで構築しています。

    • Zabbixソースダウンロード
    • 関連パッケージインストール
    • ユーザー作成
    • PostgreSQL設定
    • Timescaledb設定
    • Zabbixインストール
    • Zabbix設定ファイル作成
    • SELinux設定
    • 動作確認

パッケージを利用した手順についてはこちらに纏めています。
こちらの例ではAzure Database for MySQL フレキシブル サーバー(Flexible Server)を利用しています。

※Azure Database for MariaDBが廃止になるためPostgreSQL フレキシブル サーバー(Flexible Server)を利用した手順に更新しました。
※今回はソースからインストールしてますがパッケージを利用しても同じ構成で構築できます。

スポンサーリンク

リソース準備

環境

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

使用したバージョンです。

    • Web ServerはApacheを利用しています
    • Zabbixのバージョンは6.4を利用しています
    • Rocky Linuxは9.3を利用しています。
    • Azure Database for 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)

仮想マシン(Azure VM)を準備

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

B1sなどの小さすぎる仮想マシンサイズを選択するとデプロイに失敗します。
今回はStandard B2sを利用しています。

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

こちらの参考を手順に作成します。
ネットワークはVNET統合を利用しローカルからのアクセスのみとしています。

今回は検証目的なのでB1msを利用してます。

Zabbixインストール

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

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

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

仮想マシン(Azure VM)に日本語ロケールをインストールします。
英語のロケールも一緒にインストールしています。

[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ユーザー作成

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ユーザーを作成

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コマンドで権限を付与しています。

初期スキーマとデータをインポート

作成したZabbixのデータベースに初期スキーマとデータをインポートします。
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のスキーマを作成しています。

Timescaledbを有効化

Azure Database for PostgreSQL フレキシブル サーバーはTimescaledbがサポートしています。
デフォルトでは無効になっているのでAzure CLIコマンドで有効にします。
コマンド実行後Azure Database for PostgreSQL フレキシブル サーバーを再起動します。

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上で設定する場合です。

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

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

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

ディレクトリ作成

これはパッケージインストールの設定ファイルを利用する為に関連するディレクトリを作成します。
併せて権限付与やファイルコピーも実施しています。

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

[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をソースからインストールして動作させる事は可能です。
その場合は後続手順のパスが異なりますので適時修正して利用下さい。

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を設定します。

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

※RockyLinux9での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関連のサービス起動設定です。
サービスを自動起動するように設定しています。

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.conでDBSchemaの設定が出来てなかった
          • zabbix.conf.phpが初期化されていた
          • SELinuxの設定漏れ(setsebool -P zabbix_can_network on)
    • PostgreSQLのコマンド違い
      • PostgreSQLのバージョン差異が原因
        • TimescaledbがAzure Database for PostgreSQLフレキシブル サーバーの16ではサポートされていなかった
        • 権限付与が追加で必要だった

—広告—

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

初期設定

http://ZabbixサーバーのIPアドレス/zabbixへアクセスしてセットアップを再開します。
Database hostにはAzure Database for PostgreSQLフレキシブル サーバーのサーバ名を設定します。

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

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

セットアップのチェック画面です。
OKである事を確認します。

DBへの接続設定です。
各項目を設定します。

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

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

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

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

ログイン

Zabbixサーバーへログインします。

    • 初期ユーザー名とパスワード
      • ユーザー名:Admin
      • パスワード:zabbix
ログイン
初期ユーザー名とパスワードを使ってログインします。

Zabbiサーバーの起動の値がはいになっています。Zabbixサーバーの稼働を確認出来ます。

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

—広告—

最後に

Zabbix6をソースからインストールする場合の手順を纏めてみました。
Azure Database for PostgreSQL フレキシブル サーバー(Flexible Server)を利用しています。
設定手順の中で色々躓く事も多かったですが一緒に纏めています。

今後も引き続き色々試してみたいと思います。

パッケージを利用した手順についてはこちらに纏めています。
こちらの例ではAzure Database for MySQL フレキシブル サーバー(Flexible Server)を利用しています。

Zabbixでのメール送信設定はこちらに纏めています。

スポンサーリンク