図解で、Datadogエージェントの設定手順

# ゴール設定
クラウドとオンプレミスの両方にあるインフラをDatadogで監視したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/629338ee-f74e-fcbc-e934-6a39905bab90.png)

**▼ 対象システムはこれ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/a9749045-a02f-ebbe-2d30-ecb963a56039.png)

**▼ ここを監視したい**
ここにメモする監視手順の対象は２つ、一つ目はインターネットVPNの通信正常性、二つ目はオンプレミスにあるアプリサーバーのHTTPレスポンスの正常性。Zabbixでやれば、と言われそうだがZabbix監視サーバー自体の面倒は見たくないので運用付の監視SaaSを使う。インターネットからWEBサイトへのURL監視はdatadogのSynthetics機能を使う(ここでは省略)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/b41bb127-c7be-9327-4cd6-9872336de0c4.png)
以下、(A)(B)を対象に監視手順をメモします。
(A) [http_check] インターネットVPNの通信正常性
(B) [ping] 監視対象デバイスpingの応答正常性

## Datadog設定手順（概要）
1. エージェントのインストール
2. Checkスクリプト追加（エージェントに含まれている場合は不要）
3. エージェントのConfig設定
4. 追加した監視の動作確認
5. 監視ダッシュボードとアラート通知を作成

## 監視手順を追加するときの要点
ひとつの監視は、「監視スクリプト、監視コンフィグ、ダッシュボード」の３つをワンセットで登録すると覚えておけば簡単です。例えばファイルはこの２つとdatadogダッシュボード側が１セット。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/18f8e1ec-66bb-07a0-8663-4057094a67df.png)


## 1. エージェントのインストール
下記URLに移動してdotadog管理ポータルにログインしてAPIキー付きコマンドを取得します。監視エージェントをインストールするサーバーのOSにログインして、APIキー付きコマンドを実行します。
URL CentOSの場合 <<https://app.datadoghq.com/account/settings#agent/centos>>
※アクセス先のdatadogポータルで他のOSも選べます。

この様なコマンドです、rootパスワードを聞かれます： 

```
$ DD_API_KEY=1************9 bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"
```

URL Windowsの場合 <https://app.datadoghq.com/account/settings#windows>
Windowsの場合は「datadog-agent-version.amd64.msi」のようなインストーラーをダウンロードしてAdmin権限で実行する。途中でDatadog API keyを入力するのでDatadogポータルからコピーする。よく見ると、インストーラーの下の方にdosプロンプトのコマンドラインか、PowerShellからコマンドラインの実行コマンドの記載があるので、コマンドラインでもインストーラーを実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/f65a6c27-e93a-6a3e-24e8-425e333fb704.png)

### モニタリング開始
エージェントをインストールするだけで、監視対象サーバーのリソースモニタがスタートします。datadogダッシュボードを開いてCPU、メモリの利用率、ディスク容量、ネットワークトラフィックを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/8cf964c0-a0a3-14d7-f958-c7d47f346147.png)



### －－ ここから監視項目毎に設定をします －－－－－
# (A) http応答監視[http_check]を設定してみます

## 2. Checkスクリプト追加
[http_check] 今回インターネットVPNの疎通検査はオンプレ側のhttp応答有り無しで判断します。datadog-agentには最初から[http_check]が含まれるので、**checkスクリプトの追加は不要**です。

## 3. エージェントのConfig設定
(A) [http_check] Configファイルの[name]に好きな名前、[url]に検査するURL、デフォルトでは15秒おきだけどログ保存料金をケチりたいので60秒おきを指定します。

```/etc/datadog-agent/conf.d/http_check.d/http_check.yaml
init_config:

instances:

  - name: アプリサーバー1
    url: https://hoge1.com/
    min_collection_interval: 60

  - name: アプリサーバー2
    url: https://hoge2.com/
    min_collection_interval: 60

  - name: アプリサーバー3_Basic認証有り
    url: https://hoge3.com/
    username: <ユーザ名>
    password: <パスワード>
    min_collection_interval: 60

```

なお、Configファイルは、次の２つの書き方のどちらでも動くようです（<1>Checkスクリプトと同じ名前のyaml　<2>Checkスクリプトと同じ名前のディレクトリにあるconf.yaml）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/2826de8d-c773-b07a-ebd9-16c6b2fffdec.png)

### 設定した監視を有効にするため、監視エージェントを再起動します。

```
$ sudo systemctl restart datadog-agent
```


