Datadog APIの使い方

@apidog

@apidog

2 4月 2025

Datadog APIの使い方
💡
Datadog APIや他のAPIを使用する際には、強力なAPI開発およびテストプラットフォームを持つことが重要です。Apidogは、API開発のための包括的なツールスイートを提供する優れたPostmanの代替として際立っています。
ボタン

Datadog APIの紹介

DatadogのAPIは、プラットフォームの強力な監視および分析機能へのプログラムアクセスを提供します。このRESTful APIは、開発者がデータを送信し、視覚化を構築し、コードを通じてDatadogアカウントを管理できるようにします。カスタムアプリケーションの統合、自動化ワークフロー、Datadogの機能拡張に関わらず、APIを活用する方法を理解することは、プラットフォームの可能性を最大限に引き出すために不可欠です。

Datadog APIは、標準のHTTP応答コードを使用し、すべてのリクエストでJSONを受け入れ、返します。また、標準のHTTPメソッドを利用しています。これにより、RESTfulウェブサービスに慣れた開発者にとって直感的になります。APIの包括的な機能は、読み取りおよび書き込み操作を可能にし、監視データの取得だけでなく、Datadog環境のさまざまな側面を構成することもできます。

Datadog APIを習得することで、次のことができるようになります:

Datadog API認証の開始

APIの呼び出しを行う前に、Datadogリソースへの安全なアクセスを確保するために認証を適切に設定する必要があります。

Datadog APIおよびアプリケーションキーの取得

Datadog APIを使用するには、2種類のキーが必要です:

  1. APIキー:これはあなたのDatadogアカウントを特定し、すべてのAPIリクエストに必要です。
  1. アプリケーションキー:多くの管理エンドポイントに必要で、追加の認証を提供し、アクセス権限を指定します。

Datadog API認証ヘッダーの設定

APIリクエストを行う際に、これらのキーをヘッダーとして含める必要があります:

基本的な認証リクエストの例は次のとおりです:

curl -X GET "<https://api.datadoghq.com/api/v1/dashboard>" \\\\
-H "Content-Type: application/json" \\\\
-H "DD-API-KEY: your_api_key_here" \\\\
-H "DD-APPLICATION-KEY: your_app_key_here"

Datadog APIキーのセキュリティ管理

これらのキーが提供するアクセスは重要であり、セキュリティのベストプラクティスに従うことが重要です:

Datadog APIのコア概念

Datadog APIの基本的な概念を理解することで、その広範な機能をより効果的にナビゲートできるようになります。

Datadog APIエンドポイントの構造

Datadog APIは、プラットフォームの機能を反映した論理的な機能エリアに整理されています:

最初のDatadog API呼び出しを行う

一般的なユースケースから始めましょう:カスタムメトリクスを送信すること。この例では、タグ付きのシンプルなゲージメトリクスを送信する方法を示します:

import requests
import time
import json

api_key = "your_api_key_here"
current_time = int(time.time())

payload = {
    "series": [
        {
            "metric": "custom.application.performance",
            "points": [[current_time, 100]],
            "type": "gauge",
            "tags": ["environment:production", "application:web", "region:us-east"]
        }
    ]
}

headers = {
    "Content-Type": "application/json",
    "DD-API-KEY": api_key
}

response = requests.post("<https://api.datadoghq.com/api/v1/series>",
                        headers=headers,
                        data=json.dumps(payload))

print(f"Response Status Code: {response.status_code}")
print(f"Response Body: {response.json()}")

このコードスニペット:

Datadog APIレスポンス形式の理解

Datadog APIのレスポンスは通常、一貫したJSON形式に従います:

{
  "status": "ok",
  "errors": [],
  "data": {
    "id": "abc-123-xyz",
    "name": "Example Resource",
    "created_at": "2023-06-01T12:00:00.000Z",
    "modified_at": "2023-06-02T15:30:00.000Z",
    ...
  }
}

主要なフィールドには:

一般的なDatadog APIのユースケースと例

Datadog APIの実用的なアプリケーションを、主要な機能をカバーする詳細な例を通じて探ります。

Datadog APIダッシュボード情報の取得

ダッシュボードはDatadogの視覚化機能の中心です。特定のダッシュボードの詳細を取得する方法は次のとおりです:

curl -X GET "<https://api.datadoghq.com/api/v1/dashboard/dashboard_id>" \\\\
-H "Content-Type: application/json" \\\\
-H "DD-API-KEY: your_api_key_here" \\\\
-H "DD-APPLICATION-KEY: your_app_key_here"

プログラムで新しいダッシュボードを作成するには:

import requests
import json

api_key = "your_api_key_here"
app_key = "your_app_key_here"

dashboard_payload = {
    "title": "API生成ダッシュボード",
    "description": "Datadog APIを介して作成",
    "widgets": [
        {
            "definition": {
                "type": "timeseries",
                "requests": [
                    {
                        "q": "avg:system.cpu.user{*} by {host}",
                        "display_type": "line"
                    }
                ],
                "title": "ホストごとのCPU使用率"
            }
        }
    ],
    "layout_type": "ordered"
}

headers = {
    "Content-Type": "application/json",
    "DD-API-KEY": api_key,
    "DD-APPLICATION-KEY": app_key
}

response = requests.post("<https://api.datadoghq.com/api/v1/dashboard>",
                        headers=headers,
                        data=json.dumps(dashboard_payload))

print(f"ダッシュボードが作成されました ID: {response.json().get('id')}")

Datadog APIでのモニターの作成

モニターは、積極的なアラートに不可欠です。CPU使用率がしきい値を超えたときにアラートを発信するモニターを作成する方法は次のとおりです:

import requests
import json

api_key = "your_api_key_here"
app_key = "your_app_key_here"

monitor_payload = {
    "name": "高CPU使用アラート",
    "type": "メトリックアラート",
    "query": "avg(last_5m):avg:system.cpu.user{*} > 80",
    "message": "CPU使用率が過去5分間80%を超えています。 @slack-alerts-channel @email.address@example.com",
    "tags": ["app:web", "env:production", "team:infrastructure"],
    "priority": 3,
    "options": {
        "notify_no_data": True,
        "no_data_timeframe": 10,
        "new_host_delay": 300,
        "evaluation_delay": 60,
        "thresholds": {
            "critical": 80,
            "warning": 70
        },
        "include_tags": True,
        "notify_audit": False,
        "require_full_window": False
    }
}

headers = {
    "Content-Type": "application/json",
    "DD-API-KEY": api_key,
    "DD-APPLICATION-KEY": app_key
}

response = requests.post("<https://api.datadoghq.com/api/v1/monitor>",
                        headers=headers,
                        data=json.dumps(monitor_payload))

print(f"レスポンスステータス: {response.status_code}")
print(f"モニターが作成されました: {response.json()}")

この例では:

Datadog APIを使用してAWSと統合する

Datadogをクラウドサービスと接続することで監視能力が拡張されます。AWS統合を作成する方法は次のとおりです:

curl -X POST "<https://api.datadoghq.com/api/v1/integration/aws>" \\\\
-H "Content-Type: application/json" \\\\
-H "DD-API-KEY: your_api_key_here" \\\\
-H "DD-APPLICATION-KEY: your_app_key_here" \\\\
-d '{
  "account_id": "your_aws_account_id",
  "role_name": "DatadogAWSIntegrationRole",
  "access_key_id": "your_access_key",
  "secret_access_key": "your_secret_key",
  "filter_tags": ["env:production", "service:critical"],
  "host_tags": ["account:main", "region:us-east-1"],
  "account_specific_namespace_rules": {
    "auto_scaling": true,
    "opsworks": false,
    "elasticache": true
  },
  "excluded_regions": ["us-west-2", "ca-central-1"]
}'

