FreeBSD14 に Zabbix6(LTS) をインストールする

[しまねソフト研究開発センター](https://www.s-itoc.jp)（略称 ITOC）にいます、東です。
この記事は、[FreeBSD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/freebsd) の記事です。

[FreeBSD14](https://www.freebsd.org/releases/14.0R/announce/) がリリースされました。以前より、FreeBSD12 で Zabbix version 4 を使った監視システムを運用していましたが、このリリースに合わせて作り直すことにしました。

（なお、クライアント監視設定は、https://qiita.com/HirohitoHigashi/items/951b3ea04488c51c3be4 こちらに書きました）




# 方針

* 最新の FreeBSD リリース版を使う
* 最新の Zabbix LTS 版 (version 6) を使う
* Zabbix Server と Zabbix Frontend は、同じサーバ上へインストールする
* 現在の Zabbix サーバで監視している台数はたかが知れている & 過去データは必要ないので、現在の登録情報の移行はせず、クリーンインストールしたうえで監視対象も新規登録とする


# OS インストール

FreeBSD ダウンロードサイトから、インストールディスクの iso image をダウンロードし、それを使って普通にインストールします。
![Screenshot_20231203_172829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/dda027e4-32ee-2a2b-5bc8-41487f38cd3e.png)

パーティションは分けても良いですが、今回は単一パーティションでやってみました。
![Screenshot_20231203_173010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/eaee2580-782b-ea34-ab3d-41b66a256dda.png)


## 必要なパッケージを導入

  * zabbix6-server
  * zabbix6-agent
  * zabbix6-frontend-php83
  * mysql80-server
  * apache24
  * mod_php83
  * ja-font-ipa-uigothic

以上を、pkg コマンドを使ってインストールします。

```
pkg install zabbix6-server zabbix6-agent zabbix6-frontend-php83 mysql80-server apache24 mod_php83 ja-font-ipa-uigothic
```




# MySQL の設定

データベースサーバ MySQL を、以下の通り設定します。
標準で、`/var/db/mysql` に MySQL のデータディレクトリが作られます。

## my.cnf への設定追加

/usr/local/etc/mysql/my.cnf ファイルがあるので、以下の設定を [client] 欄と、[mysql]欄をみつけて**追加**します。
```:/usr/local/etc/mysql/my.cnf
[client]
default-character-set         = utf8mb4

[mysqld]
skip-networking
character-set-server          = utf8mb4
log_bin_trust_function_creators = 1
```

`log_bin_trust_function_creators = 1` は、この後の DB 初期設定にて Zabbix から提供されている初期データをインポートしたときにエラーになったので、その回避のためです。


## 自動起動設定

/etc/rc.conf に以下の行を追加します。

```:/etc/rc.conf
mysql_enable="YES"
```

## 手動起動して初期データを投入

### 起動
```
/usr/local/etc/rc.d/mysql-server start
```

### DB初期設定

以下のアカウント情報でデータベースを作って初期化します。

| | |
|-|-|
| データベース名 | zabbix |
| ユーザ名 | zabbix |
| パスワード | MY_PASSWORD |

```
mysql -u root
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user 'zabbix'@'localhost' identified by 'MY_PASSWORD';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
quit

cd /usr/local/share/zabbix6/server/database/mysql
mysql -uzabbix -pMY_PASSWORD zabbix < schema.sql
mysql -uzabbix -pMY_PASSWORD zabbix < images.sql
mysql -uzabbix -pMY_PASSWORD zabbix < data.sql
mysql -uzabbix -pMY_PASSWORD zabbix < double.sql
```

# Zabbix Server の設定

以下の設定を追加変更します。

## 設定ファイル

/usr/local/etc/zabbix6/zabbix\_server.conf の `DBPassword` 行を見つけて、パスワードを追記します。
```:/usr/local/etc/zabbix6/zabbix\_server.conf
DBPassword=MY_PASSWORD
```

## 自動起動設定

/etc/rc.conf に以下の行を追加します。

```:/etc/rc.conf
zabbix_server_enable="YES"
```

### 起動
```
/usr/local/etc/rc.d/zabbix_server start
```


# Zabbix Agentd の設定

Zabbix Agent は動かさなくても良いですが、今回は自分自身を監視するため、同サーバーで Agent も起動します。

## 設定ファイル

自分で自分を監視するため、外に向けてLISTENする必要はありません。設定ファイルの以下の項目を変更します。
```:/usr/local/etc/zabbix6/zabbix\_agentd.conf
ListenIP=127.0.0.1
```

## 自動起動設定

/etc/rc.conf に以下の行を追加します。

```:/etc/rc.conf
zabbix_agentd_enable="YES"
```

### 起動
```
/usr/local/etc/rc.d/zabbix_agentd start
```


# Zabbix Frontend の設定

Zabbix Frontend のためのウェブサーバ Apache httpd とその周辺を、以下の通り設定します。

## httpd 設定

設定ファイルへ追加します。
```:/usr/local/etc/apache24/httpd.conf 
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>
<Directory "/usr/local/www/zabbix6">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

DocumentRoot "/usr/local/www/zabbix6"
DirectoryIndex index.html index.php
```

## php の設定

/usr/local/etc/php.ini を以下の内容で作成します。
```:/usr/local/etc/php.ini
[PHP]
post_max_size = 16M
max_execution_time = 300

[Date]
date.timezone = "Asia/Tokyo"
```

## 自動起動設定

/etc/rc.conf に以下の行を追加します。

```:/etc/rc.conf
apache24_enable="YES"
```

### 起動
```
/usr/local/etc/rc.d/apache24 start
```

## Frontend 用設定ファイルの生成

以下のURLへアクスして、DBのパスワードなどを入力します。
http://サーバIP/setup.php

![Screenshot_20231203_182010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/4348d638-6ab6-0c7a-db3f-258dff6e5f0e.png)
![Screenshot_20231203_182123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/c275a000-c5a4-d020-520c-20fc4ba425c8.png)


最終画面でおそらく「設定ファイルが作成できません」と表示されるので、生成されたファイルを同画面からダウンロードして画面の指示に従ってサーバへ保存（コピー）します。
今回対象とした Zabbix6 では、以下のパスに保存する指示でした。
```
/usr/local/www/zabbix6/conf/zabbix.conf.php
```

## 使用フォントの変更

漢字を使用すると、グラフなどGDで生成される画像の文字がトーフになるので、以下の設定を変更して漢字フォント (IPA GUI) に変更します。

```:/usr/local/www/zabbix6/include/defines.inc.php
define('ZBX_FONTPATH', '/usr/local/share/fonts/ipa-uigothic');
define('ZBX_GRAPH_FONT_NAME', 'ipagui');
```

# Zabbix Frontend （コンソール）の表示

以下のURLへアクスして、ログイン画面を表示します。
http://サーバIP/
![Screenshot_20231203_182903.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/5e8f8ed9-6f0b-c3e7-c9bb-2c2871c298a5.png)

デフォルトの管理アカウントでログインします。

| | |
|-|-|
| ユーザ名 | Admin |
| パスワード | zabbix |

![Screenshot_20231203_182630.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/9d4e3c1f-28c2-0a3d-89fb-0e244a9e8f0f.png)

この状態ですでに、Zabbix Server 自身の監視ができている状態になっています。

左ペインのメニューから `監視データ` > `最新データ` とクリックします。
右ペイン下部に表示された監視データから、Available memory 行の右端「グラフ」をクリックしてみましょう。
![Screenshot_20231203_183231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/4cbea92a-26ad-dcb2-f09b-697f4e6068e7.png)
こんな感じで監視データがトレンドグラフで表示されます。



# Media Type の追加

Zabbix 標準のメール通知機能は、SMTP サーバアドレスを指定してメールを送るデザインになっています。
![Screenshot_20231203_183912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/a1853eb8-186d-5643-0e58-319c19624aa8.png)

通常はここで指定したメールサーバにリレーして配送をお願いすればよいです。
しかし、メールサーバー自体を監視したいなどの理由で、このホストから直接メールを送信したいと考えるかもしれません。

以前のバージョンの FreeBSD では、sendmail が常駐して localhost (127.0.0.1) で Listen してくれていたので、SMTP server に 127.0.0.1 を指定してやれば問題ありませんでした。
しかし FreeBSD 14 では sendmail に代わって DragonFly Mail Agent が採用されており、daemon ではなくなっていましたので、ひと工夫必要なようです。[^1]

 [^1]: 正確には DragonFly Mail Agent がデフォルトになっただけで、sendmail がインストールされなくなったわけではないので、mailer.conf でデフォルト値を変更すれば sendmail が使えます。

 
## 独自スクリプトの追加

今回は、独自スクリプトを、以下をを参考に追加します。
https://www.zabbix.com/documentation/6.0/jp/manual/config/notifications/media/script

今回作成したスクリプトは以下です。
```sh:/usr/local/etc/zabbix6/zabbix/alertscripts/email_dma.sh
#!/bin/sh

to=$1
subject=$2
body=$3

cat <<EOF | mail -s "$subject" "$to"
$body
EOF
```

### コンソールへ追加

これを Zabbix のコンソールへも登録します。

左ペインのメニューから `管理` > `メディアタイプ` とクリックし、右ペイン上部に表示された「メディアタイプの作成」をクリックします。

| 項目 | 値 |
|-|-|
| 名前 | Email_dma |
| タイプ | スクリプト |
| スクリプト名 | email_dma.sh |
| スクリプトパラメータ | 以下スクリーンショット参照 |

![Screenshot_20231203_184342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/968fe54a-74e9-a71c-a8ed-05c1ff40d17a.png)

上部「メッセージテンプレート」をクリックして画面を変え、標準の Email メディアタイプを参考に、同じものを５種類追加しておきます。
![Screenshot_20231203_184652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/5f79d08b-df63-e6a8-8d7e-7abe56cdd576.png)

これで、メール送信スクリプトが `Email_dma` という名前で使えるようになりました。


### ユーザーの通知にこのスクリプトを利用するよう設定

左ペインのメニューから `管理` > `ユーザー` とクリックします。
右ペインに表示されるリストから `Admin` > `メディア` の順でクリックします。
追加をクリックし、以下の通り先程登録した `Email_dma` と送信先 E-mail アドレスを登録します。

![Screenshot_20231203_184915.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/a59c9a62-6fd5-1e1e-26a1-18807f4d681c.png)

これで、任意のメールアドレスに通知が可能になります。



# おしまい

FreeBSD14 に Zabbix6 LTS をインストールして使える状態に設定しました。
これから、監視対象のサーバーを登録する作業をしたいと思います。
通知メールの受信サーバーが、何らかの原因で一時的にメールを受け取れない状態になっていた場合、このサーバ内のメールキューにメールが貯まるはずです。本来その再送処理を行わないといけないはずですが、DragonFly Mail Agent を使うのは初めてですので、今後要研究ですね。

なお、この記事は、FreeBSD + KDE のデスクトップ環境を使って書きました　:grin: