Datadog API 사용 방법

Young-jae

Young-jae

2 April 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를 사용하려면 두 가지 유형의 키가 필요합니다:

  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}")
print(f"응답 본문: {response.json()}")

이 코드 조각은 다음과 같은 작업을 수행합니다:

Datadog API 응답 형식 이해하기

Datadog API 응답은 일반적으로 일관된 JSON 형식을 따릅니다:

{
  "status": "ok",
  "errors": [],
  "data": {
    "id": "abc-123-xyz",
    "name": "예제 리소스",
    "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"

신규 대시보드를 프로그램matically 생성하려면:

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": "metric alert",
    "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' => 'metric alert',
  '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를 더 쉽게 구축하고 사용하는 방법을 발견하세요