32
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DatadogAdvent Calendar 2019

Day 15

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

Last updated at Posted at 2019-12-14

ゴール設定

クラウドとオンプレミスの両方にあるインフラをDatadogで監視したい。
image.png

▼ 対象システムはこれ
image.png

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

Datadog設定手順(概要)

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

監視手順を追加するときの要点

ひとつの監視は、「監視スクリプト、監視コンフィグ、ダッシュボード」の3つをワンセットで登録すると覚えておけば簡単です。例えばファイルはこの2つとdatadogダッシュボード側が1セット。

image.png

1. エージェントのインストール

下記URLに移動してdotadog管理ポータルにログインしてAPIキー付きコマンドを取得します。監視エージェントをインストールするサーバーのOSにログインして、APIキー付きコマンドを実行します。
URL 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

モニタリング開始

エージェントをインストールするだけで、監視対象サーバーのリソースモニタがスタートします。datadogダッシュボードを開いてCPU、メモリの利用率、ディスク容量、ネットワークトラフィックを確認できます。
image.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ファイルは、次の2つの書き方のどちらでも動くようです(<1>Checkスクリプトと同じ名前のyaml <2>Checkスクリプトと同じ名前のディレクトリにあるconf.yaml)
image.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

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

HTTP応答の正常性をグラフ描画してみます

監視データは[network.http.can_connect]、fromには[監視対象のURL]を選びます。
image.png
[Done]を押して設定を保存すると、ダッシュボードに[1=UP, 0=DOWN]が表示されます。
image.png

HTTP応答時間のグラフを描画してみます

監視エージェントからみてWEBサイトの応答時間をグラフ化するので、監視データは[network.http.response_time]、fromには[監視エージェントのホスト]を選びます。[Done]を押すとhttp応答時間のグラフが表示されます。
image.png

(B) こんどはping応答監視[ping]を設定してみます

2つのファイルを準備します。
image.png

2. Checkスクリプト追加

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

2-1. pingのcheckスクリプトに関する説明はこちら

<>

2-2. 公式サイトと手順は異なりますが、今回は後でコード修正を試したいのでpythonスクリプトのを作成します。

基にする [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

アラート通知は、ping応答正常性の値 [1]未満になったとき、アラート通知したい。
image.png

6. アラート通知を作成

datadogメニューで[New Monitor]をクリックします。
監視対象のメトリック[networki.ping.can_connect]と監視対象の[target_host:***]を選びます。
image.png

アラート通知するしきい値を設定します。ping応答の正常性は値[1]または[0]なので、1未満ならアラートを通知して、1に戻ったときに復帰メールを送信します。
image.png

アラート通知メールの件名、本文を設定します。最後に[Save]したらアラート通知をテストします。
メール件名と内容を自由に日本語で記載できるのが嬉しいです、ついでにやろうと思えばアクション手順なんかも記載できます。
image.png

7. アラート通知の検査

試しにサーバーのFWでICMPをブロックしてみました。しばらくするとアラート通知メールが届きました。設定したメール本文にdatadogモニタの図が追記されていました。
image.png

今度はサーバーのFWでICMPを許可しました。今度は復帰メールが届きました。
image.png

イベント[Event Monitor]にも記載されます、あとで履歴をたどるときに便利ですね。
image.png

datadogダッシュボードの表示を改造

公式デフォルトのCheckスクリプトではホストのIPアドレスで表示できます。これをホスト名に変更したい。
image.png
変更箇所は2つ、[ping.pyの★部分2行]と[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

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

(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

Datadog関連記事

32
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?