この統合設定:

Datadog APIを介してログを送信する

ログは、トラブルシューティングに重要な文脈情報を提供します。ログをDatadogに直接送信する方法は次のとおりです:

import requests
import json
import datetime

api_key = "your_api_key_here"

logs_payload = [{
    "ddsource": "python",
    "ddtags": "env:production,service:payment-processor,version:1.2.3",
    "hostname": "payment-service-01",
    "message": "注文#12345の支払いトランザクションが正常に完了しました",
    "service": "payment-service",
    "status": "info",
    "timestamp": datetime.datetime.now().isoformat(),
    "attributes": {
        "transaction_id": "tx_789012345",
        "amount": 99.95,
        "currency": "USD",
        "customer_id": "cust_123456",
        "payment_method": "credit_card"
    }
}]

headers = {
    "Content-Type": "application/json",
    "DD-API-KEY": api_key
}

response = requests.post("<https://http-intake.logs.datadoghq.com/v1/input>",
                        headers=headers,
                        data=json.dumps(logs_payload))

print(f"ログ送信レスポンス: {response.status_code}")

この例では:

Datadog APIのレート制限での作業

Datadogは、プラットフォームの安定性と顧客間の公正使用を確保するためにレート制限を厳守しています。これらの制限を理解し、尊重することは、信頼できるAPI統合のために不可欠です。

Datadog APIレート制限の理解

異なるエンドポイントは、リソースの強度と典型的な使用パターンに基づいて異なるレート制限があります:

Datadog APIレート制限ヘッダーの監視

APIリクエストを行う際には、これらのレスポンスヘッダーをチェックして現在のレート制限ステータスを理解します:

Datadog API呼び出しでのレート制限処理の実装

以下は指数バックオフでレート制限を処理するための堅牢な実装の例です:

import requests
import time
import random

def make_api_request_with_backoff(url, headers, payload=None, max_retries=5):
    retries = 0
    while retries < max_retries:
        response = requests.post(url, headers=headers, json=payload) if payload else requests.get(url, headers=headers)

        if response.status_code == 429:  # リクエストが多すぎます
            # レート制限情報を抽出
            limit = response.headers.get('X-RateLimit-Limit', '不明')
            remaining = response.headers.get('X-RateLimit-Remaining', '不明')
            reset = int(response.headers.get('X-RateLimit-Reset', 60))

            print(f"レート制限に達しました: {remaining}/{limit} リクエストが残っています。 {reset} 秒後にリセットされます。")

            # ジッターを含むバックオフ時間を計算
            backoff_time = min(2 ** retries + random.uniform(0, 1), reset)
            print(f"{backoff_time:.2f} 秒間バックオフします")
            time.sleep(backoff_time)
            retries += 1
        else:
            return response

    raise Exception(f"レート制限により {max_retries} 回の再試行後に失敗しました")

Datadog APIクライアントライブラリの使用

便利さのために、Datadogは複数の言語で公式クライアントライブラリを提供しており、認証とリクエスト形式を簡素化します。

Python Datadog APIクライアント

公式のPythonクライアントは、Datadog APIに対してクリーンで慣用的なインターフェースを提供します:

pip install datadog-api-client

クライアントを使用してメトリクスを送信する例は次のとおりです:

from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v1.api.metrics_api import MetricsApi
from datadog_api_client.v1.model.metrics_payload import MetricsPayload
from datadog_api_client.v1.model.metrics_series import MetricsSeries
from datadog_api_client.v1.model.point import Point
import time

configuration = Configuration()
configuration.api_key["apiKeyAuth"] = "your_api_key_here"
configuration.api_key["appKeyAuth"] = "your_app_key_here"

