datadogでdocker-composeを使ってnginxを監視する方法

##Datadogでnginxを監視する

有償の監視ツールdatadogでnginxを監視する方法。
ただし、datadogのagentはdocker-composeでセットアップする場合・・

公式ドキュメント（ほぼ役に立たない）
https://docs.datadoghq.com/ja/integrations/nginx/?tab=host

まず、これを見てnginxのstatus_moduleを入れてください。
（ここまではdocker関係ないです）

要は、localhost:81でステータスが見れてたらOK。

## 公式ドキュメント

docker-composeを使ってnginxを監視する設定ぐらいサンプルがあるやろ！！！

> コンテナ環境の場合は、オートディスカバリーのインテグレーションテンプレートのガイドを参照して、次のパラメーターを適用してください。

で、案内されるページに行っても、docker-composeのサンプルもなにもない・・・
https://docs.datadoghq.com/ja/agent/kubernetes/integrations/?tab=kubernetes

要は、適当にコンフィグファイル.yamlを作ってコピーするなり、マウントしてやればいいらしい？
サンプルファイル？なにそれ？

conf.d/<INTEGRATION_NAME>.d/conf.yaml

で、nginx用の設定はこれらしい

```
<インテグレーション名>	nginx
<初期コンフィギュレーション>	空白または {}
<インスタンスコンフィギュレーション>	{"nginx_status_url": "http://%%host%%:81/nginx_status/"}
```

さらにわからん！！！！<インテグレーション名>って何を入れたらいいんですか？
どこに？何というファイル名で？
公式ドキュメントが不親切すぎる！！！！

datadogは有償ツール故に試してみた的な記事も殆どない・・・

ということで、以下が正解のdocker-compose.ymlファイルです。

## docker-compose.yml

```
version: "3.8"
services:
  web:
    build:
      context: ./docker/nginx
    ports:
      - 80:80
    # 関係ない設定は削除
    # ここまでの設定はdatadogとは関係なし 81番ポートを開ける必要はなし
    # ここからがdatadogでログを取る核心部分の設定
    links:
      - dd-agent:dd-agent
    depends_on:
      - dd-agent
    labels:
      com.datadoghq.ad.check_names: '["nginx"]'
      com.datadoghq.ad.init_configs: '[{}]'
      com.datadoghq.ad.instances: '[{"nginx_status_url": "http://%%host%%:81/nginx_status"}]'
      com.datadoghq.ad.logs: '[{"source": "nginx", "service": "web"}]'


# datadogのコンテナ設定
  dd-agent:
    container_name: dd-agent
    image: datadog/agent:7
    environment:
      - DD_API_KEY=ここに自分のAPIキーを書く
      - DD_APM_ENABLED=true
      - DD_LOGS_ENABLED=true
      - DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
      - DD_AC_EXCLUDE="name:dd-agent"
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/:/host/proc/:ro
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
    ports:
      - "8126:8126/tcp"
```

これでコンテナを立ち上げて、docker psで生存確認。healtyになっていたらOK。

```
$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                    PORTS                                      NAMES
577f6b34b971        datadog/agent:7      "/init"                  39 seconds ago      Up 37 seconds (healthy)   8125/udp, 0.0.0.0:8126->8126/tcp           dd-agent
```

生きていれば、datadogのstatusチェック。

```
$ docker exec -it dd-agent agent status
```

このコマンドで、checkの中にnginxって文字列があってなにかしているようであればOK。（長いので省略）

```

    nginx (3.9.0)
    -------------
      Instance ID: nginx:[OK]
      Configuration Source: docker:docker://
      Total Runs: 4
      Metric Samples: Last Run: 7, Total: 28
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 4
      Average Execution Time : 5ms
      Last Execution Date : 2020-10-27 10:20:20.000000 UTC
      Last Successful Execution Date : 2020-10-27 10:20:20.000000 UTC
      metadata:
        version.major: 1
        version.minor: 18
        version.patch: 0
        version.raw: 1.18.0
        version.scheme: semver

```

こんな基本的なアプリケーションの組み合わせのサンプルも記事も無いとかdatadog無いわ・・・・厳しいわ・・・

## ハマリポイント
API_KEYじゃなくてDD_API_KEY
古いdd-agentを使っているとstatusコマンドが存在しなかった　etc

### 多少参考になった記事

https://y-ohgi.com/2019-aws-handson/datadog/docker-compose/
https://tech.griphone.co.jp/2018/12/02/advent-calendar-20181202/
https://qiita.com/comefigo/items/4d867a39ad2fd5b9bbd2
https://qiita.com/spesnova/items/b1f2cc4e33ddf7cea285