macOSでZabbixエージェントを正常に起動させるまでの対応
はじめに
macOS環境でZabbixエージェントをインストールして運用しようとすると、様々な問題に直面することがあります。特にLaunchDaemonを用いた自動起動の設定では、適切な設定を行わないと正常に動作しないケースが多いです。本記事では、macOSにZabbixエージェントをインストールし、正常に起動させるまでの一連の流れと、遭遇した問題の解決策について解説します。
環境
- macOS
- Zabbix 7.2.6(Homebrew経由でインストール)
インストール方法
Zabbixエージェントをmacにインストールする方法はいくつかありますが、今回はHomebrewを利用したインストール方法を採用しました。
brew install zabbix
設定確認
インストール後、設定ファイルを確認します。設定ファイルは通常、以下の場所にあります。
/usr/local/etc/zabbix/zabbix_agentd.conf
主要な設定項目:
LogFile=/tmp/zabbix_agentd.log
Server=zabbix.example.com
ServerActive=zabbix.example.com
Hostname=your-host-name
起動確認
エージェントが起動しているかどうかを確認するには、以下のコマンドを使用します。
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ユーザーとグループを作成します。
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ユーザーに変更します。
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の設定ファイルを作成します。
sudo vim /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
以下の内容を記述します。
<?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
オプションを追加します。
<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が適切にプロセスを監視・管理できるようになります。
設定の適用と確認
変更した設定を適用するには、以下のコマンドを実行します。
sudo launchctl unload /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
sudo launchctl load -w /Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist
そして、正常に起動しているか確認します。
sudo launchctl list | grep zabbix
正常に起動している場合、以下のような出力が表示されます(PIDと終了コードが表示される)。
4422 0 com.zabbix.zabbix_agentd
おわりに
macOSでZabbixエージェントを正常に起動させるには、いくつかの注意点があります。特に、LaunchDaemonでの管理にはフォアグラウンドモード(-f
オプション)を使用することが重要です。この設定により、システム起動時に自動的にエージェントが起動し、安定した監視環境を構築できます。
また、代替方法として、設定ファイル内でForeground=1
を設定することでも同様の効果が得られます。どちらの方法を選ぶかは環境や好みによって決めるとよいでしょう。
今回の対応により、macOS環境でもZabbixエージェントを安定して運用することができるようになりました。