概要

はじめに

  • 今回は、DatadogのURL監視(HTTP Check)を設定する方法をご紹介します。
  • Datadogは、SaaSで提供されるシステムモニタリングツールであり、現在担当する案件でも、サーバーやアプリケーションの監視に使用しています。Datadog の概要は、下記のログミーTechで公開されている服部さんの記事を参照ください。
2018年9月22日、Japan Azure User Groupが主催するイベント「Japan Azure User Group 8周年イベント」が開催されました。JAZUG設立8周年を記念した本イベント。Microsoft Azureを用いてサービス開発を行うエンジニアたちが一堂に会し、自身の経験と知見を元に新たな...

Datadogで実現するURL監視

  • DatadogのHTTP Checkを利用して、HTTPエンドポイントに対する死活監視(URL監視)が可能です。HTTP ステータスコードの他に、SSL証明書の検証や期限切れが近い SSL 証明書の特定などの監視が可能です。
  • また、応答時間 (秒単位) をメトリクス(collect_response_time)として収集可能です。

URL監視のmonitorはNetworkから作る

  • DatadogでURL監視(HTTP Check)を行う際のmonitor は、「New Monitor」 ⇒ 「monitor type: Network」 を選択します。

  • ただし、監視対象のサーバーでAgent が未設定の場合は、下記のメッセージが表示されます。
    • 「Please ensure that HTTP and/or TCP checks have been configured in the agent.」

URL監視の送信元を決める

  • 先ず、監視対象のURLに定期的にリクエストを送る検証サーバーを選定します。
  • 上記検証サーバーは、Datadog のAgent がインストールされており、かつ監視対象のHTTPサービス提供するサーバーと異なるサーバーであるべきです。

Datadog Agent の設定

  • Linux の場合は、下記にDatadog Agent のHTTP Check設定を配置します。
    • /etc/datadog-agent/conf.d/http_check.d/conf.yaml
  • Windows の場合は、下記にDatadog Agent のHTTP Check設定を配置します。
    • C:\ProgramData\Datadog\conf.d\http_check.d\conf.yaml
  • 以下、conf.yaml のサンプルです。
  • デフォルトでは、SSL の有効性をチェックしません。ただし、期限切れが近い SSL 証明書のチェックはデフォルトで行われます。
init_config:

instances:
  - name: AAA.example.com
    url: https://AAA.example.com
    timeout: 10
    http_response_status_code: 200
    min_collection_interval: 300

  - name: BBB.example.com
    url: http://BBB.example.com
    timeout: 10
    http_response_status_code: 200
    min_collection_interval: 300

Datadog Agent の再起動

  • Linuxの場合は、下記コマンドでconf.yamlを配置して、Datadog Agentを再起動します。
$ cd /etc/datadog-agent/conf.d/http_check.d
$ sudo vi conf.yaml

$ sudo systemctl restart datadog-agent.service

$ sudo datadog-agent status
  • Windowsの場合は、下記コマンドでconf.yamlを配置して、Datadog Agentを再起動します。
← "C:\ProgramData\Datadog\conf.d\http_check.d"にconf.yamlを配置します

← PowerShell を管理者として起動します

PS C:\Users\Administrator> cd "C:\Program Files\Datadog\Datadog Agent\embedded"
PS C:\Program Files\Datadog\Datadog Agent\embedded> ./agent.exe restart-service
PS C:\Program Files\Datadog\Datadog Agent\embedded> ./agent.exe status
  • 以下は、agent.exe status の結果サンプルです。(Linux のsudo datadog-agent status も同様です)
  • HTTP Checkの内容が「http_check」 として、情報が出力されています。
===============
Agent (v6.14.1)
===============

  Status date: 2019-10-26 20:42:53.857443 JST
  Agent start: 2019-10-25 23:42:15.454062 JST
  Pid: 5224
  Go Version: go1.12.9
  Python Version: 2.7.16
  Check Runners: 4
  Log Level: info

  Paths
  =====
    Config File: C:\ProgramData\Datadog\datadog.yaml
    conf.d: C:\ProgramData\Datadog\conf.d
    checks.d: C:\ProgramData\Datadog\checks.d

  Clocks
  ======
    NTP offset: 1.283ms
    System UTC time: 2019-10-26 20:42:53.857443 JST

  Host Info
  =========
    bootTime: 2019-10-07 16:58:42.000000 JST
    os: windows
    platform: Windows Server 2019 Datacenter
    platformFamily: Windows Server 2019 Datacenter
    platformVersion: 10.0 Build 17763
    procs: 134
    uptime: 438h43m32s

  Hostnames
  =========
    ec2-hostname: ip-XX-XX-XX-XX.ap-northeast-1.compute.internal
    hostname: hostname1
    instance-id: i-0123456789abcdefg
    socket-fqdn: hostname1
    socket-hostname: hostname1
    hostname provider: os
    unused hostname providers:
      aws: not retrieving hostname from AWS: the host is not an ECS instance, and other providers already retrieve non-default hostnames
      configuration/environment: hostname is empty
      gce: unable to retrieve hostname from GCE: status code 404 trying to GET http://169.254.169.254/computeMetadata/v1/instance/hostname