## 4. 追加した監視の動作確認
監視スクリプト(xxx.py)と監視コンフィグ(xxx.yaml)が正しく設定できているか検査することができます。[OK]と表示されていれば正常、[Error]なら失敗。

```
$ sudo datadog-agent check http_check

  Running Checks
  ==============
    http_check (4.3.1)
    ------------------
      Instance ID: http_check:アプリサーバー:a**************0 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/http_check.yaml
```

## 5. 監視ダッシュボードを作成
datadogのWEBサイトでログインして、datadog操作メニューからダッシュボードを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/f3708059-0f56-8d32-677a-9acb22705f7f.png)

そしたらダッシュボードにウィジェットを追加して[http_check] http応答の正常性(Up/Donw)と応答時間の傾向を可視化します。

### HTTP応答の正常性をグラフ描画してみます
監視データは[network.http.can_connect]、fromには[監視対象のURL]を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/fbee8ca8-657a-8911-9550-5fecf3050c80.png)
[Done]を押して設定を保存すると、ダッシュボードに[1=UP, 0=DOWN]が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/d485b995-17e9-8435-9e9a-2aa24666b9ad.png)

### HTTP応答時間のグラフを描画してみます
監視エージェントからみてWEBサイトの応答時間をグラフ化するので、監視データは[network.http.response_time]、fromには[監視エージェントのホスト]を選びます。[Done]を押すとhttp応答時間のグラフが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/9de0809c-d42b-8ea4-4164-f8bc6a2be564.png)

# (B) こんどはping応答監視[ping]を設定してみます
２つのファイルを準備します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/18f8e1ec-66bb-07a0-8663-4057094a67df.png)


## 2. Checkスクリプト追加
Checkスクリプトファイル[ping.py]を新規作成します。ping応答してくれるデバイスになら何でも使えそうな監視です。

2-1. pingのcheckスクリプトに関する説明はこちら
<https://github.com/DataDog/integrations-extras/tree/master/ping>

2-2. 公式サイトと手順は異なりますが、今回は後でコード修正を試したいのでpythonスクリプトのを作成します。
元にする [ping.py] コードはここを参照しました。
<https://github.com/DataDog/integrations-extras/blob/master/ping/datadog_checks/ping/ping.py>

checkスクリプトの一部

``` /etc/datadog-agent/checks.d/ping.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Licensed under Simplified BSD License (see LICENSE)

import platform
import re

from datadog_checks.checks import AgentCheck
from datadog_checks.errors import CheckException
from datadog_checks.utils.subprocess_output import get_subprocess_output


class PingCheck(AgentCheck):

    SERVICE_CHECK_NAME = "network.ping.can_connect"

　　＜以下、省略＞
```

## 3. エージェントのConfig設定

Config設定ファイル[ping.yaml]には、pingのテスト周期と監視対象デバイスのIPアドレスを指定します。

```/etc/datadog-agent/conf.d/ping.yaml
init_config:
    basename: ping
    check_times: 10
    threads_count: 6
    interval: 0.1
    collect_response_time: True

instances:
    - host: 10.132.7.46
    - host: 10.132.7.25
```

### 監視を設定したら監視エージェントを再起動です。

```
$ sudo systemctl restart datadog-agent
```

## 5. 監視ダッシュボードを作成
[OK]か[NG]か、を一目でわかるようにしたいのでウィジェットは[Check Status]を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/be2035c2-20c8-14b6-501a-82f000b640a5.png)

アラート通知は、ping応答正常性の値 [1]未満になったとき、アラート通知したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/858b8e70-6362-6084-3296-5bff6d7ee4e4.png)

## 6. アラート通知を作成
datadogメニューで[New Monitor]をクリックします。
監視対象のメトリック[networki.ping.can_connect]と監視対象の[target_host:***]を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/0796cda6-bdca-d794-726d-eaf56479ea4c.png)

アラート通知するしきい値を設定します。ping応答の正常性は値[1]または[0]なので、1未満ならアラートを通知して、1に戻ったときに復帰メールを送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/dd814e1f-2091-c5e1-a66a-ee9f1247d1f2.png)

アラート通知メールの件名、本文を設定します。最後に[Save]したらアラート通知をテストします。
メール件名と内容を自由に日本語で記載できるのが嬉しいです、ついでにやろうと思えばアクション手順なんかも記載できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/0d29dbd1-d506-473e-4513-2419787c807f.png)

## 7. アラート通知の検査
試しにサーバーのFWでICMPをブロックしてみました。しばらくするとアラート通知メールが届きました。設定したメール本文にdatadogモニタの図が追記されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/ebeec405-7ddc-c737-8ec3-1bf2051b9675.png)

