Amazon ECS(Docker)をDatadogで監視する

シンジです。Datadogを使うと、ホストはもちろん、その上で動くコンテナの利用状況や死活監視が出来るというのが特徴的です。通常のサーバー監視はエージェントをピロッとインストールすれば監視配下に置かれるのですが、コンテナはちょっとコツがいるのでそのお話です。

とりあえずコンテナは存在するものとします

今回はAmazon ECSを利用しました。

とりあずDatadogも登録しているものとします

お試しできるので是非どうぞ。

手順

  1. ホストのサーバーにDatadog Agentをインストールする
  2. ホストのサーバーからDocker用のDatadog Agentをインストールする
  3. Docker用の監視設定ファイルをごにょごにょしてからAgent起動する

ホストのサーバーにDatadog Agentをインストールする

Datadogのダッシュボードを開きましょう。左メニューのIntegrationのAgentを選んで、「Amazon Linux」を選択します。

すると1行ペラっとコマンド出てきますから、それをコピーします。

DD_API_KEY=APIKEY bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh)"

ターミナルでホストのサーバーにSSHでログインしましょう。んでもってさっきのコードを実行します。

[ec2-user@ip-10-0-1-97 ~]$ DD_API_KEY=APIKEY bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh)"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7140  100  7140    0     0  24893      0 --:--:-- --:--:-- --:--:-- 24965

* Installing YUM sources for Datadog

* Installing the Datadog Agent package

読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ datadog-agent.x86_64 1:5.4.3-1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package               アーキテクチャー
                                      バージョン          リポジトリー     容量
================================================================================
インストール中:
 datadog-agent         x86_64         1:5.4.3-1           datadog          51 M

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 51 M
インストール容量: 171 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
/var/tmp/rpm-tmp.A0BNyy: line 40: /etc/init.d/datadog-agent: そのようなファイルやディレクトリはありません
find: `/opt/datadog-agent/agent': そのようなファイルやディレクトリはありません
  インストール中          : 1:datadog-agent-5.4.3-1.x86_64                  1/1
Please supply a configuration file at /etc/dd-agent/datadog.conf or in the directory where the Agent is currently deployed.
Stopping Datadog Agent (using killproc on supervisord): [失敗]
/etc/dd-agent/datadog.conf not found. Exiting.
  検証中                  : 1:datadog-agent-5.4.3-1.x86_64                  1/1

インストール:
  datadog-agent.x86_64 1:5.4.3-1

完了しました!

* Adding your API key to the Agent configuration: /etc/dd-agent/datadog.conf

* Starting the Agent...

Stopping Datadog Agent (using killproc on supervisord):    [失敗]
Starting Datadog Agent (using supervisord):                [  OK  ]

Your Agent has started up for the first time. We're currently verifying that
data is being submitted. You should see your Agent show up in Datadog shortly
at:

    https://app.datadoghq.com/infrastructure

Waiting for metrics.................................

Your Agent is running and functioning properly. It will continue to run in the
background and submit metrics to Datadog.

If you ever want to stop the Agent, run:

    sudo /etc/init.d/datadog-agent stop

And to run it again run:

    sudo /etc/init.d/datadog-agent start

ホストのサーバーからDocker用のDatadog Agentをインストールする

これも先ほどと同様、DatadogのダッシュボードからAgentでDockerを選択して、1行のコードをペロッとコピーします

docker run -d --name dd-agent -h `hostname` -v /var/run/docker.sock:/var/run/docker.sock -v /proc/mounts:/host/proc/mounts:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY=APIKEY datadog/docker-dd-agent
[ec2-user@ip-10-0-1-97 ~]$ docker run -d --name dd-agent -h `hostname` -v /var/run/docker.sock:/var/run/docker.sock -v /proc/mounts:/host/proc/mounts:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY=APIKEY
Unable to find image 'datadog/docker-dd-agent:latest' locally
latest: Pulling from datadog/docker-dd-agent
902b87aaaec9: Pull complete
9a61b6b1315e: Pull complete
73411ea4c124: Pull complete
2a32eedd496e: Pull complete
bd19255efaef: Pull complete
2c01de0c9149: Pull complete
19b1f2b6e1ae: Pull complete
f5e3a948e215: Pull complete
987960b516ce: Pull complete
9fe0efb52145: Pull complete
97e918c2970f: Pull complete
714d99aa1c04: Already exists
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for datadog/docker-dd-agent:latest
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Docker用の監視設定ファイルをごにょごにょしてからAgent起動する

サンプルのyamlが配置されてるので、それをコピーしてリネームします。その後起動して、一応確認します。

[ec2-user@ip-10-0-1-97 ~]$ sudo cp /etc/dd-agent/conf.d/docker.yaml.example /etc/dd-agent/conf.d/docker.yaml
[ec2-user@ip-10-0-1-97 ~]$ ls -la /etc/dd-agent/conf.d/docker.yaml
-rw-r--r-- 1 root root 2399  8月 28 13:00 /etc/dd-agent/conf.d/docker.yaml
[ec2-user@ip-10-0-1-97 ~]$ dd-agent start
Log file is unwritable: '/var/log/datadog/collector.log'
2015-08-28 13:01:12,606 | WARNING | dd.collector | utils.deprecations(deprecations.py:11) | Using this command is deprecated and will be removed in a future version, for more information see https://github.com/DataDog/dd-agent/wiki/Deprecation-notice--(old-command-line-tools)
2015-08-28 13:01:12,608 | INFO | dd.collector | utils.pidfile(pidfile.py:40) | Pid file is: /tmp/dd-agent.pid
2015-08-28 13:01:12,608 | INFO | dd.collector | collector(dd-agent:258) | Agent version 5.4.3
2015-08-28 13:01:12,608 | INFO | dd.collector | collector(dd-agent:261) | Start daemon
2015-08-28 13:01:12,608 | INFO | dd.collector | daemon(daemon.py:160) | Starting
2015-08-28 13:01:12,608 | INFO | dd.collector | daemon(daemon.py:173) | Pidfile: /tmp/dd-agent.pid
[ec2-user@ip-10-0-1-97 ~]$ dd-agent info
Log file is unwritable: '/var/log/datadog/collector.log'
2015-08-28 13:01:24,626 | WARNING | dd.collector | utils.deprecations(deprecations.py:11) | Using this command is deprecated and will be removed in a future version, for more information see https://github.com/DataDog/dd-agent/wiki/Deprecation-notice--(old-command-line-tools)
===================
Collector (v 5.4.3)
===================

  Status date: 2015-08-28 13:01:13 (11s ago)
  Pid: 9954
  Platform: Linux-3.14.48-33.39.amzn1.x86_64-x86_64-with-glibc2.2.5
  Python Version: 2.7.10
  Logs: syslog:/dev/log

  Clocks
  ======

    NTP offset: -0.0022 s
    System UTC time: 2015-08-28 13:01:24.641015

  Paths
  =====

    conf.d: /etc/dd-agent/conf.d
    checks.d: /opt/datadog-agent/agent/checks.d

  Hostnames
  =========

    ec2-hostname: ip-10-0-1-97.ap-northeast-1.compute.internal
    local-ipv4: 10.0.1.97
    local-hostname: ip-10-0-1-97.ap-northeast-1.compute.internal
    socket-hostname: ip-10-0-1-97
    public-hostname: ec2-52-69-132-73.ap-northeast-1.compute.amazonaws.com
    hostname: i-252b40d7
    instance-id: i-252b40d7
    public-ipv4: 52.69.132.73
    socket-fqdn: ip-10-0-1-97.ap-northeast-1.compute.internal

  Checks
  ======

    ntp
    ---
      - instance #0 [OK]
      - Collected 1 metric, 0 events & 2 service checks

    docker
    ------
      - instance #0 [OK]
      - Collected 17 metrics, 0 events & 2 service checks

    disk
    ----
      - instance #0 [OK]
      - Collected 32 metrics, 0 events & 1 service check

    network
    -------
      - instance #0 [OK]
      - Collected 0 metrics, 0 events & 1 service check


  Emitters
  ========

    - http_emitter [OK]

以上で完了です

最初の画面のように、Dockerメトリクスが取得出来るようになっているはずです。最初の画面は簡易的に作ったダッシュボードですが、いろいろ監視出来るのでDatadog楽しく使えそうです