はじめに
Raspberry Pi 4(64bit)にZABBIXをインストールする方法の自分メモ。
これまでSDカードで運用していて、定期的なSDカードの不良で再構築を行う度に調べるのが面倒なのでまとめました。
これを機にSDカードからSSDに変更しました。
この手順は2024/01/05に実施しました。
64bit OSへのzabbixの導入はソースをダウンロード・コンパイルで実施しないとはまってしまいうまくいきませんでした。
素直に32bit OSへ導入すればよいのですが、折角なので64bitのままで挑戦し成功したので記録しておきます。
導入後にはSSL化とSAML連携を実施したので、こちらも記録しておきます。
zabbixの導入・設定は以下のzabbix documentationを参考にしています。
zabbix documentation − 4. インストール
使用した環境
- Raspberry pi 4 model B Rev 1.2 4GB
- SDカード 8GB
OS初期導入時のみ - Crucial NVMe SSD 512GB
NVMe−USB変換で接続 - 有線LAN接続
手順のまとめ
1. Raspberry Pi 4へのOSのインストール
2. Apache2とPHPとmariadbの導入
3. zabbixのソースのダウンロードとインストールおよび初期設定
4. zabbixの起動とサービス化
5. zabbixの初期化と動作確認
6. SAMLログイン設定
7. zabbixのSSL化
8. SAMLの暗号化
1. Raspberry Pi 4へのOSのインストール
Raspberry Pi 4へのOSの導入は公式の手順に従いRaspberry Pi Imagerを使いました。
起動後にアップデートを実施します。
$ sudo apt update
$ sudo apt full-upgrade
SDカードでは遅いのでUSBに接続したSSDにイメージを移し、SSDで起動できるようにします。
SDカードのイメージをSD Card Copierを利用してSSDにコピーします。
コピー後、USB起動できるように設定します。
$ sudo raspi-config
以上でUSB接続されたSSDからOSが起動します。
以降GUIは必要ないのCLIに変更します。
$ sudo raspi-config
$ sudo reboot
これ以降、OSの再導入時はRaspberry Imagerで直接SSDにイメージを導入し、ドライブをUSB接続し電源を入れればUSBから起動します。
SDカードからのコピーは必要ないです。
IPの固定化とホスト名の変更
zabbixサーバーとして運用するため固定IPで運用します。
今回は以下の設定とします。
- Hostname : zabbix.test.lab
- IP : 192.168.10.10/24
- Default Gateway : 192.168.10.1
- DNS : 192.168.10.1,9.9.9.9
$ sudo raspi-config nonint do_hostname zabbix.test.lab
$ sudo nmcli connection modify 'Wired connection 1' ipv4.addresses 192.168.10.10/24
$ sudo nmcli connection modify 'Wired connection 1' ipv4.gateway 192.168.10.1
$ sudo nmcli connection modify 'Wired connection 1' ipv4.dns 192.168.10.1,9.9.9.9
有線接続名を’Wired connection 1’としています。導入後何もしていなければこの名前だと思います。
ここで念のため再起動します。
$ sudo reboot
2. Apache2とPHPとmariadbの導入
zabbixの前提環境としてApache2、PHP、mariadbを導入します。
DBについてはこれ以外の選択肢もありますが、参考文献の多いmariadbを選択しました。
導入するモジュールは以下を参考にしました。
zabbix documentation − 2 要件
Apache2の導入
aptでApache2を導入します。
$ sudo apt install apache2
PHPの導入
PHPも同様にaptで導入します。
$ sudo apt install php
$ sudo apt install php-gd php-bcmath php-xml php-mbstring php-ldap php-mysql
$ sudo apt install php-fpm
mariadbの導入
mariadbも同様です。
$ sudo apt install mariadb-server
mariadbの初期設定を以下のように実施します。
$ sudo mysql_secure_installation
初期設定の各質問にはすべて'Y'で回答
mariadbにアクセスできることを確認
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8738
Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit;
Bye
3. zabbixのソースのダウンロードとインストールおよび初期設定
ソースのダウンロード
以下よりzabbixのソースをダウンロードします。
Download and install Zabbix
導入時は以下で実施しています。
$ wget https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.10.tar.gz
$ tar xzvf zabbix-6.4.10.tar.gz
$ sudo mv zabbix-6.4.10 /usr/local/src/
リンクは最新の安定版のURLに読み替えてください。
ユーザーの作成
zabbixを稼働させるユーザーを作成します。
$ sudo addgroup --system --quiet zabbix
$ sudo adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix
必要なモジュールの導入
zabbixを以下の設定でビルドするため必要なモジールを導入します。
$ cd /usr/local/src/zabbix-6.4.10
$ ./configure --enable-server --enable-agent --enable-agent2 --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ssh2 --with-ldap
--with-ldapは今のところLDAP連携の予定はないので必要ない
--enable-agentもagent2を使うことにしたので必要ないかも
agent関係は $ sudo apt install zabbix_agent
とかで導入すればよいので必要ないかも
ということで、オプションはこんな感じでよいかと。
./configure --enable-server --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ssh2
上記のオプションでビルドするために必要なモジュールは以下の通りです。
$ sudo apt install libpcre3-dev libevent-dev libmariadb-dev libcurl4-openssl-dev libssh2-1-dev libsnmp-dev libopenipmi-dev libxml2 libxml2-dev libldap2-dev golang gettext
--with-ldap を使わないならldapのインストールも必要ない
--enable-agent2 しないなら golang も必要ない
agentについては$ sudo apt install zabbix-agent
とか$sudo apt install zabbix-agent2
で導入できるので、ここでビルドする必要はそもそもない。
ということで、必要なモジュールはこれくらいかと。
$ sudo apt install libpcre3-dev libevent-dev libmariadb-dev libcurl4-openssl-dev libssh2-1-dev libsnmp-dev libopenipmi-dev libxml2 libxml2-dev golang gettext
DBの初期化
mariadbにzabbix用にDB作成し、初期設定を実施します。
DB初期化作業は以下を参考にしました。
1 データベースの作成
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8767
Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin;
MariaDB [(none)]> create user 'zabbix'@'localhost' identified by 'password';
MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'localhost';
MariaDB [(none)]> SET GLOBAL log_bin_trust_function_creators = 1;
MariaDB [(none)]> quit;
Bye
上記のユーザーのパスワード 'password' は適宜適切なパスワードを使用してください。
作成したDBにスキーマ・イメージ・データをインポートします。
$ cd /usr/local/src/zabbix-6.4.10/database/mysql
$ cat schema.sql | mysql -u zabbix -p zabbix
$ cat images.sql | mysql -u zabbix -p zabbix
$ cat data.sql | mysql -u zabbix -p zabbix
log_bin_trust_function_creatorsを無効にします。
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8767
Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SET GLOBAL log_bin_trust_function_creators = 0;
MariaDB [(none)]> quit;
Bye
zabbixのインストール
以下の手順でzabbixをインストールします。
$ cd /usr/local/src/zabbix-6.4.10
$ ./configure --enable-server --enable-agent --enable-agent2 --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ssh2 --with-ldap
事前に必要なモジュールを導入しているのでエラーなしで上記コマンドは終了するはず。
もしエラーとなった場合は、該当する必要なモジュールを導入する。
$ make
念のため、エラーがないことを確認。
$ sudo make install
設定ファイルの編集
zabbixサーバーとエージェントの起動の前に設定ファイルの編集を行います。
zabbix agent
/usr/local/etc/zabbix_agentd.conf ファイルを編集します。
zabbix agent2の場合は /usr/local/etc/zabbix_agent2.conf です。
このファイルは、zabbix_agentdがインストールされているすべてのホストで設定する必要があります。
Zabbix server のIPアドレスを指定する必要があります。他のホストからの接続は拒否されます。
$ cd /usr/local/etc
$ sudo vi /usr/local/etc/zabbix_agentd.conf
- Server=127.0.0.1
+ Server=127.0.0.1,192.168.10.10,zabbix.test.lag
ここ以外にもPIDファイルやログファイルの出力先の指定もした方がよいでしょう。
$ sudo mkdir /var/log/zabbix
$ sudo chown zabbix:zabbix /var/log/zabbix
$ sudo mkdir /var/run/zabbix
$ sudo chown zabbix:zabbix /var/run/zabbix
$ sudo vi /usr/local/etc/zabbix_agentd.conf
- # PidFile=/tmp/zabbix_agentd.pid
+ PidFile=/var/run/zabbix/zabbix_agentd.pid
- # LogFile=/tmp/zabbix_agentd.log
+ LogFile=/var/log/zabbix/zabbix_agentd.log
zabbix server
/usr/local/etc/zabbix_server.conf ファイルを編集します。
データベース名、ユーザー名、パスワード(使用している場合)を指定する必要があります。
$ cd /usr/local/etc
$ sudo vi /usr/local/etc/zabbix_server.conf
- DBPassword=
+ DBPassword=password
上記パスワードはDB初期化時に指定した適切なパスワードに読み替えてください。
ここ以外にもPIDファイルやログファイルの出力先の指定もした方がよいでしょう。
$ sudo vi /usr/local/etc/zabbix_server.conf
- # PidFile=/tmp/zabbix_server.pid
+ PidFile=/var/run/zabbix/zabbix_server.pid
- # LogFile=/tmp/zabbix_server.log
+ LogFile=/var/log/zabbix/zabbix_server.log
フロントエンドへの言語の追加
利用可能な言語を確認します。
$ locale -a
必要な言語がリストされていない場合は/etc/locale.gen
ファイルを開き、必要なロケールのコメントを解除します。 ZabbixはUTF-8エンコーディングを使用するため、UTF-8文字セットを使用してロケールを選択する必要があります。
- # en_US.UTF-8 UTF-8
+ en_US.UTF-8 UTF-8
- # ja_JP.UTF-8 UTF-8
+ ja_JP.UTF-8 UTF-8
その後、以下を実行します。
$ sudo locale-gen
ここでwebサーバーを再起動してください。
$ sudo systemctl restart apache2
Zabbixの翻訳ファイルを手動で生成するには以下のコマンドを実行します。
$ cd /usr/local/src/zabbix-6.4.10
$ make gettext
$ ui/locale/make_mo.sh
4. zabbixの起動とサービス化
zabbix_server を起動します。
$ zabbix_server
zabbix_agentd を起動します。
$ zabbix_agentd
Zabbix web interface のインストール
zabbixのUIを稼働させるために必要なファイルをコピーします。
念のため、apache2関連を再起動します。
$ sudo mkdir /var/www/html/zabbix
$ cd /usr/local/src/zabbix-6.4.10/ui
$ sudo cp -a . /var/www/html/zabbix
$ sudo chown -R zabbix:zabbix /var/www/html/zabbix
$ sudo systemctl stop apache2
$ sudo systemctl stop php8.2-fpm
$ sudo systemctl start php8.2-fpm
$ sudo systemctl start apache2
5. zabbixの初期化と動作確認
zabbixが稼働できているかweb interfaceにアクセスして確認します。
http://zabbix.test.lab/zabbix
言語を日本語に変更します。
プルダウンから日本語を選択します。
次のステップに進みます。
php.iniの設定内容に修正が必要です。
画面に表示されている内容を修正します。
/etc/php/8.2/apache2/php.ini
- post_max_size = 8M
+ post_max_size = 16M
- max_execution_time = 30
+ max_execution_time = 300
- max_input_time = 60
+ max_input_time = 300
修正後にapache2関連の再起動
$ sudo systemctl stop apache2
$ sudo systemctl stop php8.2-fpm
$ sudo systemctl start php8.2-fpm
$ sudo systemctl start apache2
次のステップに進みます。
内容を確認して、次のステップに進みます。
サーバー名とタイムゾーンを設定します。
設定したパラメーターを確認します。
画面の指示の通り、設定ファイルを所定のディレクトリに保存します。
設定ファイルを手元にダウンロードして、これをzabbixサーバーの/tmpにアップロードします。
その後、指定の場所に保存します。
$ sudo mv /tmp/zabbix.conf.php /var/www/html/zabbix/conf/zabbix.conf.php
無事インストール完了
ログイン画面が表示されました。
初期ユーザーのAdmin/zabbixでログインします。
zabbix サーバーがインストールでき、稼働できていることが確認できました。
zabbix serverとzabbix agentのサービス化
Zabbix Server
サービスファイルの作成
$ cd /etc/systemd/system
$ sudo vi zabbix-server.service
ファイルは以下の通りとしています。
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="DAEMON_ARGS= -c /usr/local/etc/zabbix_server.conf"
EnvironmentFile=-/etc/default/%p
Type=simple
KillMode=control-group
PIDFile=/var/run/zabbix/zabbix_server.pid
ExecStart=/usr/local/sbin/zabbix_server $DAEMON_ARGS
ExecStop=/bin/sh -c '[ -n "$1" ] && kill -s TERM "$1"' -- "$MAINPID"
RestartSec=10s
User=zabbix
Group=zabbix
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
自動起動を有効にします。
$ systemctl enable zabbix-server.service
サービスを起動します。
$ systemctl start zabbix-server
Zabbix agent
サービスファイルの作成
$ cd /etc/systemd/system
$ vi zabbix-agent.service
こちらは apt で導入した場合に配置される/lib/systemd/system/zabbix-agent.service
を参考にしました。
[Unit]
[Unit]
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target
[Service]
Type=simple
User=zabbix
Group=zabbix
ExecStart=/usr/sbin/zabbix_agentd --foreground
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Agentを$sudo apt install zabbix-agent
で導入している場合は/lib/systemd/system/zabbix-agent.service
があるので、上記は必要ない。
zabbix-agent2 の場合も同様。
自動起動を有効にします。
$ systemctl enable zabbix-agent
サービスを起動します。
$ systemctl start zabbix-agent
6. SAMLログインの設定
IDaaSと認証連携を行います。
IDaaSにはIBM Security Verifyを利用しています。SAML連携なので他のIDaasでも基本は同じはずです。
IBM Security Verifyは以下より無料トライアルの利用が可能です。
IBM Security Verify Trial
zabbix SAML設定は以下を参考にしています。
ZABBIX - SAML設定
まずは暗号化無しで連携
まずは証明書の取得・配置の必要ない暗号化設定なしで連携設定を行います。
この状態でSAML連携ができていることを確認した後に、暗号化設定などを実施します。
IBM Security Verifyの設定
IBM Security VerifyにAdminモードでログインし、アプリケーションメニューよりアプリケーションを追加します。
アプリケーションの追加ボタンを押した後に表示されるダイアログでzabbix
と入力します。
zabbixを選択し、アプリケーションの追加を行います。
アプリケーションの追加画面になりますので、ここで設定を行います。
一般タブでホスト名を入力します。
プロバイダーIDにはzabbixで入力するのと同じ値を設定します。
ここではzabbix-verify-SAML-integration
としました。
アサーション・コンシューマー・サービスURLとターゲットURLは以下の通りです。
SAMLサブジェクト、属性マッピングは以下のようにemailを指定します。
SAMLサブジェクト、属性マッピングについてはemail以外でも問題ないです。
適切な値を設定してください。
zabbix側の設定
メニューよりユーザー、認証を開き、SAML認証の設定タブに移動します。
zabbixのSAML認証画面でSAML認証の有効化ボタンをチェックします。
各項目はIBM Security Verifyの画面に表示されていた内容を使用します。
ユーザー名の属性はUsername
とします。
ユーザーの作成
IBM Security Verifyでzabbixにログインするユーザーを作成します。
ここで重要なのは優先Eメール
です。この値をzabbix側で作成するユーザー名と一致させます。
IBM Security Verifyで作成したユーザーの優先Eメールと同じユーザー名でzabbixにユーザーを作成します。
IdPの証明書の配置
IDP cert fileとしてIBM Security Verifyの画面に表示されている証明書を/var/www/html/conf/certs/idp.crt
として保存します。
保存したファイルの所有者をzabbixに変更します。
$ cd /var/www/html/zabbix/conf/certs
$ sudo chown www-data:www-data idp.crt
$ sudo chmod 400 idp.crt
SAMLログインの検証
SAMLでのログインを検証するため、一度zabbixおよびIBM Security Verifyからログアウトします。
zabbixにアクセスし、SAMLログインを検証します。
ログイン画面に表示されている”SSO(SAML)でサインイン"をクリックします。
IdPの認証画面 - IBM Security Verifyのログイン画面が表示されます。
まだzabbix/apache2のSSL化をしていないため、警告が表示されます。
ここはこのまま進めます。
SAMLでのログインに成功しました。
SCIMの設定を行うことでzabbix側にユーザーがない場合に自動的にユーザーの作成が可能です。
7. zabbixのSSL化
このままですと、ログイン時に毎回警告が出ますのでSSL化を行います。
SSLに必要な証明書はLet's Encryptで取得しました。
Let's Encryptで取得した証明書等 server.crt/server.key を/tmp
等に一旦アップロードし、これを配置します。
$ sudo mkdir /etc/apache2/ssl
$ sudo mv /tmp/server.crt /etc/apache2/ssl
$ sudo mv /tmp/server.key /etc/apache2/ssl
$ sudo chown root:root /etc/apache2/ssl/*
$ sudo chmod 400 /etc/apache2/ssl/*
配置した証明書が利用されるようにApache2を設定します。
$ sudo a2enmod ssl
$ sudo vi /etc/apache2/sites-available/default-ssl.conf
ファイル内の以下の項目を設定します。
- SSLCertificateFile
- SSLCertificateKeyFile
この項目には先ほど配置したファイルを指定します。
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLをサイトで有効にします。
$ sudo a2ensite default-ssl
$ sudo systemctl restart apache2
以上でhttpsでのアクセスが可能になります。
IBM Security Verifyの設定でhttp
となっているところをhttps
に変更します。
以上でSSO/SAML時の警告が表示されなくなります。
8. SAMLの暗号化
ここまでの設定で通信がSSLで暗号化されました。
さらにSAML Assertionの暗号化や署名設定を行います。
Apache2のSSL化に利用したのと同じ証明書を利用して、SAML Assertionの暗号化や署名の設定を行います。
SSL化で使用した証明書等を/var/www/html/zabbix/conf/certs
にsp.crt,sp.keyとして配置します。
$ sudo cd /var/www/html/zabbix/conf/certs
$ sudo cp /etc/apache2/ssl/* ./
$ sudo mv server.crt sp.crt
$ sudo mv server.key sp.key
$ sudo chown www-data:www-data sp.*
$ sudo chmod 400 sp.*
zabbixのSAML設定で以下をチェックします。
サイン
IBM Security Verifyでは以下の設定を行います。
上記で配置した証明書をIBM Security Verifyに配置します。
管理画面のセキュリティー → 証明書の画面を開き、署名証明書の追加
ボタンをクリックします。
表示されるダイアログで証明書を指定しアップロードします。
アプリケーションよりzabbix連携設定を開きます。
サインオンタブの署名オプションをチェックし、先ほどアップロードした証明書を選択します。
次に暗号化オプションのアサーションの暗号化をチェックし、こちらにも先ほどアップロードした証明書を選択します。
以上で設定が完了です。
以後、SAML連携暗号化されメッセージ・アサーションは署名を確認して行われます。