
Datadog API 소개
Datadog의 API는 플랫폼의 강력한 모니터링 및 분석 기능에 대한 프로그래밍 액세스를 제공합니다. 이 RESTful API는 개발자가 데이터를 전송하고, 시각화를 구축하며, 코드로 Datadog 계정을 관리할 수 있게 해줍니다. 커스텀 애플리케이션을 통합하든, 워크플로우를 자동화하든, Datadog의 기능을 확장하든, API 활용 방법을 이해하는 것이 플랫폼의 잠재력을 극대화하는 데 필수적입니다.
Datadog API는 표준 HTTP 응답 코드를 사용하고, 모든 요청에서 JSON을 수용하고 반환하며, 표준 HTTP 메서드를 활용하는 리소스 지향 아키텍처로 설계되었습니다. 이는 RESTful 웹 서비스에 익숙한 개발자에게 직관적입니다. API의 포괄적인 기능은 읽기 및 쓰기 작업을 모두 지원하여 모니터링 데이터의 검색뿐만 아니라 Datadog 환경의 다양한 측면을 구성할 수 있습니다.
Datadog API를 마스터하면 다음과 같은 작업을 할 수 있습니다:
- 프로그램적으로 대시보드, 모니터 및 알림 생성 및 관리
- 애플리케이션 또는 인프라 구성 요소에서 사용자 정의 메트릭 제출
- 사고 관리 워크플로우 자동화
- 지속적인 모니터링을 위한 CI/CD 파이프라인과 통합
- 모니터링 데이터를 기반으로 사용자 정의 도구 및 솔루션 구축
Datadog API 인증 시작하기
API 호출을 하기 전에 Datadog 리소스에 대한 안전한 액세스를 보장하기 위해 인증을 적절히 설정해야 합니다.
Datadog API 및 애플리케이션 키 얻기
Datadog API를 사용하려면 두 가지 유형의 키가 필요합니다:
- API 키: 이는 Datadog 계정을 식별하며 모든 API 요청에 필요합니다.
- Datadog 계정으로 이동: 조직 설정 > API 키
- "새 키"를 클릭하여 새 API 키를 생성
- 목적과 용도를 나타내는 의미 있는 이름을 지정
- 키는 안전하게 보관하여 Datadog 계정에 대한 접근 권한을 부여합니다.
- 애플리케이션 키: 많은 관리 엔드포인트에 필요하며, 추가 인증을 제공하고 접근 권한을 지정합니다.
- 조직 설정 > 애플리케이션 키로 이동
- "새 키"를 클릭하여 애플리케이션 키를 생성
- 예정된 사용에 따라 적절히 이름을 지정
- 선택적으로 특정 Datadog 애플리케이션에 대한 접근을 제한
Datadog API 인증 헤더 설정하기
API 요청을 할 때 이러한 키를 헤더에 포함해야 합니다:
- 헤더에 API 키를 포함하여
DD-API-KEY: your_api_key_here
사용 - 추가 인증이 필요한 엔드포인트에는
DD-APPLICATION-KEY: your_application_key_here
를 포함
기본 인증 요청의 예는 다음과 같습니다:
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 키 보안 관리
이러한 키가 제공하는 중요 접근 권한을 감안할 때, 보안 모범 사례를 따르는 것이 중요합니다:
- 특히 API 키의 경우 키를 정기적으로 교체
- 애플리케이션 키에 대한 적절한 권한 설정
- 애플리케이션 소스 코드에 키를 하드코딩하지 않기
- 키를 보관하기 위해 환경 변수 또는 안전한 금고 사용
- 정기적으로 API 키 사용 감사
- 사용하지 않거나 잠재적으로 손상된 키를 즉시 취소
핵심 Datadog API 개념
Datadog API의 기본 개념을 이해하면 그 방대한 기능을 보다 효과적으로 탐색할 수 있습니다.
Datadog API 엔드포인트 구조
Datadog API는 플랫폼의 기능을 반영하는 기능 영역으로 논리적으로 조직되어 있습니다:
- 메트릭 API: 메트릭 데이터를 제출하고 쿼리하는 데 사용되어 커스텀 메트릭을 전송하거나 역사적 메트릭 값을 검색할 수 있습니다. 이러한 엔드포인트는 애플리케이션 및 인프라 성능 모니터링의 중심입니다.
- 이벤트 API: Datadog 이벤트 스트림에서 이벤트를 게시하고 검색하는 데 사용됩니다. 이벤트는 배포, 알림 또는 환경에서의 중요한 발생을 나타낼 수 있습니다.
- 모니터 API: 모니터링 알림을 프로그램적으로 생성하고 관리할 수 있으며, 알림 설정 및 다운타임 일정을 구성하는 기능을 포함합니다.
- 대시보드 API: 시각화 대시보드를 구축, 수정 및 검색하는 데 사용되어 템플릿 또는 애플리케이션 필요에 따라 자동으로 대시보드를 생성할 수 있습니다.
- 로그 API: 로그를 Datadog에 직접 전송하고, 로그 처리 파이프라인을 구성하며, 로그 아카이브를 관리하기 위한 엔드포인트를 제공합니다.
- 합성 API: 합성 테스트를 관리하고 테스트 결과를 검색하며 테스트 실행을 예약하는 데 사용됩니다.
- 사용자 및 조직 API: 팀원, 권한 및 조직 설정 관리를 가능하게 합니다.
- 서비스 수준 목표(SLO) API: 서비스 신뢰성을 측정하기 위해 SLO를 생성하고 추적하는 데 사용됩니다.
첫 번째 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()}")
이 코드 조각은 다음과 같은 작업을 수행합니다:
- "custom.application.performance"이라는 이름의 사용자 정의 메트릭을 포함하는 페이로드 생성
- 현재 타임스탬프와 100의 값을 설정
- 보다 나은 조직 및 필터링을 위해 태그 추가
- Datadog의 메트릭 엔드포인트에 데이터를 전송
- API 응답 인쇄
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",
...
}
}
주요 필드는 다음과 같습니다:
status
: 요청의 성공 또는 실패를 나타냅니다errors
: 요청이 실패했을 경우 오류 메시지를 포함합니다data
: API에서 반환된 실제 리소스 데이터입니다
일반적인 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()}")
이 예제는:
- 메트릭 알림 모니터를 생성합니다
- 경고(70%) 및 임계값(80%)에 대한 임계값을 설정합니다
- Slack과 이메일에 대한 언급과 함께 알림 설정을 포함합니다
- 평가 지연 및 신규 호스트 지연과 같은 상세 구성 옵션을 추가합니다
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"]
}'
이 통합 설정은:
- 역할이나 접근 키를 사용하여 AWS 계정에 연결합니다
- 특정 리소스에 집중하기 위해 필터링을 구성합니다
- 모니터링되는 호스트에 태그를 자동으로 적용합니다
- 특정 AWS 서비스 네임스페이스를 활성화합니다
- 모니터링하고 싶지 않은 지역을 제외합니다
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 속도 제한 이해하기
서로 다른 엔드포인트는 리소스 집약성과 일반적인 사용 패턴에 따라 서로 다른 속도 제한을 가지고 있습니다:
- 읽기 작업은 일반적으로 쓰기 작업보다 더 높은 제한을 가집니다
- 일부 엔드포인트는 조직당 제한이 있는 반면, 다른 엔드포인트는 키당 제한이 있을 수 있습니다
- 여러 애플리케이션에 대해 공유되는 API 키는 더 빠르게 제한을 초과할 수 있습니다
Datadog API 속도 제한 헤더 모니터링하기
API 요청을 할 때, 현재 속도 제한 상태를 이해하기 위해 다음 응답 헤더를 확인하십시오:
X-RateLimit-Limit
: 속도 제한 창에서 허용되는 최대 요청 수X-RateLimit-Remaining
: 현재 속도 제한 창에서 남은 요청 수X-RateLimit-Reset
: 속도 제한이 재설정되는 시간(초 단위)X-RateLimit-Period
: 속도 제한 창의 길이(초 단위)
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 키의 보안은 매우 중요합니다:
- 키를 환경 변수나 안전한 금고에 보관해야하며, 코드 저장소에는 저장하지 말아야 합니다
- 키 회전 정책을 구현하고 API 키를 정기적으로 새로 고칩니다
- 서로 다른 애플리케이션이나 용도에 대해 서로 다른 API 키를 사용합니다
- 애플리케이션 키 권한을 제한하여 최소 권한 원칙을 적용합니다
- 알려진 IP 주소에 대한 접근을 제한하기 위해 IP 화이트리스트를 사용합니다
Datadog API 호출에서 태그를 효과적으로 사용하기
태그는 Datadog 데이터를 구성하고 필터링하는 강력한 메커니즘입니다:
- API 구현을 시작하기 전에 일관된 태깅 분류법을 설계합니다
- 모든 메트릭과 로그에 환경, 서비스 및 버전 태그를 포함합니다
- 계층적 태그를 사용합니다 (예:
region:us-east
,availability-zone:us-east-1a
) - 모든 텔레메트리(메트릭, 로그, 추적)에 걸쳐 태그를 일관되게 유지합니다
- 메트릭에서 고차원 태그를 피합니다 (예: 고유 사용자 ID)
Datadog API 요청을 위한 오류 처리 구현하기
강력한 오류 처리는 통합의 신뢰성을 유지합니다:
- HTTP 상태 코드를 확인하고 다양한 오류 유형을 적절히 처리합니다
- 상세한 오류 정보를 위해 오류 응답 본문을 파싱합니다
- 일시적인 오류에 대한 재시도 로직을 구현하고 지수 백오프를 적용합니다
- 디버깅을 위해 충분한 컨텍스트와 함께 실패한 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 사용 모니터링하기
문제를 조기에 감지하기 위해 API 사용량을 추적합니다:
- API 호출량 및 오류율을 시각화하기 위한 대시보드를 생성합니다
- 과도한 API 오류나 속도 제한에 접근하는 것을 모니터링합니다
- 모든 API 작업에 대해 적절한 상세정보로 로깅을 구현합니다
- Datadog의 감사 로그를 통해 API 키 사용을 정기적으로 감사합니다
- API를 통해 제출된 사용자 정의 메트릭의 비용 영향을 추적합니다
결론: Datadog API 마스터하기
Datadog API는 모니터링 및 분석 플랫폼을 확장하고 사용자 정의하는 강력한 기능을 제공합니다. 이 가이드에서 설명한 인증 프로세스, 핵심 개념 및 모범 사례를 이해함으로써, Datadog을 애플리케이션에 통합하고 워크플로우를 효과적으로 자동화할 수 있는 충분한 준비를 할 수 있습니다.
사용자 정의 메트릭을 전송하든, 모니터를 생성하든, 복잡한 대시보드를 구축하든, API는 Datadog을 특정 필요에 맞게 조정할 수 있는 유연성을 제공합니다. 사용량이 성숙함에 따라, 다음과 같은 보다 고급 패턴을 구현하는 것을 고려하십시오:
- 신규 서비스에 대한 템플릿 기반 대시보드 생성
- 자동화된 모니터 유지 관리 및 조정
- 내부 도구 및 시스템과의 사용자 정의 통합
- 예약된 보고서 및 데이터 추출 워크플로우
- 주요 비즈니스 프로세스를 위한 합성 모니터링
Datadog API가 제공하는 프로그래밍 가능성은 조직의 고유한 요구 사항에 적응하고 인프라와 함께 확장되는 모니터링 생태계를 구축할 수 있게 해줍니다.
Datadog의 공식 API 문서를 정기적으로 확인하는 것을 잊지 마세요. 새로운 엔드포인트와 기능이 자주 추가되어 플랫폼의 기능이 확장됩니다. 이 가이드를 통해 얻은 지식을 가지고, Datadog의 가시성 플랫폼의 모든 힘을 활용하여 정교하고 자동화된 모니터링 솔루션을 구축할 준비를 하십시오.