今度はサーバーのFWでICMPを許可しました。今度は復帰メールが届きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/79c5e2d7-bfab-0767-b386-a50c744dbd5e.png)

イベント[Event Monitor]にも記載されます、あとで履歴をたどるときに便利ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e35248bb-5c5b-bff8-52b9-749e7a3efdcb.png)

## datadogダッシュボードの表示を改造
公式デフォルトのCheckスクリプトではホストのIPアドレスで表示できます。これをホスト名に変更したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/dd32b1b5-2607-dfe3-c34f-80e5f19f8cbb.png)
変更箇所は２つ、[ping.pyの★部分２行]と[ping.yaml]です。

```/etc/datadog-agent/checks.d/ping.py
class PingCheck(AgentCheck):

    SERVICE_CHECK_NAME = "network.ping.can_connect"

    def _load_conf(self, instance):
        # Fetches the conf
        timeout = float(instance.get("timeout", 4))
        response_time = instance.get("collect_response_time", False)
        custom_tags = instance.get("tags", [])

        host = instance.get("host", None)
        if host is None:
            raise CheckException("A valid host must be specified")

        # ★↓ここを追加★
        name = instance.get("name", "n/a")

        return host, name, custom_tags, timeout, response_time

        # ＜中略＞

    def check(self, instance):
        host, name, custom_tags, timeout, response_time = self._load_conf(instance)

        # ★↓ここを追加★
        custom_tags.append("target_name:{}".format(name))
        custom_tags.append("target_host:{}".format(host))
```

```/etc/datadog-agent/conf.d/ping.yaml
cat ping.yaml
init_config:
    basename: ping
    check_times: 10
    threads_count: 6
    interval: 0.1
    collect_response_time: True

instances:
    - host: 10.132.7.46
      name: Win03
    - host: 10.132.7.25
      name: GW001
```

# (C) Apache 統合（integration）を設定してみます

1 まずDatadogのintegrationを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/701387c4-46e6-8b2a-e8a5-3843b4c498eb.png)

Basic認証付きの場合

```/etc/datadog-agent/conf.d/apache.d/conf.yaml
instances:
  - apache_status_url: http://xxxx.xx.xx/server-status?auto
    username: xxxxx
    password: xxxxx
```

こちらもBasic認証付きの場合[Satisfy Any]を追加する

```/etc/httpd/conf/httpd.conf
<Location /server-status>
  SetHandler server-status
  Require all denied
  Require ip 127.0.0.1
  Satisfy Any
</Location>

```

設定が正しい場合、グラフが描画される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/164ee3e4-9067-42d8-37b6-0e67b1745d59.png)

# (D) SystemDを統合（integration）したときのプロセス監視
設定コマンド↓。コンテナ必須。

```
docker run -d -v /var/run/docker.sock:/var/run/docker.sock:ro \
              -v /proc/:/host/proc/:ro \
              -v /sys/fs/cgroup/:/host/sys/fs/cgroup/:ro \
              -v /run/systemd/:/host/run/systemd/:ro \
              -e DD_API_KEY=<API Key> \
              datadog/agent:latest
```



## まとめ
クラウドとオンプレミスの両方にあるインフラをDatadogで監視できます。インターネットVPNの通信監視もできるし、他にも活用できそうなのでもっと勉強してみます。

### 参考（メトリクス）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/7640cc33-1dc4-e03b-95eb-fd4e66a19d33.png)

## Datadog関連記事

- [図解で、Datadogエージェントの設定手順] (https://qiita.com/1Kano/items/3533a8ebe5f6777840a6)
- [DatadogカスタムCheckの一番小さなコード] (https://qiita.com/1Kano/items/f1f897d8ee943f318c3e)
- [Datadogのデータ予測機能を使う] (https://qiita.com/1Kano/items/b6b484ae3e9afca3d296)
- [図解で、うちのワンコを真夏の暑さから守る（Datadogで）] (https://qiita.com/1Kano/items/5f2eed58794f13776a8e)
- [Datadog基本設定メモ（Windowsサーバ）] (https://qiita.com/1Kano/items/633b17fecec058a8eb2c)
- [Datadog基本設定メモ（CentOSサーバ）] (https://qiita.com/1Kano/items/6851fbe099f9be3fbe14)
- [Datadog基本設定（Log Explorer）] (https://qiita.com/1Kano/items/1c959c20cba3151db071)
- [Datadog基本設定（APM）] (https://qiita.com/1Kano/items/33dbcbc6bc86d369146a)