macOSにzabbix-agentを入れる

MacBook Proにzabbix-agentを入れようとしたらやたらハマったのでメモ。

参考にしたサイト

komaken.me

baqamore.hatenablog.com

nonsensej.xyz

ハマった内容

zabbix_agentdを直接叩けば起動ができてzabbix-serverとの疎通も取れたが、OS起動時等にlaunchdから自動起動することができない。

結論

zabbix_agentdをシェルスクリプトでラップしてlaunchdから呼んだらなぜか普通に動いた。

顛末

  • brew install zabbix --without-server-proxyでzabbix-agentをインストールして起動及びサーバとの疎通確認!楽勝だね!
  • 自動で起動するために/System/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>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>Program</key>
    <string>/usr/local/sbin/zabbix_agentd</string>
</dict>
</plist>
  • sudo launchctl load /System/Library/LaunchDaemons/com.zabbix.zabbix_agentd.plistするも何故か起動しない。。
  • plistに下記の行を加えてログを出そうとしてみた。outとerrのファイルは作られるのに中身は空。/var/log/system.logにも何も手がかりが出ない。。。
   <key>StandardOutPath</key>
   <string>/tmp/zabbix_agentd.out</string>
   <key>StandardErrorPath</key>
   <string>/tmp/zabbix_agentd.err</string>
  • 下記のようなシェルスクリプトを作り、plistのProgramを置き換えてloadしてみたらちゃんとoutにrootと出力された。
#!/bin/bash
whoami
  • brewでインストールしたzabbix-agentがおかしいんじゃね!?と思ったのでアンインストールしてソースからビルドした。とりあえず最新版の4.0.1を入れた。ここはここで若干ハマったのでちょっと詳しく書いておく。
    • バージョン以外はMacにZabbixエージェントを入れるにある通りに進めたが、./configure --enable-agentしたらiconvが無いと怒られた。
    • brew install libiconvしたあとでもう一度./configure --enable-agentしたが、またiconvが無いと怒られて困った。パスも通ってるのに意味が分からないよ。。。
    • configureの中身を見てみたら--with-iconvというオプションがあるらしいので、./configure --enable-agent --with-iconv=/usr/local/Cellar/libiconv/1.15/bin/iconvとしてみたら通った。
    • make installしてビルド。
  • 起動及びサーバとの疎通確認!launchdから起動しようとしたら失敗!ログも出ない!!
  • 下記のようなシェルスクリプト/usr/local/sbin/zabbix_agentd.shを作ってzabbix_agentdをラップしてみた。
#!/bin/bash

echo "executed by $(whoami) at $(date)"

zabbix_agentd=/usr/local/sbin/zabbix_agentd

echo "call ${zabbix_agentd}"
${zabbix_agentd}
  • plistのProgramを書き換えてsudo launchctl load /System/Library/LaunchDaemons/com.zabbix.zabbix_agentd.plistしたら動いた!何でだろう!!
  • MacBookを再起動してps -el | grep zabbixとしたところ、意図したとおり自動起動されていた。

つまりこうしたらできるらしい

  • zabbix-agentをインストールする。多分brewでもなんでもいい。
  • /usr/local/sbin/zabbix_agentd.shを作成して実行権限を付与する。
#!/bin/bash

echo "executed by $(whoami) at $(date)"

zabbix_agentd=/usr/local/sbin/zabbix_agentd

echo "call ${zabbix_agentd}"
${zabbix_agentd}
  • /System/Library/LaunchDaemons/com.zabbix.zabbix_agentd.plistを作成してオーナーをroot:wheelにする。
<?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>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>StandardOutPath</key>
    <string>/tmp/zabbix_agentd.out</string>
    <key>StandardErrorPath</key>
    <string>/tmp/zabbix_agentd.err</string>
    <key>Program</key>
    <string>/usr/local/sbin/zabbix_agentd.sh</string>
</dict>
</plist>
  • sudo launchctl load /System/Library/LaunchDaemons/com.zabbix.zabbix_agentd.plist