Raspberry Pi の armhf アーキテクチャをサポートした mackerel-agent のバイナリが提供されていないので, ソースコードからビルドすることで利用できるようにしました. テストでいくつかのエラーが出ましたが, 基本的な機能は利用できています.
また, この記事は Go 言語の利用経験の少ない者が書いているためいくつかの誤りを含む可能性があります.
環境
- Raspberry Pi
- Debian 8 jessie (Raspbian)
- mackerel-agent 0.14.1
- go 1.3.3
make 等を利用するために build-essential を, go を利用するために golang パッケージを, コードを取得するために git と mercurial をインストールします.
$ sudo apt-get install build-essential golang git mercurial
Debian 7 wheezy 以降で golang パッケージが提供されていますが, wheezy の go は古いため mackerel-agent のビルドに失敗するようです.
コードの取得
mackerel-agent のコードを GitHub から取得します.
$ git clone https://github.com/mackerelio/mackerel-agent.git
ビルド
Go のコードをビルドする際に環境変数 GOPATH を設定しておかないとエラーが発生するので,
適当なディレクトリを作成して GOPATH に設定しておきます.
$ mkdir go $ export GOPATH=/home/pi/go $ cd mackerel-agent/ $ make clean build
build/mackerel-agent にバイナリが出力されます.
インストールと設定
バイナリを配置します.
$ sudo cp build/mackerel-agent /usr/local/bin/
/etc/init.d/mackerel-agent に init スクリプトを配置します.
このスクリプトは deb 形式のバイナリから取得しました.
#!/bin/sh
### BEGIN INIT INFO
# Provides: mackerel-agent
# Short-Description: 'mackerel.io agent beta'
# Description: 'mackerel.io agent beta'
# Author: Hatena
# Required-Start: $syslog $network $remote_fs
# Required-Stop: $syslog $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
NAME=mackerel-agent # Introduce the short server's name here
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DAEMON=${DAEMON:="/usr/local/bin/$NAME"}
SCRIPTNAME=/etc/init.d/$NAME
LOGFILE=${LOGILE:="/var/log/$NAME.log"}
PIDFILE=${PIDFILE:="/var/run/$NAME.pid"}
ROOT=${ROOT:="/var/lib/$NAME"}
# Exit if the package is not installed
[ -x $DAEMON ] || exit 0
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
$DAEMON ${APIBASE:+--apibase=$APIBASE} ${APIKEY:+--apikey=$APIKEY} --pidfile=$PIDFILE --root=$ROOT $OTHER_OPTS >>$LOGFILE 2>&1 &
sleep 3
kill -0 $(cat $PIDFILE 2>/dev/null) >/dev/null 2>&1
return $?
}
#
# Function that stops the daemon/service
#
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $NAME"
do_start
case "$?" in
0) log_end_msg 0 ;;
*) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
*) log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac
:
自動起動を有効化します.
$ sudo update-rc.d mackerel-agent defaults
設定ファイルをヘルプに従い /etc/mackerel-agent/mackerel-agent.conf に配置します. 設定ファイルのサンプルはソースコードにも含まれています.
agent を起動してしばらく待つと, Mackerel にグラフが表示されるようになります.
更新履歴
- 2014/6/8 mackerel-agent 0.8.0, go 1.3 に更新
- 2014/7/13 mackerel-agent 0.9.0 に更新
- 2014/8/7 mackerel-agent 0.11.1 に更新
- 2014/8/20 mackerel-agent 0.12.0, go 1.3.1 に更新
- 2014/8/28 mackerel-agent 0.12.1 に更新
- 2014/9/15 mackerel-agent 0.12.2 に更新
- 2014/10/2 mackerel-agent 0.12.3 に更新
- 2014/10/5 go 1.3.2 に更新
- 2014/12/14 mackerel-agent 0.13.0 に更新
- 2015/1/19 mackerel-agent 0.14.0 に更新, mercurial を追加
- 2015/2/5 mackerel-agent 0.14.1 に更新, go 1.3.3 に更新