Etizolam

For our good night sleep.

Raspberry piにもDatadog Agentをインストールしてみる(後編)

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をインストールしてみる(前編)