ゴール設定
クラウドとオンプレミスの両方にあるインフラをDatadogで監視したい。
▼ ここを監視したい
ここにメモする監視手順の対象は2つ、一つ目はインターネットVPNの通信正常性、二つ目はオンプレミスにあるアプリサーバーのHTTPレスポンスの正常性。Zabbixでやれば、と言われそうだがZabbix監視サーバー自体の面倒は見たくないので運用付の監視SaaSを使う。インターネットからWEBサイトへのURL監視はdatadogのSynthetics機能を使う(ここでは省略)。
以下、(A)(B)を対象に監視手順をメモします。
(A) [http_check] インターネットVPNの通信正常性
(B) [ping] 監視対象デバイスpingの応答正常性
Datadog設定手順(概要)
- エージェントのインストール
- Checkスクリプト追加(エージェントに含まれている場合は不要)
- エージェントのConfig設定
- 追加した監視の動作確認
- 監視ダッシュボードとアラート通知を作成
監視手順を追加するときの要点
ひとつの監視は、「監視スクリプト、監視コンフィグ、ダッシュボード」の3つをワンセットで登録すると覚えておけば簡単です。例えばファイルはこの2つとdatadogダッシュボード側が1セット。
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からコマンドラインの実行コマンドの記載があるので、コマンドラインでもインストーラーを実行できます。
モニタリング開始
エージェントをインストールするだけで、監視対象サーバーのリソースモニタがスタートします。datadogダッシュボードを開いてCPU、メモリの利用率、ディスク容量、ネットワークトラフィックを確認できます。
-- ここから監視項目毎に設定をします -----
(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秒おきを指定します。
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)
設定した監視を有効にするため、監視エージェントを再起動します。
$ 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操作メニューからダッシュボードを作成する。
そしたらダッシュボードにウィジェットを追加して[http_check] http応答の正常性(Up/Donw)と応答時間の傾向を可視化します。
HTTP応答の正常性をグラフ描画してみます
監視データは[network.http.can_connect]、fromには[監視対象のURL]を選びます。
[Done]を押して設定を保存すると、ダッシュボードに[1=UP, 0=DOWN]が表示されます。
HTTP応答時間のグラフを描画してみます
監視エージェントからみてWEBサイトの応答時間をグラフ化するので、監視データは[network.http.response_time]、fromには[監視エージェントのホスト]を選びます。[Done]を押すとhttp応答時間のグラフが表示されます。
(B) こんどはping応答監視[ping]を設定してみます
2. Checkスクリプト追加
Checkスクリプトファイル[ping.py]を新規作成します。ping応答してくれるデバイスになら何でも使えそうな監視です。
2-1. pingのcheckスクリプトに関する説明はこちら
<>
2-2. 公式サイトと手順は異なりますが、今回は後でコード修正を試したいのでpythonスクリプトのを作成します。
基にする [ping.py] コードはここを参照しました。
<>
checkスクリプトの一部
#!/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アドレスを指定します。
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]を選びます。
アラート通知は、ping応答正常性の値 [1]未満になったとき、アラート通知したい。
6. アラート通知を作成
datadogメニューで[New Monitor]をクリックします。
監視対象のメトリック[networki.ping.can_connect]と監視対象の[target_host:***]を選びます。
アラート通知するしきい値を設定します。ping応答の正常性は値[1]または[0]なので、1未満ならアラートを通知して、1に戻ったときに復帰メールを送信します。
アラート通知メールの件名、本文を設定します。最後に[Save]したらアラート通知をテストします。
メール件名と内容を自由に日本語で記載できるのが嬉しいです、ついでにやろうと思えばアクション手順なんかも記載できます。
7. アラート通知の検査
試しにサーバーのFWでICMPをブロックしてみました。しばらくするとアラート通知メールが届きました。設定したメール本文にdatadogモニタの図が追記されていました。
今度はサーバーのFWでICMPを許可しました。今度は復帰メールが届きました。
イベント[Event Monitor]にも記載されます、あとで履歴をたどるときに便利ですね。
datadogダッシュボードの表示を改造
公式デフォルトのCheckスクリプトではホストのIPアドレスで表示できます。これをホスト名に変更したい。
変更箇所は2つ、[ping.pyの★部分2行]と[ping.yaml]です。
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))
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)を設定してみます
Basic認証付きの場合
instances:
- apache_status_url: http://xxxx.xx.xx/server-status?auto
username: xxxxx
password: xxxxx
こちらもBasic認証付きの場合[Satisfy Any]を追加する
<Location /server-status>
SetHandler server-status
Require all denied
Require ip 127.0.0.1
Satisfy Any
</Location>
(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の通信監視もできるし、他にも活用できそうなのでもっと勉強してみます。
参考(メトリクス)
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)