tkuchikiの日記

Linux やプログラミングについて書きます。

mackerel-agent を root 以外で動かす

執筆時の mackerel-agent の version は、
mackerel-agent version 0.25.0 (rev 0ce0115) [linux 386 go1.4.2] です。

RHEL 系の Linuxmackerel-agentroot 以外で動かす方法です。
mackerel-agent を動かすユーザは mackerel とします。

設定

以下のコマンドを実行してユーザとディレクトリを作成します。

useradd -r mackerel
mkdir /var/log/mackerel-agent /var/run/mackerel-agent
chown mackerel: /var/log/mackerel-agent /var/run/mackerel-agent

/etc/init.d/mackerel-agent を以下のように変更します。

24,25c24,25
< LOGFILE=${LOGILE:="/var/log/$prog.log"}
< PIDFILE=${PIDFILE:="/var/run/$prog.pid"}
---
> LOGFILE=${LOGILE:="/var/log/mackerel-agent/$prog.log"}
> PIDFILE=${PIDFILE:="/var/run/mackerel-agent/$prog.pid"}
26a27
> USER="mackerel"
41c42
<     $BIN ${APIBASE:+--apibase=$APIBASE} ${APIKEY:+--apikey=$APIKEY} --pidfile=$PIDFILE --root=$ROOT $OTHER_OPTS >>$LOGFILE 2>&1 &
---
>     runuser -c "$BIN ${APIBASE:+--apibase=$APIBASE} ${APIKEY:+--apikey=$APIKEY} --pidfile=$PIDFILE --root=$ROOT $OTHER_OPTS >>$LOGFILE 2>&1" $USER &

変更したら、 service mackerel-agent restartmackerel ユーザで動作させることができます。

解説

軽く何をしているか書くと、

  • mackerel ユーザを作成
  • mackerel ユーザで pid と log を書き込めるようにし
  • runusermackerel ユーザで mackerel-agent を実行

しています。
runuser の代わりに su でも動作すると思います。
runuser は入っていない環境もあるようですので、適宜使い分けると良いです。

まとめ

mackerel-agentroot 以外で動かす方法を紹介しました。
CPU や Memory Usage のメトリクス収集は問題なく動作していましたが、
正常に動作しないことも考えられますのでご注意ください。
RHEL 以外のディストリビューションについても、
pid と log を書き込めるようにして、 runuser (su) 経由で実行すれば動作すると思います
(useraddadduser などの細かい違いもあるかもしれません)。
他には、systemdsupervisord で起動するという方法もありそうです。