macOSでZabbixエージェントを正常に起動させるまでの対応

# macOSでZabbixエージェントを正常に起動させるまでの対応

## はじめに

macOS環境でZabbixエージェントをインストールして運用しようとすると、様々な問題に直面することがあります。特にLaunchDaemonを用いた自動起動の設定では、適切な設定を行わないと正常に動作しないケースが多いです。本記事では、macOSにZabbixエージェントをインストールし、正常に起動させるまでの一連の流れと、遭遇した問題の解決策について解説します。

## 環境

- macOS
- Zabbix 7.2.6（Homebrew経由でインストール）

## インストール方法

Zabbixエージェントをmacにインストールする方法はいくつかありますが、今回はHomebrewを利用したインストール方法を採用しました。

```bash
brew install zabbix
```

## 設定確認

インストール後、設定ファイルを確認します。設定ファイルは通常、以下の場所にあります。

```bash
/usr/local/etc/zabbix/zabbix_agentd.conf
```

主要な設定項目：

```bash
LogFile=/tmp/zabbix_agentd.log
Server=zabbix.example.com
ServerActive=zabbix.example.com
Hostname=your-host-name
```

## 起動確認

エージェントが起動しているかどうかを確認するには、以下のコマンドを使用します。

```bash
ps aux | grep zabbix_agentd
sudo launchctl list | grep zabbix
```

## 問題点と解決策

### 問題1: ユーザー権限の問題

Zabbixエージェントは通常、専用のzabbixユーザーで実行する必要があります。しかし、そのユーザーが存在しない場合、以下のようなエラーが発生します。

```
zabbix_agentd: user zabbix does not exist
zabbix_agentd: cannot run as root!
```

#### 解決策

zabbixユーザーとグループを作成します。

```bash
sudo dscl . -create /Groups/zabbix
sudo dscl . -create /Groups/zabbix PrimaryGroupID 1999
sudo dscl . -create /Groups/zabbix Password \*

sudo dscl . -create /Users/zabbix
sudo dscl . -create /Users/zabbix UniqueID 1999
sudo dscl . -create /Users/zabbix PrimaryGroupID 1999
sudo dscl . -create /Users/zabbix UserShell /usr/bin/false
sudo dscl . -create /Users/zabbix RealName "Zabbix Agent"
sudo dscl . -create /Users/zabbix NFSHomeDirectory /var/empty
```

そして、ログディレクトリとPIDファイルディレクトリの所有権をzabbixユーザーに変更します。

```bash
sudo mkdir -p /var/log/zabbix
sudo chown zabbix:zabbix /var/log/zabbix
sudo chmod 755 /var/log/zabbix

sudo touch /tmp/zabbix_agentd.log
sudo chown zabbix:zabbix /tmp/zabbix_agentd.log
```

### 問題2: LaunchDaemonの設定問題

macOSではLaunchDaemonを使用してサービスを自動起動させますが、適切な設定を行わないと、起動時に問題が発生します。

#### 解決策

適切なLaunchDaemonの設定ファイルを作成します。

```bash
sudo vim /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
```

以下の内容を記述します。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.zabbix.zabbix_agentd</string>
    <key>UserName</key>
    <string>zabbix</string>
    <key>GroupName</key>
    <string>zabbix</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/zabbix_agentd</string>
        <string>-f</string>
        <string>-c</string>
        <string>/usr/local/etc/zabbix/zabbix_agentd.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/zabbix_agentd.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/zabbix_agentd.out</string>
    <key>Debug</key>
    <true/>
</dict>
</plist>
```

### 問題3: リスタートループ

LaunchDaemonの設定が完了しても、エージェントがすぐに終了して再起動を繰り返す「リスタートループ」が発生することがあります。ログを見ると、「Successfully spawned zabbix_agentd」の後に「service inactive」というメッセージが繰り返し表示されます。

#### 解決策

この問題は、Zabbixエージェントがデフォルトでデーモン化（バックグラウンドプロセスに移行）するためです。LaunchDaemonと連携させるためには、`-f`オプション（フォアグラウンドモード）を追加する必要があります。

plistファイルのProgramArguments配列に`-f`オプションを追加します。

```xml
<key>ProgramArguments</key>
<array>
    <string>/usr/local/sbin/zabbix_agentd</string>
    <string>-f</string>
    <string>-c</string>
    <string>/usr/local/etc/zabbix/zabbix_agentd.conf</string>
</array>
```

この変更により、Zabbixエージェントはフォアグラウンドモードで実行され、LaunchDaemonが適切にプロセスを監視・管理できるようになります。

## 設定の適用と確認

変更した設定を適用するには、以下のコマンドを実行します。

```bash
sudo launchctl unload /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
sudo launchctl load -w /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
```

そして、正常に起動しているか確認します。

```bash
sudo launchctl list | grep zabbix
```

正常に起動している場合、以下のような出力が表示されます（PIDと終了コードが表示される）。

```
4422	0	com.zabbix.zabbix_agentd
```

## おわりに

macOSでZabbixエージェントを正常に起動させるには、いくつかの注意点があります。特に、LaunchDaemonでの管理にはフォアグラウンドモード（`-f`オプション）を使用することが重要です。この設定により、システム起動時に自動的にエージェントが起動し、安定した監視環境を構築できます。

また、代替方法として、設定ファイル内で`Foreground=1`を設定することでも同様の効果が得られます。どちらの方法を選ぶかは環境や好みによって決めるとよいでしょう。

今回の対応により、macOS環境でもZabbixエージェントを安定して運用することができるようになりました。