FreeBSD を Zabbix6(LTS) で監視する

[しまねソフト研究開発センター](https://www.s-itoc.jp)（略称 ITOC）にいます、東です。

以前、[FreeBSD14 に Zabbix6(LTS) をインストールする](https://qiita.com/HirohitoHigashi/items/fbd80f730eb3ee422976) というタイトルで、Zabbixサーバーのインストール記事を書きました。今回は、監視対象クライアントの設定とクライアントが出すログファイルの監視について記事にします。


# 目標

* FreeBSD マシンを Zabbix Agent を使って監視する
* 加えて、任意のログファイルの監視設定を追加する
* ログ監視では、指定の文字列検出によるエラー発生と解消を検出する
* Zabbix server - agent 間の通信を、暗号化する

# 準備するもの

* [FreeBSD14 に Zabbix6(LTS) をインストールする](https://qiita.com/HirohitoHigashi/items/fbd80f730eb3ee422976) で構築したZabbixサーバー
* 別途構築したFreeBSDクライアント


# 基本設定

## Zabbix Agent のインストール

pkg コマンドでインストールします。

```
pkg install zabbix6-agent
```

設定ファイルを変更します。以下の３行を見つけて書き換えます。

```:/usr/local/etc/zabbix6/zabbix_agentd.conf
# ZabbixServer の IPもしくはFQDN
Server=192.168.108.60
ServerActive=192.168.108.60

# 当ホストのホスト名
Hostname=freebsd-client01
```

## 起動設定

設定ファイル /etc/rc.conf にエージェントを自動起動する設定を追加します。

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

これで再起動して zabbix_agentd が自動起動することを確認します。


## Zabbix Server への登録

ウェブフロントエンドを使い、クライアントを登録します。
まずはデフォルトの平文通信で登録して、動作を確認します。
代表的な項目を監視するテンプレートが用意されていますので、それを使う方法を説明します。

左ペインのメニューから `設定` > `ホスト` とクリックし、右ペイン上部に表示された `[ホストの作成]` をクリックします。

![202502_102955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/6c7d5d49-648e-4dea-8ca4-599d68c7af67.png)

「新しいホストの作成」ダイアログが表示されるので、先ほど zabbix_agentd.conf の Hostname= に指定したホスト名を入力します。

![202502_103659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/a4f1e114-af15-4378-ad18-c3660fd2ed47.png)

テンプレート欄は、右の `[選択]` をクリックします。
「テンプレート」ダイアログが表示されるので、ホストグループ右の `[選択]` をクリックします。

![202502_104053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/75b7b430-c1e2-4f49-b506-7af9fba15bf6.png)

`Templates/Operating systems` をクリックして選びます。

![202502_104134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/c8c83fa0-b645-44e7-aabe-c726045a285c.png)


`FreeBSD by Zabbix agent` をクリックして選びます。

![202502_104157.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/be4bb9bd-00e3-4a5b-a352-14acbb783328.png)

グループ名は、新規に FreeBSD servers とつけようと思います。
グループ欄に、`FreeBSD servers` と入力すると、すぐ下に FreeBSD servers(新規) と表示された行がポップアップしますので、それをクリックして新規追加します。次回からは、`[選択]` ボタンをクリックして選ぶことができます。


インターフェース欄は、`追加` > `エージェント` とクリックすると行が追加されるので、クライアントの IP アドレスを入力します。

![202502_103659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/a4f1e114-af15-4378-ad18-c3660fd2ed47.png)


右下の `[追加]` をクリックして、登録完了です。
![202502_103734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/2d6f177e-60b6-4ad7-a1c1-f5b7da02900d.png)


## トラブルシュート

server, agent とも、エラーがあればログファイルに出力してくれるので、そちらを参照するとだいたい何が原因かを判断できます。

### サーバー
/var/log/zabbix/zabbix_server.log

### クライアント（エージェント）
/var/log/zabbix/zabbix_agentd.log





# テンプレートの一部変更（カスタマイズ）

## トレンドグラフのY軸最小値を0に変更する

FreeBSD by Zabbix agent テンプレートでは、いくつかのグラフが用意されています。
このうち、例えばメモリ使用量 (Memory usage) のグラフY軸はゼロから始まっていたほうが見やすいと思いますので、テンプレートを変更します。

![202502_160614.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/50acf8d8-e3b3-47b4-8eba-35b52927c02d.png)


左ペインのメニューから `設定` > `テンプレート` とクリックし、右ペインに表示された FreeBSD by Zabbix agent 行の、`グラフ` をクリックします。

![202502_160248.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/6628d9f3-a010-4935-8d0a-fc752f9b958c.png)

`FreeBSD: Memory usage` をクリックします。

![202502_160308.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/72e34c30-d182-4713-8b6c-d6c0b2abf000.png)

Y軸の最小値 欄を、`固定` に変更し、値を0 にします。

![202502_160640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/e5f3dd12-25c4-4f24-930b-1adc1fe97376.png)

`[更新]` をクリックして終了です。



## スワップ使用量のグラフを、パイチャートからトレンドグラフに変更する

スワップ使用量のグラフだけ、初期設定ではパイチャートが使ってあります。トレンドも見たいので、トレンドグラフに変更します。

左ペインのメニューから `設定` > `テンプレート` とクリックし、右ペインに表示された FreeBSD by Zabbix agent 行の、`グラフ` をクリックします。

`FreeBSD: Swap usage` をクリックします。

グラフのタイプを、円グラフからノーマルに変更する他、下図を参考にパラメータを書き換えます。

![202502_161446.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/96a19731-31d9-46b7-828f-8aac87995ca7.png)

スワップ使用量が。トレンドグラフになりました。

![202502_161459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/f9ee1c19-1f68-4041-b936-ed85629b90a2.png)





# ログ監視の設定

ログ監視の設定を追加します。

ここでは例として /var/log/messages ファイルに、ERROR という文字列が現れたら障害と判定し、RESOLVED という文字列が現れたら解消と判定する事とします。

「アイテム」「トリガー」「アクション」の3箇所に設定が必要です。

## アイテムの追加
左ペインのメニューから `設定` > `ホスト` とクリックし、右ペインに表示された対象サーバー行の、`アイテム` をクリックします。
右上の `アイテムの作成` をクリックします。

![202502_164310.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/33fa89b9-9c2a-4a85-b6b9-b13dd80e000f.png)

　名前: ログ監視 messages（任意の名前をつける）
　タイプ: Zabbixエージェント（アクティブ）
　キー: log["/var/log/messages", "(ERROR|RESOLVED)" ]
　データ型: ログ
　監視間隔: 10s

`[追加]` をクリックし、登録完了します。

キーには、log[] 関数を使います。
* 第1引数：ログファイルの絶対パス。
* 第2引数：正規表現で指定。合致した行のみを取得する。

以降第9引数までありますが、あまり使う機会はないと思います。詳細は[マニュアル](https://www.zabbix.com/documentation/6.0/jp/manual/config/items/itemtypes/zabbix_agent#supported-item-keys)を参照してください。



## トリガーの追加

左ペインのメニューから `設定` > `ホスト` とクリックし、右ペインに表示された対象サーバー行の、`トリガー` をクリックします。
右上の `トリガーの作成` をクリックします。

![202502_183544.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/79f12709-194a-4902-9d01-0483ad1ef1c2.png)

以下の通り入力します。
　名前: `messages にエラー発生` （任意の名前をつける）
　深刻度: `重度の障害`
　条件式: `[追加]` ボタンをクリックし、「トリガー条件式」ダイアログを表示させる

![202502_182949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/26658aee-ca62-4450-b603-d1e057a40a13.png)

　アイテム: `[選択]` ボタンをクリックし、`ログ監視 messages` をクリックして選ぶ。
　関数: `find()...` を選ぶ。
　V: `ERROR` と入力する。
　結果： `=` を選び `1` と入力する。
 
`[挿入]` ボタンで確定する。
「トリガー条件式」ダイアログが消えて、条件式欄に find... と補完されたのを確認し、`[追加]` ボタンで確定します。

トリガーには、find 関数を使います。この例では、前項で追加したアイテム「ログ監視 messages」に、"ERROR" という文字列があれば、このトリガーが発火するよう指定しています。find 関数の詳しい説明は、[マニュアル](https://www.zabbix.com/documentation/6.0/jp/manual/appendix/functions/history) の find 関数の項を参照してください。



## アクションの確認

左ペインのメニューから `設定` > `アクション` > `トリガーアクション` とクリックし、右ペインに表示された Report problems to Zabbix administrators 行の右端「ステータス」を確認し、`無効` になっていたらそこをクリックして `有効` に変えておきます。

![202502_201950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/f7f7096a-a13a-4c52-ad63-6468523ca24f.png)



## テスト

### 障害発生

クライアントにログインし、以下のコマンドを打ってログに追記します。

```
logger "ERROR"
```

ウェブフロントエンド左ペインのメニューから `監視データ` > `ホスト` とクリックし、右ペインに表示された対象サーバー行の、`最新データ` をクリックします。
`ログ監視 messages` 行の右端 `ヒストリ` をクリックします。
ログが表示されていれば、アイテムの追加設定は成功です。

![202502_193552.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/a787e646-01e8-411e-a7ae-6a92eafe633d.png)


次に、左ペインのメニューから `監視データ` > `障害` とクリックし、右ペインに障害が表示されていれば、トリガーの設定は成功です。

![202502_183826.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/581e0cb2-0ba4-4947-8562-d5d03afc760a.png)


### 障害解消

クライアントにログインし、以下のコマンドを打ってログに追記します。

```
logger "RESOLVED"
```

少し待つか、ブラウザをリロードして、先ほどの障害が解決済みになったのを確認します。


![202502_192129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/fb69194f-750e-4644-a267-6e1903c3af9e.png)

サーバー側の設定で、メール等でレポートするように設定していれば、この時点で「障害発生」と「解決」の２通のメールが届いているはずです。





# 通信の暗号化

Zabbix server - agent 間の通信を、暗号化します。
この記事では、共通鍵を使った方法を説明します。

## クライアント（エージェント）の設定

クライアントにログインし、設定ファイルに以下の内容を追加します。
```:/usr/local/etc/zabbix6/zabbix_agentd.conf
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK_freebsd-client01
TLSPSKFile=/usr/local/etc/zabbix6/zabbix_agentd.psk
```

以下のコマンドを使って共通鍵を作ります。
```
cd /usr/local/etc/zabbix6
openssl rand -hex 32 > zabbix_agentd.psk
chown zabbix:zabbix zabbix_agentd.psk
chmod 400 zabbix_agentd.psk
```

このあと使いますので、共通鍵を表示して確認しておきます。

```
# cat zabbix_agentd.psk
416b35e9b4d5143a3f8fdec96cf2f14e0da09dcc606abe9897beb9968220a415
```

エージェントプロセスをリスタートします。
```
/usr/local/etc/rc.d/zabbix_agentd restart
もしくは
service zabbix_agentd restart
```


## サーバーの設定

ウェブフロントエンドを使い、クライアントの設定を変更します。

左ペインのメニューから `設定` > `ホスト` とクリックし、対象サーバーの名前をクリックします。
![202502_113540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/d448491d-3a84-4100-a4cd-2e89246283d6.png)

表示されたダイアログ上部の `暗号化` をクリックします。
![202502_111230.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/65806acb-7f18-4943-b31d-719bb683a4f4.png)

次の項目を入力します。
![202502_111702.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/4c15e17b-ccb9-4b4c-bcd4-4bc61cf961e5.png)
　ホストへの接続： `PSK`
　ホストからの接続: `PSK` のみ
　PSKアイデンティティ: `PSK_freebsd-client01`
　PSK: `416b35e9b4d5143a3f8fdec96cf2f14e0da09dcc606abe9897beb9968220a415`

PSKアイデンティティには、設定ファイルの TLSPSKIdentity で指定した文字列を入力します。
PSKには、catコマンドで確認した 16新文字列を入力します。

`[更新]` ボタンで確定します。

一覧表示の「エージェント暗号化」欄が、PSK になったのを確認します。
![202502_112009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504019/5ad06653-6575-4978-bb95-8d1bac9cf96f.png)


これで暗号化通信の設定は完了です。



# おわりに

一通り、FreeBSD 機の監視ができるようになりました。当記事では FreeBSD をターゲットにしましたが、*Linux でもほぼ一緒だと思います。
Zabbix は、高性能であるがゆえにか設定が結構難しい感じがしますが、応用範囲も広いのでこれからも使っていこうと思います。