内容
- 自宅環境の監視
- Zabbixのダウンロード・インストールについて調べる
- インストール前調査
- FreeBSDのインストール前準備
- Zabbixに必要なパッケージのインストール
- DBの設定
- Zabbixの設定
- サーバの起動、しかし
- 原因の調査、そして起動成功
- 日本語化
- インストール後
自宅環境の監視
自宅ネットワークの再構築や
Minisforumを入れて仮想化環境を入れたりしていて、色々と試したりしていたのだが
監視についてはネットワークのモニタのみでその他の監視を行っておらず
「仮想化環境も揃ったことだし、何か監視用のサーバを立ててみるかな?」
ということで、オープンソースの監視ならLinuxでZabbixを何度もインストールしていたりしたので、Zabbixを立ち上げようと思ったのだが「これまでLinuxで立ち上げはやったが自宅で主に使っているFreeBSDでいれてみるのはどうなのだろう?」ということで、FreeBSDの仮想マシンを立ち上げてZabbixのインストールを試してみることにした。
Zabbixのダウンロード・インストールについて調べる
Linuxの場合、最近はOSとアーキテクチャ、OSバージョン・DB・Webサーバを指定すればインストール方法が表示されるページがあるのだが、生憎FreeBSDはそのようなモノが用意されおらず、いろいろ手順を探しながらのインストールなる。
といってもZabbixのインストールの大まかな流れとしては
- Zabbix-server、frontend、DB、Webサーバをインストール
- DBサーバにZabbix用のテーブルを追加
- Webサーバのphp用設定を有効にして起動
というところを押さえておけば、OSが違ってもインストールは行えるハズである。
今回は下記のような構成でFreeBSD 13.1にインストールを行うことにした。
Zabbix : 6.0 LTS
DBサーバ : PostgreSQL
Webサーバ: nginx
インストール前調査
まず最初に行うのはFreeBSDのインストールパッケージであるpkgの依存関係を確認である、ここでパッケージ間の依存関係が自分のインストールしたい設定となっていればいろいろと全自動で行ってもらえるので、かなりの作業を省くことが可能となる。
# pkg search -d zabbix6-server zabbix6-server-6.0.12 Comment : Enterprise-class open source distributed monitoring (server) Depends on : fping-5.0_2 net-snmp-5.9.1_2,1 curl-7.87.0 pcre2-10.40 libevent-2.1.12 unixODBC-2.3.11 mysql80-client-8.0.31 # pkg search -d zabbix6-frontend-php81 zabbix6-frontend-php81-6.0.12 Comment : Enterprise-class open source distributed monitoring (frontend-php81) Depends on : php81-session-8.1.13 php81-xmlwriter-8.1.13 php81-xmlreader-8.1.13 php81-xml-8.1.13 php81-simplexml-8.1.13 php81-dom-8.1.13 php81-ctype-8.1.13 php81-fileinfo-8.1.13 php81-filter-8.1.13 php81-sockets-8.1.13 php81-ldap-8.1.13 php81-snmp-8.1.13 php81-bcmath-8.1.13 php81-8.1.13 php81-gd-8.1.13 php81-gettext-8.1.13 php81-mysqli-8.1.13 php81-mbstring-8.1.13
パッケージの依存関係でDBはMySQL前提だったorz
これで方法はないのかと思う方もいるかもしれないが、FreeBSDにはportsというネット上のソースをダウンロードしてビルド・インストールする機能が用意されており、今回はこちらよりインストールすることにした。
FreeBSDのインストール前準備
インストール前にまずはOS本体とパッケージの更新を行う。
セキュリティアップデート
# freebsd-update fetch # freebsd-update install # shutdown -r now # freebsd-update install # pkg update -f # pkg upgrade -y # freebsd-update install
portsのアップデート
下記コマンドでportsの内容を最新にする。
# portsnap fetch # portsnap extract
Zabbixに必要なパッケージのインストール
Zabbix6-server インストール
portsの存在するディレクトリに移動してインストールを行う
# cd /usr/ports/net-mgmt/zabbix6-server/ # make install
インストール途中でncursesの画面が出てくるが、使うDBをpostgresqlに変更する以外は、デフォルトの状態でOKを押せば問題はない。
zabbix6-frontend インストール
zabbix-frontendのディレクトリに移動してインストール
# cd ../zabbix6-frontend # make install
こちらは全てデフォルトで
PostgreSQL インストール
DBはPostgreSQL13を使う
# cd /usr/ports/databases/postgresql13-server/ # make install
こちらも全てデフォルトで構わない
nginx インストール
# cd /usr/ports/www/nginx # make install
こちらも全てデフォルトで
DBの設定
PostgreSQLユーザーの確認
PostgerSQLのデフォルトユーザーが登録されているかを確認する
# cat /etc/passwd | grep postgres postgres:*:770:770:PostgreSQL Daemon:/var/db/postgres:/bin/sh
rc.confへPostgreSQLの起動設定を追加
下記コマンドでFreeBSDのサービスを司る/etc/rc.confというファイルにPostgreSQLの起動設定を追加する。
# sysrc postgresql_enable=YES
DB初期化
下記コマンドでPostgreSQLの初期データベースを作成する
# service postgresql initdb
postgresql 起動
既に起動しているかもしれないが、改めて起動を行う。
# su - postgres $ /usr/local/bin/pg_ctl -D /var/db/postgres/data13 -l logfile start pg_ctl: another server might be running; trying to start server anyway waiting for server to start.... stopped waiting pg_ctl: could not start server Examine the log output.
postgres パスワード設定
下記コマンドでpostgresの初期ユーザがDBにアクセスする際のパスワードを設定する
$ psql -c "alter user postgres with password 'postgresユーザーパスワード'" ALTER ROLE
zabbix ユーザー作成
DBにアクセスするzabbixユーザーを作成する。
# su - postgres $ createuser --pwprompt zabbix Enter password for new role: zabbixユーザーのパスワード
DBにzabbix用のテーブルを作成する
portsでインストールした場合 /usr/local/share/zabbix6/server/database/postgresql/にテーブルのテンプレートが存在するので、postgresユーザーに入って下記コマンドでテーブルを作成する。
# su - postgres $ cd /usr/local/share/zabbix6/server/database/postgresql/ $ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/schema.sql $ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/images.sql $ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/data.sql
Zabbixの設定
zabbixのタイムゾーンの設定
/usr/local/etc/php/zabbix-required.inをエディタで開いて、下記の箇所を Asia/Tokyoに設定する。
[Date] date.timezone = Asia/Tokyo
DBのパスワードを追加
/usr/local/etc/zabbix6/zabbix_server.conf のDBPasswordを下記設定に変更する。
### Option: DBPassword DBPassword=zabbixのDBユーザーのパスワード # This option can only be used if DBUser and DBPassword are not specified.
サーバの起動、しかし
/etc/rc.confに下記コマンドでサーバの起動設定を追加する
# sysrc zabbix_server_enable="YES" # sysrc php_fpm_enable="YES" # sysrc nginx_enable="YES
下記コマンドでサーバを起動
# service zabbix_server start # service php-fpm start # service nginx start
これで起動したハズということでWebブラウザでhttp://ZabbixサーバのIPアドレス/zabbix6/にアクセスしたのだがエラーとなってしまったorz
原因の調査、そして起動成功
nginxのログを調べたところ、php関連のスクリプトが動いていないとのことでphp-fpmのステータスを確認したところエラーに
調べてみたところphp-fpmでnginx関連の設定がすっぽ抜けていたらしいorz
nginxユーザー作成
nginxユーザーを作成、shellはnologinで構わない
# adduser nginx Username: nginx Full name: nginx Uid (Leave empty for default): Login group [nginx]: Login group is nginx. Invite nginx into other groups? []: Login class [default]: Shell (sh csh tcsh nologin) [sh]: nologin Home directory [/home/nginx]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : nginx Password : ***** Full Name : nginx Uid : 1002 Class : Groups : nginx Home : /home/nginx Home Mode : Shell : /usr/sbin/nologin Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (nginx) to the user database. Add another user? (yes/no): no Goodbye!
php-fpmの設定変更
ユーザーを作成したら /usr/local/etc/php-fpm.d/www.confのuserとgroupをnginxに変更
user = www group = www ↓ user = nginx group = nginx
加えてlistenの項目も変更する
listen.owner = www listen.group = www listen.mode = 0660 ↓ listen.owner = nginx listen.group = nginx listen.mode = 0666
再び起動したところ、ソケットが存在しないというエラーが出た
# service php-fpm start Performing sanity check on php-fpm configuration: [20-Mar-2023 04:16:59] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful Starting php_fpm. [20-Mar-2023 04:16:59] ERROR: unable to bind listening socket for address '/var/run/php-fpm/php-fpm.sock': No such file or directory (2) [20-Mar-2023 04:16:59] ERROR: FPM initialization failed /usr/local/etc/rc.d/php-fpm: WARNING: failed to start php_fpm
# cd /var/run # mkdir php-fpm
再びphp-fpmを起動したところ起動に成功したのだが、ブラウザでZabbixにアクセスできずnginxのログにもphp関係でエラーが発生していた。
nginxの設定変更
調べてみたところnginxのロケーションに問題がありそうで /usr/local/etc/nginx/nginx.confのロケーション関係の項目を下記に修正した
location / { root /usr/local/www; index index.html index.htm index.php; } location ~ \.php$ { root /usr/local/www; fastcgi_index index.php; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
改めてnginxを再起動してWebブラウザでアクセスしたところ、Zabbixの設定ページが開きZabbixが使えるようになった。
設定を一通り行ったところ管理画面が表示されてZabbixの設定は一通り完了した。
日本語化
これまでの手順で一通り動作するまでに持ち込んだのだが、そのままでは表示が英語なので日本語表記にしたい方々はこちらも行うとよい。
フォントのインストール
下記コマンドで日本語フォントをインストールする
# pkg install ja-font-ipa # pkg install ja-font-ipa-uigothic
インストール後、リンクを作成
# ln -s /usr/local/share/fonts/ipa-uigothic/ipagui.ttf /usr/local/www/zabbix6/assets/fonts/ipagui.ttf
Zabbixの設定を変更
エディタで/usr/local/www/zabbix6/include/defines.inc.phpの下記設定を変更する
define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); この行を変更 ↓ define('ZBX_GRAPH_FONT_NAME', 'ipagui'); 変更後
変更後にZabbixを再起動してWebブラウザを再度接続すると表記が日本語化になっている。
インストール後
現在、ネットワークの監視やMacのバックアップサーバを行っているraspberry pi にエージェントを入れて状態をモニターしているが、そのほかに動いているマシンがいくつかあるので、適宜監視対象を増やしていく予定でいる。
まぁ、FreeBSDにZabbixのサーバーをインストールして監視に使おうとする人はあまりいないとは思うが、何かの参考になれば幸いである。
先日、久々にオフラインでOSCが開催された際にZabbixのブースに立ち寄って色々話していたら「これもできませんかね?」とZabbixの方々から色々提案されたので、そちらも機会があったら試してみようかと思う。