=========
Collector
=========



  Running Checks
  ==============

    cpu
    ---
      Instance ID: cpu [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\cpu.d\conf.yaml.default
      Total Runs: 5,043
      Metric Samples: Last Run: 7, Total: 35,295
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s


    disk (2.5.0)
    ------------
      Instance ID: disk:e5dffb8bef24336f [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\disk.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 6, Total: 30,252
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 2ms


    file_handle
    -----------
      Instance ID: file_handle [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\file_handle.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 1, Total: 5,042
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1ms


    http_check (4.2.0)
    ------------------
      Instance ID: http_check:AAA.example.com:18c391eda9aa3f3d [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\http_check.d\conf.yaml
      Total Runs: 253
      Metric Samples: Last Run: 5, Total: 1,265
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 2, Total: 506
      Average Execution Time : 97ms

      Instance ID: http_check:BBB.example.com:86495e385cafb9dd [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\http_check.d\conf.yaml
      Total Runs: 252
      Metric Samples: Last Run: 5, Total: 1,260
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 2, Total: 504
      Average Execution Time : 106ms


    io
    --
      Instance ID: io [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\io.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 5, Total: 25,210
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s


    memory
    ------
      Instance ID: memory [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\memory.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 17, Total: 85,714
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1ms


    network (1.11.4)
    ----------------
      Instance ID: network:e0204ad63d43c949 [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\network.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 12, Total: 60,504
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1ms


    ntp
    ---
      Instance ID: ntp:d884b5186b651429 [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\ntp.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 1, Total: 5,042
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 5,042
      Average Execution Time : 0s


    uptime
    ------
      Instance ID: uptime [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\uptime.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 1, Total: 5,042
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s


    winproc
    -------
      Instance ID: winproc [[32mOK[0m]
      Configuration Source: file:C:\ProgramData\Datadog\conf.d\winproc.d\conf.yaml.default
      Total Runs: 5,042
      Metric Samples: Last Run: 2, Total: 10,084
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s

========
JMXFetch
========

  Initialized checks
  ==================
    no checks

  Failed checks
  =============
    no checks

=========
Forwarder
=========

  Transactions
  ============
    CheckRunsV1: 5,042
    Dropped: 0
    DroppedOnInput: 0
    Events: 0
    HostMetadata: 0
    IntakeV1: 170
    Metadata: 0
    Requeued: 0
    Retried: 0
    RetryQueueSize: 0
    Series: 0
    ServiceChecks: 0
    SketchSeries: 0
    Success: 10,254
    TimeseriesV1: 5,042

  API Keys status
  ===============
    API key ending with 123ab: API Key valid

==========
Endpoints
==========
  https://app.datadoghq.com - API Key ending with:
      - 123ab

==========
Logs Agent
==========

  Logs Agent is not running

=========
Aggregator
=========
  Checks Metric Sample: 352,104
  Dogstatsd Metric Sample: 347,912
  Event: 1
  Events Flushed: 1
  Number Of Flushes: 5,042
  Series Flushed: 434,685
  Service Check: 49,245
  Service Checks Flushed: 54,282

=========
DogStatsD
=========
  Event Packets: 0
  Event Parse Errors: 0
  Metric Packets: 347,911
  Metric Parse Errors: 0
  Service Check Packets: 0
  Service Check Parse Errors: 0
  Udp Bytes: 22.4 M
  Udp Packet Reading Errors: 0
  Udp Packets: 347,912
  Uds Bytes: 0
  Uds Origin Detection Errors: 0
  Uds Packet Reading Errors: 0
  Uds Packets: 0

URL監視のmonitor を作成する

  • Datadog Agentの設定が完了したら、URL監視のmonitor を作成します。
  • Agentのconf.yaml に記述したURLによって、http or https の選択が変わります。以下、monitor 作成時の画面サンプルです。
  • 以下、httpのURLの場合です。

  • 以下、httpsのURLの場合です。

参考情報

http.can_connectメトリクスの説明

  • 次のいずれかが発生したら DOWN を返します。
    • uri へのリクエストがタイムアウトした
    • 応答コードが 4xx/5xx または http_response_status_code で指定されているパターンコードと一致しない
    • 応答本文が content_match のパターンと一致しない
    • reverse_content_match が true で、応答本文が content_match のパターンを含む
    • uri に https が含まれ、disable_ssl_validation が false であり、SSL 接続を検証できない
  • これら以外の場合は UP を返します。

http.ssl_certメトリクスの説明

  • チェックは次の内容を返します。
    • uri の証明書が既に期限切れの場合は DOWN
    • uri の証明書が days_critical 日未満に期限切れになる場合は CRITICAL
    • uri の証明書が days_warning 日未満に期限切れになる場合は WARNING
  • これら以外の場合は UP を返します。
  • このチェックを無効にするには、check_certificate_expiration を false に設定します。

その他

  • 下記資料を参照ください。
Datadogが大規模なクラウドのモニタリングサービスをリードします。

元記事はこちら

DatadogでURL監視を設定する方法