with ApiClient(configuration) as api_client:
    api_instance = MetricsApi(api_client)
    body = MetricsPayload(
        series=[
            MetricsSeries(
                metric="application.request.duration",
                points=[
                    Point([int(time.time()), 250.0])
                ],
                type="gauge",
                host="web-server-01",
                tags=["endpoint:login", "environment:staging"]
            )
        ]
    )
    response = api_instance.submit_metrics(body=body)
    print(f"メトリクス送信成功: {response}")

Ruby Datadog APIクライアント

Rubyアプリケーションの場合、公式クライアントライブラリはAPIの相互作用を簡素化します:

gem install datadog_api_client -v 2.31.1

モニターを作成するための使用例:

require 'datadog_api_client'

DatadogAPIClient.configure do |config|
  config.api_key = 'your_api_key_here'
  config.application_key = 'your_app_key_here'
end

api_instance = DatadogAPIClient::V1::MonitorsAPI.new
body = {
  'name' => 'APIテストモニター',
  'type' => 'メトリックアラート',
  'query' => 'avg(last_5m):avg:system.cpu.user{*} > 75',
  'message' => 'CPU使用率が高い',
  'tags' => ['test:api', 'monitor:automated'],
  'options' => {
    'thresholds' => {
      'critical' => 75,
      'warning' => 65
    }
  }
}

begin
  result = api_instance.create_monitor(body)
  puts "モニターが正常に作成されました ID: #{result['id']}"
rescue DatadogAPIClient::APIError => e
  puts "モニターの作成中にエラーが発生しました: #{e}"
end

Datadog API使用のベストプラクティス

これらのガイドラインに従うことで、Datadog APIとのより信頼性が高く、安全かつ効率的な統合を構築できます。

Datadog APIキーのセキュリティ確保

APIキーのセキュリティは非常に重要です:

Datadog API呼び出しでのタグの効果的な使用

タグは、Datadogデータを整理およびフィルタリングするための強力なメカニズムです:

Datadog APIリクエストのエラーハンドリングの実装

堅牢なエラーハンドリングは、統合が信頼性を保つことを確保します:

def send_to_datadog(endpoint, payload, headers):
    try:
        response = requests.post(endpoint,
                                json=payload,
                                headers=headers,
                                timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.Timeout:
        print("リクエストがタイムアウトしました - Datadog APIが遅延している可能性があります")
    except requests.exceptions.HTTPError as e:
        if e.response.status_code == 400:
            print(f"不正なリクエスト: {e.response.json().get('errors', [])}")
        elif e.response.status_code == 403:
            print("認証エラー - APIおよびアプリケーションキーを確認してください")
        elif e.response.status_code == 429:
            print("レート制限に達しました - バックオフと再試行を実装してください")
        else:
            print(f"HTTPエラー: {e.response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"リクエストに失敗しました: {e}")

    return None

Datadog APIでのサンドボックス環境でのテスト

本番導入前に:

Datadog API使用の監視

API使用状況を追跡して早期に問題を検出します:

結論:Datadog APIをマスターする

Datadog APIは、監視および分析プラットフォームを拡張およびカスタマイズするための強力な機能を提供します。このガイドに概説されている認証プロセス、コア概念、ベストプラクティスを理解することで、Datadogをアプリケーションに統合し、ワークフローを自動化する準備が整います。

カスタムメトリクスを送信したり、モニターを作成したり、複雑なダッシュボードを構築したりする際に、APIはDatadogを特定のニーズに合わせてカスタマイズする柔軟性を提供します。使用が進むにつれて、次のようなより高度なパターンを実装することを検討してください:

Datadog APIによって提供されるプログラムによる機能により、インフラストラクチャに合わせてスケールし、組織のユニークな要件に適応する監視エコシステムを構築できます。

新しいエンドポイントや機能が頻繁に追加されるため、Datadogの公式APIドキュメントを定期的にチェックしてください。このガイドから得た知識を持って、Datadogの可観測プラットフォームの完全な力量を活用した洗練された自動化された監視ソリューションを構築する準備が整いました。

ボタン

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる