kenkino’s diary

おそらく技術・グッズ・自転車系 ※当ブログは、Amazonアソシエイトやその他アフィリエイト等の収益メディアを表示しております。

FreeBSD 13.1にZabbix 6.0を入れてみた


内容

自宅環境の監視 

自宅ネットワークの再構築や

kenkino.hatenablog.jp

Minisforumを入れて仮想化環境を入れたりしていて、色々と試したりしていたのだが

kenkino.hatenablog.jp

監視についてはネットワークのモニタのみでその他の監視を行っておらず

kenkino.hatenablog.jp

「仮想化環境も揃ったことだし、何か監視用のサーバを立ててみるかな?」

ということで、オープンソースの監視ならLinuxでZabbixを何度もインストールしていたりしたので、Zabbixを立ち上げようと思ったのだが「これまでLinuxで立ち上げはやったが自宅で主に使っているFreeBSDでいれてみるのはどうなのだろう?」ということで、FreeBSD仮想マシンを立ち上げてZabbixのインストールを試してみることにした。

Zabbixのダウンロード・インストールについて調べる 

Linuxの場合、最近はOSとアーキテクチャ、OSバージョン・DB・Webサーバを指定すればインストール方法が表示されるページがあるのだが、生憎FreeBSDはそのようなモノが用意されおらず、いろいろ手順を探しながらのインストールなる。

www.zabbix.com

といっても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

/var/run以下に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の方々から色々提案されたので、そちらも機会があったら試してみようかと思う。