Zabbix 5.0をソースからインストールしてみた

2020-06-23Others,Zabbix

前回、Azure環境上に、Zabbix 5.0をセットアップしてみたのですが、Azure Database for MariaDBとの接続が暗号化できませんでした。

【実際に出力されたエラーメッセージ】

“DBTLSConnect" configuration parameter cannot be used: Zabbix server was compiled

エラーメッセージから推測するにZabbix5.0をソースからコンパイルしてセットアップする必要がありそうという事でZabbix5.0 をソースからコンパイルしてセットアップしてみました。

今回構築したシステム環境は前回と同様に下記の通りになります。

    • ZabbixサーバはAzure VMを利用 (Market Placeからデプロイしたものを利用)
    • ZabbixサーバのOSはCentOS 7.7を利用
    • DBはAzure Database for MariaDB を利用
    • Zabbixは5.01を利用

今回は、前回同様に、Azure VMやOSのセットアップやAzure Database for MariaDBのセットアップが終了している前提で作業を進めます。SElinuxやFirewalldは停止している前提(セキュリティ的にはお勧めしません。今回の設定メインはここじゃないので割愛と言う事です。)で作業を進めています。

Azure Database for MariaDBの接続設定等は、前回の記事(3.Azure Database for MariaDBでZabbixを利用する為の設定を行う)を参考願います。

また、Azure Database for MariaDBの構築は、以下の記事に纏めておりますので、こちらを参照願います。

スポンサーリンク

パッケージのインストール作業

まず、最初にパッケージのインストール作業を実施します。

環境に合わせて適時修正頂ければと思います。バージョンその時の最新の情報を確認して適時修正して下さい。

セットアップするユーザーの権限に応じて、SUDOを利用してセットアップを実施して下さい。

PHP関連とhttpdのパッケージをyumを使ってインストール

コンパイル時やZabbixセットアップ時に要求されたパッケージを纏めてインストールします。

#PHP関連のパッケージをインストールします。SCLを利用しています。

[user@server ]#yum -y install centos-release-scl
[user@server ]#yum -y install rh-php72

[user@server ]#yum install -y rh-php72-php-ldap rh-php72-php-bcmath rh-php72-php-fpm rh-php72-php-mysqlnd rh-php72-php-gd rh-php72-php-mbstring

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

[user@server ]#yum -y install httpd

MySQL(MariaDB)関連のパッケージをインストール

#MariaDBクライアントをインストールします。最初にリポジトリを登録しています。

[user@server ]#curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
[user@server ]#vi /etc/yum.repos.d/MariaDB.repo

#新規にファイルが作成されますので、以下の内容を貼り付けて保存します。

[mariadb]
name = MariaDB
baseurl=http://yum.mariadb.org/10.3/centos7-amd64
# alternative: baseurl=http://archive.mariadb.org/mariadb-10.3.14/yum/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

[user@server ]#yum -y install MariaDB-client MariaDB-shared mariadb-devel

Zabbixコンパイル時に必要となるパッケージをインストール

Zabbixコンパイル時のオプションによって必要となるパッケージが異なります。コンパイル時にエラーとなった場合は追加で必要なパッケージをインストールしてください。(対象VMにOpenSSL等が入ってない場合は別途パッケージ追加して下さい。)

#パッケージをインストールする際に必要なので

[user@server ]#yum -y install epel-release

#コンパイル自体に必要になので

[user@server ]#yum -y install gcc
[user@server ]#yum -y install gcc-c++

#コンパイル時のオプションをつけると必要になるので

[user@server ]#yum -y install net-snmp net-snmp-devel
[user@server ]#yum -y install libcurl-devel
[user@server ]#yum install -y libssh2*
[user@server ]#yum -y install OpenIPMI-tools OpenIPMI-devel
[user@server ]#yum -y install libevent-devel
[user@server ]#yum -y install libxml2-devel
[user@server ]#yum -y install openldap-devel

goをセットアップする

yumでもgoのインストール可能なのですが、実際にyumを使ってインストールするとzabbixコンパイル時にエラーとなります。この事象は既知のバグらしくサイトからダウンロードして利用します。

#パッケージをダウンロードします

[user@server ]#wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz

#/usr/localにgolangを置く

[user@server ]#tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz

#PATHを通す。永続化させる為にファイルにも書く。

[user@server ]#export PATH=$PATH:/usr/local/go/bin

[user@server ]#vi /etc/profile.d/go.sh

#/bin/bash
export GOROOT=/usr/local/go
export GOPATH=$GOROOT/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Zabbixをソースからコンパイルしてインストールする

Zabbixをダウンロードしてコンパイルします。今回作業は/usr/local/srcで実施しています。

#Zabbixをダウンロードする

[user@server ]#wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.1.tar.gz

[user@server ]#tar xzvf zabbix-5.0.1.tar.gz

[user@server ]#cd zabbix-5.0.1/

#Zabbixユーザーを作成する

[user@server ]#mkdir -m u=rwx,g=rwx,o= -p /usr/lib/zabbix

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

[user@server ]#chown zabbix:zabbix /usr/lib/zabbix

#Zabbixをコンパイルする

[user@server ]#./configure –enable-server –enable-agent –enable-agent2 –with-mysql=/usr/bin/mariadb_config –with-openssl –with-net-snmp –with-openipmi –with-libcurl –with-libxml2 –with-ssh2 –with-ldap
[user@server ]#make

[user@server ]#make install

エラーが発生せずに終了したら、コンパイル終了です。

Azure Database for MariaDBでZabbixを利用設定を行う

前回と同様に設定を行います。DBの文字コード設定とMariaDB上にZabbixユーザーを行います。

Azure Database for MariaDBの文字コード設定

Azure Database for MariaDBの画面でサーバパラメータを選択します。

以下の通りcharacter_set_serverにUTF8、collation_serverにUTF8_BINを選択します。

設定が終わったら保存します。

データベースとDBユーザーを作成

DBユーザーはZabbixで作成しています。DBユーザーを@Localhostで作成すると外部からアクセスできないので、今回はZabbixのサーバのグローバルIPを設定します。(環境に応じて変更してください。)

#DBログイン時にAzure Database for MariaDBサーバ管理者のパスワードが必要になりますので適時入力してください。

[user@server ]#mysql -h サーバ名 -u サーバ管理者名 -p –ssl

MySQL [(none)]>create database zabbix character set utf8 collate utf8_bin;

MySQL [(none)]> Grant all privileges on zabbix.* to zabbix@アクセス元のIP identified by 'パスワード’;

Zabbixの初期設定用SQLを実行

Zabbixの初期設定を行うSQLを流します。

#Zabbixを解凍したディレクトリに移動します。解凍されたファイル内のdatabase/mysqlに、実行すべきsqlが配置されています。

[user@server ]#cd /usr/local/src

[user@server ]#cd zabbix-5.0.1/database/mysql

#パスワードが必要になりますので適時入力してください。

[user@server ]#mysql -h サーバ名 -u zabbix zabbix -p –ssl < database/mysql/schema.sql

[user@server ]#mysql -h サーバ名 -u zabbix zabbix -p –ssl < database/mysql/images.sql

[user@server ]#mysql -h サーバ名u zabbix zabbix -p –ssl < database/mysql/data.sql

[user@server ]#mysql -h サーバ名 -u -u zabbix zabbix -p –ssl < database/mysql/double.sql

zabbixの設定ファイルを編集をする

rpmを使ってインストールした時とはファイルの場所が異なります。

【ソース】/usr/local/sbin/zabbix_server

【rpm】/usr/sbin/zabbix_server

【ソース】/usr/local/etc/zabbix_server.conf

【rpm】/etc/zabbix/zabbix_server.conf

という感じです。また、ディレクトリも自分で作成する必要があります。

今回はrpmと同じような構成になるように、実体のファイルをコピーする形で実施しています。

なお、シンボリックリンクや、設定ファイルをソースでコンパイルした場合に合わせて編集する形が一般的かと思います。

Zabbixで利用するディレクトリを作成

#Zabbixで利用するディレクトリを作成する(今回はrpm利用時に合わせてみてます。環境に合わせて修正して下さい。)

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /var/log/zabbix
[user@server ]#chown zabbix:zabbix /var/log/zabbix

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /var/run/zabbix
[user@server ]#chown zabbix:zabbix /var/run/zabbix

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /etc/zabbix
[user@server ]#chown zabbix:zabbix /etc/zabbix

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /usr/share/zabbix
[user@server ]#chown zabbix:zabbix /usr/share/zabbix

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /etc/zabbix/web
[user@server ]#chown zabbix:zabbix /etc/zabbix/web

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /var/log/snmptrap
[user@server ]#chown zabbix:zabbix /var/log/snmptrap

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /usr/lib/zabbix/alertscripts/
[user@server ]#chown zabbix:zabbix /usr/lib/zabbix/alertscripts/

[user@server ]#mkdir -m u=rwx,g=rx,o= -p /usr/lib/zabbix/externalscripts/
[user@server ]#chown zabbix:zabbix /usr/lib/zabbix/externalscripts/

再起動後/var/run配下のディレクトリが削除されるので対応する

#/usr/lib/tmpfiles.dにConfファイルを新規作成する

[user@server ]#vi /usr/lib/tmpfiles.d/zabbix-server.conf

d /run/zabbix 0755 zabbix zabbix – –

[user@server ]#vi /usr/lib/tmpfiles.d/zabbix-agent.conf

d /run/zabbix 0755 zabbix zabbix – –

Zabbix関連の設定ファイルやモジュールをコピー

#Zabbixモジュールをコピーする

[user@server ]#cp -rfp /usr/local/sbin/zabbix_* /usr/sbin/

#ZabbixのConfをコピーする

[user@server ]#cp -rfp /usr/local/etc/zabbix_* /etc/zabbix/

#ZabbixのUIをコピーする(UIは解凍したディレクトリのui配下にあります。今回は/var/www/html/zabbixではなくAliaseを利用しています)

[user@server ]#cp -rfp /usr/local/src/zabbix-5.0.1/ui/* /usr/share/zabbix/

#zabbix.conf.phpをコピーする(rpm利用時と違う場所になります)

[user@server ]#cp -p /usr/share/zabbix/conf/zabbix.conf.php.example /usr/share/zabbix/conf/zabbix.conf.php

Zabbix用のhttpd設定ファイルを新規作成

#httpdの設定を行う

[user@server ]#vi /etc/httpd/conf.d/zabbix.conf

#
# Zabbix monitoring system php web frontend
#

Alias /zabbix /usr/share/zabbix

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

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

<FilesMatch \.(php|phar)$>
SetHandler “proxy:unix:/var/opt/rh/rh-php72/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>

zabbix_server.confを設定

zabbix_server.confでDB接続やLog等のディレクトリ設定します。

#設定ファイルのバックアップを取得してから設定します。

[user@server ]#cp -p /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.`date “+%Y%m%d"`
[user@server ]# vi /etc/zabbix/zabbix_server.conf

#設定変更箇所のみ記載すると、こんな感じになります。(Log設定等はZabbixセットアップのデフォルトにしています。)

LogFile=/var/log/zabbix/zabbix_server.log

LogFileSize=0

PidFile=/var/run/zabbix/zabbix_server.pid

SocketDir=/var/run/zabbix

DBHost=サーバ名(XXX.mariadb.database.azure.com)

DBUser=ユーザ名(zabbix@XXX)

DBPassword=パスワード(DB上に作成したZabbixユーザのパスワード)

DBPort=3306

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

AlertScriptsPath=/usr/lib/zabbix/alertscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

DBTLSConnect= required

zabbix_agentd.confを設定

今回はzabbix_agent2.confは割愛します。

#設定ファイルのバックアップを取得してから設定します。

[user@server ]#cp -p /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.`date “+%Y%m%d"`
[user@server ]# vi /etc/zabbix/zabbix_agentd.conf

#設定変更箇所のみ記載すると、こんな感じになります。(Log設定等はZabbixセットアップのデフォルトにしています。)

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Include=/etc/zabbix/zabbix_agentd.d/*.conf

zabbix用のPHPファイルを新規作成

[user@server ]# vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

[zabbix]
user = apache
group = apache

listen = /var/opt/rh/rh-php72/run/php-fpm/zabbix.sock
listen.acl_users = apache
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

php_value[session.save_handler] = files
php_value[session.save_path] = /var/opt/rh/rh-php72/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
php_value[date.timezone] = Asia/Tokyo

zabbix_server、zabbix_agentdをサービス登録

zabbix_serverをサービス登録

#zabbix_serverのサービス登録を実施します

[user@server ]# cd /usr/lib/systemd/system/

[user@server ]# vi 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

[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_agentdをサービス登録

#zabbix_agentdのサービス登録を実施します

[user@server ]# cd /usr/lib/systemd/system/

[user@server ]# vi 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サーバに関するサービスを起動します。

[user@server ]# systemctl start zabbix-agent zabbix-server rh-php72-php-fpm httpd
[user@server ]# systemctl enable zabbix-agent zabbix-server rh-php72-php-fpm httpd

Zabbixにアクセスして設定をする

zabbix Serverにアクセスした設定を行います。初期設定では下記の通りになっています。

    • アクセス先URL : http://ZabbixサーバのIP/zabbix/

(1)URLにアクセスすると下記画面が表示されます。

(2)Next Stepをクリックすると、プレチェックの画面が表示されます。すべてOKであればNext Stepをクリックします。

(3)Next Stepをクリックすると、DBコネクション設定が表示されます。以下の値を入力します。TLS encryptionはチェックを入れてください。これによりDB接続が暗号化されます。

    • Database host : サーバ名(XXX.mariadb.database.azure.com
    • User : ユーザ名(zabbix@XXX)
    • パスワード : パスワード(DB上に作成したZabbixユーザのパスワード)
    • TLS encryption:チェックを入れます

(4)Zabbix server details、Pre-instlation Summary画面はそのまま変更せずに、Next Stepをクリックします。完了するとログイン画面が表示されます。

(5)ログイン画面が表示されたら、初期ユーザーでログインして下さい。

    • ユーザーID ; Admin
    • パスワード : zabbix

(6)ログインが成功すると下記画面が表示されます。

Zabbix server is runningが”Yes”となっていれば正常起動しています。(画面が表示されていてもここのがNoの場合は正常動作していません。)

セットアップがエラーになった場合

DBの接続関連でエラーになった場合、以下のファイルを確認してみて下さい。DB['VERIFY_HOST’]やDB接続情報周りを確認します。

#zabbix_agentdのサービス登録を実施します

[user@server ]# vi zabbix-agent.service

<?php
// Zabbix GUI configuration file.

$DB['TYPE’] = 'MYSQL’;
$DB['SERVER’] = 'サーバ名(XXX.mariadb.database.azure.com)';
$DB['PORT’] = '3306’;
$DB['DATABASE’] = 'zabbix’;
$DB['USER’] = 'ユーザ名(zabbix@XXX)';
$DB['PASSWORD’] = 'パスワード(DB上に作成したZabbixユーザのパスワード)';

// Schema name. Used for PostgreSQL.
$DB['SCHEMA’] = ";

// Used for TLS connection.
$DB['ENCRYPTION’] = True;
$DB['KEY_FILE’] = ";
$DB['CERT_FILE’] = ";
$DB['CA_FILE’] = ";
$DB['VERIFY_HOST’] = false;
$DB['CIPHER_LIST’] = ";

~以下略~

今回はユーザー、設定、暗号化を含む多くの設定をデフォルトで作成しています。環境やセキュリティ等を考えて適時設定は変更するようにして下さい。

その他、メール設定は下記で試しています。