mayumi
最近、社内サーバーのreTerminal(RaspberryPi)が不調で、メインサーバーとして動かすには厳しくなってきました。具体的な原因はまだ調べていませんが、このままだといつ起動しなくなるか心配なので、先週はreTerminal上で動いていた社内サービスをOrangePi5に引っ越しました。
今回は、reTerminalで稼働していたZabbixサーバーをOrangePi5に移行します。構築の手順は過去にreTerminalで行った手順と同じです。
Raspberry Pi(reTerminal)にZabbix6.4 をインストールする
目次
Zabbixシステム要件
最新版のZabbix6.4をインストールします。Zabbix6.4のシステム要件は以下のリンクを参照してください。
zabbix6.4システム要件
今回インストールする環境は以下の通りです。
ハードウェア | Orange Pi 5 16GBメモリ/SSD |
OS | Ubuntu 22.04 LTS |
データベース | PostgreSQL 15.4 |
Webサーバー | Apache 2.4 |
PHP | PHP version 8.1 |
OrangePi5は過去にセットアップしていたものです。
Orange Pi 5をSSDから起動する
Orange Pi 5 ケース
Zabbixサーバのインストール
公式ドキュメントを参考にインストールしていきます。
Zabbixのソース取得
Zabbixのソースの取得します。
# wget https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.13.tar.gz
解凍します。
# tar -zxvf zabbix-6.4.13.tar.gz
# mv zabbix-6.4.13 /usr/local/src/.
Zabbix実行ユーザーの作成
zabbixユーザーを作成します。
# addgroup --system --quiet zabbix
# adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix
Zabbixデータベースの作成
データベースにはPostgreSQLを使用します。新環境(OrangePi5)のPostgreSQLは他のプロジェクトで使うため既にインストール済みとなっています。今回はZabbixサーバーの移行なので、旧環境(reTerminal)のデータを引き継いだデータベースを構築します。
データベースユーザーの作成
zabbix用のデータベースユーザーを作成します。
# sudo -u postgres createuser --pwprompt zabbix
データベースの作成
Zabbixで使うデータベースを作成します。
# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
データのインポート
旧環境(reTerminal)からダンプしたデータをインポートします。最初から構築する場合は、取得したZabbixのソースの中にあるSQLファイルを流します。
# sudo -u zabbix psql -U zabbix zabbix < zabbix.dump
最初から構築する場合
# cd /usr/local/src/zabbix-6.4.13/database/postgresql/
# cat schema.sql | sudo -u zabbix psql zabbix
Zabbixのインストール
# export CFLAGS="-std=gnu99"
# cd /usr/local/src/zabbix-6.4.13
# ./configure --enable-server --with-postgresql --with-net-snmp
途中で不足しているライブラリがあるらしくエラーが発生しました。
# ./configure --enable-server --with-postgresql --with-net-snmp
(省略)
configure: error: Invalid Net-SNMP directory - unable to find net-snmp-config
対処:
# apt install libsnmp-dev
リトライしてみます。まだ、エラーが出ます。
# ./configure --enable-server --with-postgresql --with-net-snmp
(省略)
configure: error: Unable to use libevent (libevent check failed)
対処:
# apt install libevent-dev
リトライします。無事終わりました。
# ./configure --enable-server --with-postgresql --with-net-snmp
(省略)
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
インストールします。
# make install
サーバーの設定
先ほど作成したデータベースの接続情報を設定します。
# vi /usr/local/etc/zabbix_server.conf
Zabbixサーバー起動します。
# zabbix_server
Webインタフェースの設定
取得したZabbixの中にあるフロントのファイルを/var/www/html/zabbix
にコピーします。
# cd /var/www/html
# mkdir zabbix
# cd /usr/local/src/zabbix-6.4.13/ui
# cp -a . /var/www/html/zabbix
Apache2のインストール
Apacheをインストールします。
# apt install apache2
PHPのインストール
PHPと関連する必要なライブラリをインストールします。ApacheのFastCGIを有効化します。
# apt install php libapache2-mod-php php-fpm php-mbstring
# a2enmod proxy_fcgi setenvif
# a2enconf php8.1-fpm
ここでApacheを再起動します。正常に起動したら、ブラウザからhttp://[zbbixを入れたサーバーのアドレス]/zabbix
にアクセスします。
# service apache2 stop
# service apache2 start
日本語対応
上記画像では「日本語」がありますが、最初は言語選択に日本語はなかったため、日本語を追加しました。(選択肢に「日本語」がない時のキャプチャとり忘れてしまいました)
# vi /etc/locale.gen
「ja_JP.UTF-8 UTF-8」のコメントを外します。
# ja_JP.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
# locale-gen
Apacheを再起動します。再度http://[zbbixを入れたサーバーのアドレス]/zabbix
にアクセスします。
# service apache2 stop
# service apache2 start
選択できる言語に「日本語」が追加されます。
不足しているライブラリや設定の対応
そのまま「次のステップ」をクリックすると、PHPの設定や不足しているライブラリのチェックが行われます。問題があるようなので順番に対応していきます。
PHPの設定エラー
php.iniを編集して、チェックでエラーとなったパラメータの値を変更します。
- PHPのpostサイズの最小値は16Mです("post_max_size"設定オプション)。
- PHPスクリプトの実行時間の最小値は300です ("max_execution_time"設定オプション)。
- PHPスクリプトの入力パース時間の最小値は300です("max_input_time"設定オプション)。
- 少なくともMySQL、PostgreSQL、Oracleのうち1つ以上をサポートする必要があります。
php.iniのファイル
参照しているphp.ini
のファイルの場所を調べます。/var/www/html
の下にindex.php
ファイルを作成してPHPの情報を出力させます。
# vi /var/www/html/index.php
<?php
phpinfo();
?>
ブラウザからhttp://[zabbixサーバーのアドレス/index.phpでphp
にアクセスすると、参照しているphp.ini
の場所が確認できます。
エラー内容の修正
指摘されているパラメータを修正します。
# vi /etc/php/8.1/fpm/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
「少なくともMySQL、PostgreSQL、Oracleのうち1つ以上をサポートする必要があります。」というエラーはphp.ini
の編集だけではなく、PHPからPostgreSQLを使うためのライブラリのインストールも必要になります。
# apt install php-psql
PostgreSQLを使うように設定します。
# vi /etc/php/8.1/fpm/php.ini
;extension=pgsql
のコメントを外します。
;extension=pgsql
extension=pgsql
PHPライブラリの不足
不足しているPHPライブラリをインストールしていきます。
- PHP bcmathモジュールが存在しません (PHPのconfigure時のパラメータ --enable-bcmath)。
- PHP GDモジュールが存在しません (PHPのconfigure時のパラメータ --with-gd)。
- PHP gd PNGイメージがサポートされていません。
- PHP gd JPEGイメージがサポートされていません。
- PHP gd FreeTypeがサポートされていません。
- PHP xmlwriterモジュールが存在しません。
- PHP xmlreaderモジュールが存在しません。
# apt install php8.1-bcmath php8.1-gd php8.1-xml
インストールできたら、Apacheを再起動しておきます。
# service apache2 stop
# service apache2 start
ブラウザからhttp://[zbbixを入れたサーバーのアドレス]/zabbix
にアクセスすると、問題が解消されたことがわかります。
データベース接続設定、サーバー名、タイムゾーン等
「次のステップ」で設定を進めます。データベースの接続設定を入力します。先ほど用意したデータベースユーザーの認証情報やデータベース名等設定します。
Zabbixのサーバー名、タイムゾーン等設定します。
最後にこれまでの設定した内容を確認します。
確認した設定でフロントのzabbix設定ファイルが生成され、/var/www/html/zabbix/conf/zabbix.conf.php
に保存されるらしいのですが、この環境では作成に失敗したようです。画面のガイダンスに従って、ファイルをダウンロードして、/var/www/html/zabbix/conf/zabbix.conf.php
に配置します。
Webインタフェースのインストールが完了しました。
ログインします。データベースは旧環境(reTerminal)から引き継いだので、これまでのアカウントでログインしました。
サービス化
旧環境(ReTreminal)で行ったようにzabbix_serverをサービス登録します。
Raspberry Pi(reTerminal)にZabbix6.4 をインストールする- サービス化
zabbix_serverを止めます。
# view /tmp/zabbix_server.pid
(プロセスIDを確認)
# kill -SIGTERM (プロセスID)
サービスファイルの作成
# cd /etc/systemd/system
# vi zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/usr/local/etc/zabbix_server.conf"
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/local/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
自動起動を有効にします。
# systemctl enable zabbix-server.service
サービスを起動します。
# systemctl start zabbix-server
ZabbixAgentの設定
新規で構築した場合は、Zabbix-agentのインストールとセットアップを行うところですが、今回はZabbixサーバーの移行なので旧環境(ReTreminal)を参照しているZabbix-agentを新環境(OrangePi5)を参照するように変更します。
# vi /etc/zabbix/zabbix_agent2.conf
ServerActive
とServer
の値を新環境(OrangePi5)に変更します。
AmazonSNSの設定
旧環境(reTerminal)設定していたSMSの送信アラートを設定します。
データベースは旧環境(reTerminal)から引き継いでいるので、新環境(OrangePi5)ではAWS CLIのインストールとそのセットアップ、SNS送信スクリプトを旧環境(reTerminal)からコピーして持ってくるだけです。
詳しくはZabbixアラートをAmazonSNSで通知するをご覧ください。
AWS CLIのインストール、セットアップ
AWS CLIをインストールし、AmazonSNS送信権限のあるAMIを関連付けします。
ZabbixアラートをAmazonSNSで通知する-3.[Zabbixサーバー]AWS CLIのインストール、設定
AWS CLIのインストール
# curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
# unzip awscliv2.zip
# sudo ./aws/install
zabbixユーザーのホームディレクトリを作る
# mkdir /usr/lib/zabbix
# chown zabbix:zabbix /usr/lib/zabbix
# usermod -d /usr/lib/zabbix zabbix
zabbixユーザーのAWS設定
# sudo -u zabbix aws configure
AWS Access Key ID [None]: <IAMアクセスキー>
AWS Secret Access Key [None]:<IAMシークレットアクセスキー>
Default region name [None]: <AWSのリージョン>
Default output format [None]: json
SNS送信スクリプトの作成
旧環境(reTerminal)で使用していたSNSスクリプトをコピーして新環境(OrangePi5)のZabbixのスクリプトパスに置きます。
ZabbixアラートをAmazonSNSで通知する-4.[Zabbixサーバー]ZABBIXスクリプトの作成
まとめ
今回は、OrangePi5でZabbixサーバーを構築しました。動かせないということはないだろうとは思っていましたが、深刻なトラブルもなくセットアップできて安心しました。
稼働してみて
reTerminal(RaspberryPi CM4 4GBメモリ)よりも性能が良いだけあってか、抱えているサービスはreTerminalよりも多いにもかかわらず、CPU使用率は低いところ(10%いかないくらい)で稼働しています。reTerminalでZabbixを動かしていた時のCPU使用率は30%あたりだったと思います。reTerminalがダメというほどパワーがないわけではないですが、OrangePi5で動かすと余裕を感じるなーというぐらいの違いです。起動が不安定にならなければ、まだreTreminalを使っていたと思います。
安定感
先日、弊社オフィスのあるビルが点検のため一時的に停電しましたが、それでもOrangePi5は正常に復旧して通常通り稼働しました。当たり前の安定稼働に頼もしさを感じます。
reTerminalも初期のころは安定していたのですが、だんだん起動が不安定になってしまいました。1年以上稼働し続けたことで、どこかの部品が消耗してしまったのかもしれません。(脱クラウド計画(1) ←これくらいの時期からずっと動かしていました。)まだ起動しなくなったわけではないので、原因を調べて別のところで活用しようと思います。
(役目を終えたreTerminal)
(稼働中のOrangePi5。稼働してもうすぐ1年、若干のほこりをかぶって貫禄がでてきました。いや、ただ汚いだけですね。)