Raspberry piにもDatadog Agentをインストールしてみる(前編)でDatadog Agent(以降DD-agent)のインストールと動作は確認できました。
しかし前回のままでは、Raspberry Piの再起動時に次のコマンドでDD-Agentを起動する手作業が残っていました。
1
2
3
| sudo su
cd /root/.datadog-agent
sh bin/agent start
|
ここで僕が参考にしたのが、/root/.datadog-agent/bin/agnet
です。このスクリプトのstart
, stop
のあたりに注目します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| case $action in
start)
if supervisor_running; then
echo "Supervisor is already running"
execute_if_supervisor_running start all
exit 0
else
echo "Starting supervisor"
supervisord -c $SUPERVISOR_CONF_FILE
fi
;;
stop)
execute_if_supervisor_running stop all
exit $?
;;
|
…ということで、supervisorって何だろうと思いながら、googleで検索すると「Supervisorで簡単にデーモン化」みたいなtoolらしいです。そこで対応OSのinit.dでは、supervisorを使わずにDD-Agentが起動しているのかと思いubuntuでinit.d以下のdatadog-agentスクリプトを見てみましたが、ここでも、supervisorを使っていました。
今回は難しいことを考えずに/root/.datadog-agent/bin/agnet
の手順を再利用するこにします。startとstopのコード部分で関数として切り出されている部分をshellのコマンドに戻しディレクトリを調整すると次のようなスクリプトになりました。start,stop,restartしかできない簡単なものですがRaspberry Piの起動時に必要な最低限の要件は満たしていると思います。(error処理の観点からは、まだまだな…)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| #! /bin/sh
### BEGIN INIT INFO
# Provides: datadog-agent
# Short-Description: Start and start datadog-agent
# Description: datadog-agent is the monitoring Agent component for Datadog
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
DD_BASE="/root/.datadog-agent"
SOCK_FILE="/root/.datadog-agent/supervisord/agent-supervisor.sock"
supervisor_running() {
[ -e $SOCK_FILE ]
}
case $1 in
start)
if supervisor_running; then
echo "Supervisor is already running"
cd $DD_BASE && venv/bin/supervisorctl -c supervisord/supervisord.conf start all
exit 0
else
echo "Starting Supervisor"
cd $DD_BASE && venv/bin/supervisord -c supervisord/supervisord.conf &
exit 0
fi
;;
stop)
cd $DD_BASE && venv/bin/supervisorctl -c supervisord/supervisord.conf stop all
exit 0
;;
restart)
cd $DD_BASE && venv/bin/supervisorctl -c supervisord/supervisord.conf stop all
cd $DD_BASE && venv/bin/supervisorctl -c supervisord/supervisord.conf start all
exit 0
;;
esac
exit 0
|
スクリプト前半のコメントアウトされている部分を詳しく知りたい人は、LSBInitScriptsを参考にしてください。個人的には、/etc/init.d/skeleton
などを参考にコピペ&編集することにしています。
startの部分でsupervisord.sockの存在確認をしているのは、supervisord
がDD-Agentの管理をするため、Raspberry Piの起動時のみにデーモンとして起動して欲しいからです。
起動以降はsupervisorctl
によるデーモンへの管理操作依頼コマンドへと移行します。
このスクリプトをdatadog-agent
のファイル名で/etc/init.d
に設置し実行権限を付与します。
1
2
3
| cd /etc/init.d
vi datadog-agent # 先の内容をコピペします
chmod 755 datadog-agent
|
datadog-agent
の動作の確認をします。
1
2
3
| ./datadog-agent start
./datadog-agent stop
./datadog-agent restart
|
最後に、datadog-agent
を自動起動スクリプトとして登録します。
1
| update-rc.d datadog-agent defaults
|
ここで、Raspbery Piを再起動します。Raspberry Piが再起動し、sshでアクセスできたら、次のコマンドを実行してみます。
1
2
3
| sudo su
cd /root/.datadog-agent
sh bin/agent info
|
Raspberry Piの起動時にDD-Agentが正しく起動していれば、次のように出力されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| ===================
Collector (v 4.2.1)
===================
Status date: 2014-05-13 15:35:31 (11s ago)
Pid: 2168
Platform: Linux-3.10.25+-armv6l-with-debian-7.5
Python Version: 2.7.3
Logs: <stderr>, syslog:/dev/log
Clocks
======
NTP offset: 0.0006 s
System UTC time: 2014-05-13 06:35:43.754188
Paths
=====
conf.d: /root/.datadog-agent/agent/conf.d
checks.d: /root/.datadog-agent/agent/checks.d
Hostnames
=========
socket-hostname: raspberrypi
ec2-hostname: raspberrypi
hostname: raspberrypi
socket-fqdn: raspberrypi
Checks
======
network
-------
- instance #0 [OK]
- Collected 8 metrics & 0 events
Emitters
========
- http_emitter [OK]
===================
Dogstatsd (v 4.2.1)
===================
Status date: 2014-05-13 15:35:44 (0s ago)
Pid: 2166
Platform: Linux-3.10.25+-armv6l-with-debian-7.5
Python Version: 2.7.3
Logs: <stderr>, syslog:/dev/log
Flush count: 4391
Packet Count: 0
Packets per second: 0.0
Metric count: 0
Event count: 0
===================
Forwarder (v 4.2.1)
===================
Status date: 2014-05-13 15:35:45 (1s ago)
Pid: 2167
Platform: Linux-3.10.25+-armv6l-with-debian-7.5
Python Version: 2.7.3
Logs: <stderr>, syslog:/dev/log
Queue Size: 0 bytes
Queue Length: 0
Flush Count: 2901
Transactions received: 1395
Transactions flushed: 1395
|
ここまでできれば、Dogstatsdを使ってGPIOで収集したデータをDatadoghq.comへ送信できます。
Raspberry piにもDatadog Agentをインストールしてみる(前編)