ハードウェアからサーバ・アプリまでワンストップで開発

最近、社内サーバーの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

ServerActiveServerの値を新環境(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を使っていたと思います。

CultureSquare - SBCのスペック比較

安定感

先日、弊社オフィスのあるビルが点検のため一時的に停電しましたが、それでもOrangePi5は正常に復旧して通常通り稼働しました。当たり前の安定稼働に頼もしさを感じます。

reTerminalも初期のころは安定していたのですが、だんだん起動が不安定になってしまいました。1年以上稼働し続けたことで、どこかの部品が消耗してしまったのかもしれません。(脱クラウド計画(1) ←これくらいの時期からずっと動かしていました。)まだ起動しなくなったわけではないので、原因を調べて別のところで活用しようと思います。

(役目を終えたreTerminal)

(稼働中のOrangePi5。稼働してもうすぐ1年、若干のほこりをかぶって貫禄がでてきました。いや、ただ汚いだけですね。)

最近のエントリー

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル