Cách Sử Dụng API Datadog

中村 拓也

中村 拓也

2 tháng 4 2025

Cách Sử Dụng API Datadog
💡
Khi làm việc với API của Datadog hoặc bất kỳ API nào khác, việc có một nền tảng phát triển và thử nghiệm API mạnh mẽ là cực kỳ quan trọng. Apidog nổi bật như một lựa chọn thay thế tuyệt vời cho Postman, cung cấp một bộ công cụ toàn diện cho phát triển API.
nút

Giới thiệu về API của Datadog

API của Datadog cung cấp quyền truy cập lập trình vào khả năng giám sát và phân tích mạnh mẽ của nền tảng. API RESTful này cho phép các nhà phát triển gửi dữ liệu, xây dựng hình ảnh hóa và quản lý tài khoản Datadog của họ thông qua mã. Dù bạn đang tích hợp các ứng dụng tùy chỉnh, tự động hóa quy trình làm việc hay mở rộng chức năng của Datadog, thì việc hiểu cách tận dụng API là điều cần thiết để tối đa hóa tiềm năng của nền tảng.

API của Datadog được thiết kế với kiến trúc định hướng tài nguyên, sử dụng mã phản hồi HTTP chuẩn, chấp nhận và trả về JSON trong mọi yêu cầu và sử dụng các phương thức HTTP chuẩn. Điều này làm cho nó trực quan cho các nhà phát triển quen thuộc với các dịch vụ web RESTful. Chức năng toàn diện của API cho phép cả các thao tác đọc và ghi, cho phép bạn không chỉ lấy dữ liệu giám sát mà còn cấu hình nhiều khía cạnh khác nhau của môi trường Datadog của bạn.

Bằng cách nắm vững API của Datadog, bạn sẽ có thể:

Bắt đầu với xác thực API của Datadog

Trước khi thực hiện bất kỳ cuộc gọi API nào, bạn cần thiết lập xác thực một cách chính xác để đảm bảo truy cập an toàn vào các tài nguyên Datadog của bạn.

Lấy API và các khóa ứng dụng của Datadog

Để bắt đầu sử dụng API của Datadog, bạn sẽ cần hai loại khóa:

  1. Khóa API: Đây là điều cần thiết để xác định tài khoản Datadog của bạn và là yêu cầu cho tất cả các yêu cầu API.
  1. Khóa ứng dụng: Cần thiết cho nhiều điểm cuối quản lý, khóa này cung cấp xác thực bổ sung và chỉ định quyền truy cập.

Thiết lập tiêu đề xác thực API của Datadog

Khi thực hiện các yêu cầu API, bạn cần thêm các khóa này vào tiêu đề:

Dưới đây là một ví dụ về một yêu cầu xác thực cơ bản:

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"

Quản lý bảo mật khóa API của Datadog

Với quyền truy cập đáng kể mà những khóa này cung cấp, việc tuân theo các thực hành bảo mật tốt nhất là rất quan trọng:

Các khái niệm chính của API Datadog

Hiểu các khái niệm cơ bản của API Datadog sẽ giúp bạn điều hướng hiệu quả hơn khả năng rộng lớn của nó.

Cấu trúc các điểm cuối API của Datadog

API của Datadog được tổ chức một cách hợp lý thành các lĩnh vực chức năng phản ánh các khả năng của nền tảng:

Thực hiện cuộc gọi API Datadog đầu tiên của bạn

Chúng ta sẽ bắt đầu với một trường hợp sử dụng phổ biến: gửi một chỉ số tùy chỉnh. Ví dụ này minh họa cách gửi một chỉ số gauge đơn giản với các thẻ:

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"Mã trạng thái phản hồi: {response.status_code}")
print(f"Nội dung phản hồi: {response.json()}")

Đoạn mã này:

Hiểu định dạng phản hồi API của Datadog

Các phản hồi của API Datadog thường tuân theo định dạng JSON nhất quán:

{
  "status": "ok",
  "errors": [],
  "data": {
    "id": "abc-123-xyz",
    "name": "Tài nguyên ví dụ",
    "created_at": "2023-06-01T12:00:00.000Z",
    "modified_at": "2023-06-02T15:30:00.000Z",
    ...
  }
}

Các trường khóa bao gồm:

Các trường hợp sử dụng và ví dụ phổ biến của API Datadog

Hãy khám phá các ứng dụng thực tiễn của API Datadog thông qua các ví dụ chi tiết bao phủ các chức năng chính.

Lấy thông tin bảng điều khiển API của Datadog

Các bảng điều khiển là trung tâm của khả năng hình ảnh hóa của Datadog. Đây là cách để lấy chi tiết về một bảng điều khiển cụ thể:

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"

Để tạo một bảng điều khiển mới theo cách lập trình:

import requests
import json

api_key = "your_api_key_here"
app_key = "your_app_key_here"

dashboard_payload = {
    "title": "Bảng điều khiển do API tạo",
    "description": "Được tạo thông qua API của Datadog",
    "widgets": [
        {
            "definition": {
                "type": "timeseries",
                "requests": [
                    {
                        "q": "avg:system.cpu.user{*} by {host}",
                        "display_type": "line"
                    }
                ],
                "title": "Sử dụng CPU theo máy chủ"
            }
        }
    ],
    "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"Bảng điều khiển đã được tạo với ID: {response.json().get('id')}")

Tạo một theo dõi với API của Datadog

Các theo dõi là rất quan trọng cho việc cảnh báo proacive. Đây là cách để tạo một theo dõi cảnh báo khi việc sử dụng CPU vượt quá một ngưỡng:

import requests
import json

api_key = "your_api_key_here"
app_key = "your_app_key_here"

monitor_payload = {
    "name": "Cảnh báo sử dụng CPU cao",
    "type": "metric alert",
    "query": "avg(last_5m):avg:system.cpu.user{*} > 80",
    "message": "Việc sử dụng CPU cao hơn 80% trong 5 phút qua. @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"Mã trạng thái phản hồi: {response.status_code}")
print(f"Theo dõi đã được tạo: {response.json()}")

Ví dụ này:

Tích hợp với AWS bằng cách sử dụng API Datadog

Kết nối Datadog với các dịch vụ đám mây mở rộng khả năng giám sát của nó. Đây là cách để tạo một tích hợp 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"]
}'

Cài đặt tích hợp này:

Gửi nhật ký qua API của Datadog

Các nhật ký cung cấp thông tin ngữ cảnh quan trọng cho việc khắc phục sự cố. Đây là cách gửi nhật ký trực tiếp đến 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": "Giao dịch thanh toán đã hoàn thành thành công cho đơn hàng #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"Phản hồi gửi nhật ký: {response.status_code}")

Ví dụ này:

Làm việc với giới hạn tần suất API của Datadog

Datadog áp đặt các giới hạn tần suất để đảm bảo độ ổn định của nền tảng và sử dụng công bằng giữa các khách hàng. Hiểu và tôn trọng các giới hạn này là điều cần thiết cho việc tích hợp API đáng tin cậy.

Hiểu biết về giới hạn tần suất API của Datadog

Các điểm cuối khác nhau có các giới hạn tần suất khác nhau dựa trên cường độ tài nguyên và các mẫu sử dụng điển hình:

Theo dõi các tiêu đề giới hạn tần suất API của Datadog

Khi thực hiện các yêu cầu API, hãy kiểm tra các tiêu đề phản hồi này để hiểu tình trạng giới hạn tần suất hiện tại của bạn:

Thực hiện xử lý giới hạn tần suất trong các cuộc gọi API của Datadog

Dưới đây là một cách triển khai vững mạnh để xử lý giới hạn tần suất với việc chờ hồi quy:

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:  # Quá nhiều yêu cầu
            # Trích xuất thông tin giới hạn tần suất
            limit = response.headers.get('X-RateLimit-Limit', 'Chưa rõ')
            remaining = response.headers.get('X-RateLimit-Remaining', 'Chưa rõ')
            reset = int(response.headers.get('X-RateLimit-Reset', 60))

            print(f"Giới hạn tần suất đã được chạm: {remaining}/{limit} yêu cầu còn lại. Đặt lại trong {reset} giây.")

            # Tính toán thời gian chờ với jitter
            backoff_time = min(2 ** retries + random.uniform(0, 1), reset)
            print(f"Đang chờ {backoff_time:.2f} giây")
            time.sleep(backoff_time)
            retries += 1
        else:
            return response

    raise Exception(f"Thất bại sau {max_retries} lần thử do giới hạn tần suất")

Sử dụng các thư viện khách hàng API Datadog

Để thuận tiện, Datadog cung cấp các thư viện khách hàng chính thức bằng nhiều ngôn ngữ, đơn giản hóa quá trình xác thực và định dạng yêu cầu.

Khách hàng API Datadog Python

Khách hàng chính thức Python cung cấp một giao diện sạch sẽ, theo phong cách idiomatic cho API Datadog:

pip install datadog-api-client

Dưới đây là một ví dụ về việc gửi các chỉ số bằng cách sử dụng khách hàng:

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"Gửi chỉ số thành công: {response}")

Khách hàng API Datadog Ruby

Đối với các ứng dụng Ruby, thư viện khách hàng chính thức đơn giản hóa các tương tác API:

gem install datadog_api_client -v 2.31.1

Ví dụ sử dụng để tạo một theo dõi:

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' => 'Theo dõi thử nghiệm API',
  'type' => 'metric alert',
  'query' => 'avg(last_5m):avg:system.cpu.user{*} > 75',
  'message' => 'Sử dụng CPU cao',
  'tags' => ['test:api', 'monitor:automated'],
  'options' => {
    'thresholds' => {
      'critical' => 75,
      'warning' => 65
    }
  }
}

begin
  result = api_instance.create_monitor(body)
  puts "Theo dõi đã được tạo thành công với ID: #{result['id']}"
rescue DatadogAPIClient::APIError => e
  puts "Lỗi khi tạo theo dõi: #{e}"
end

Các phương pháp tốt nhất cho việc sử dụng API Datadog

Tuân thủ các hướng dẫn này sẽ giúp bạn xây dựng các tích hợp với API Datadog trở nên đáng tin cậy, an toàn và hiệu quả hơn.

Bảo mật các khóa API của bạn

Bảo mật các khóa API của bạn là rất quan trọng:

Sử dụng thẻ một cách hiệu quả trong các cuộc gọi API của Datadog

Các thẻ là một cơ chế mạnh mẽ để tổ chức và lọc dữ liệu Datadog của bạn:

Triển khai xử lý lỗi cho các yêu cầu API của Datadog

Xử lý lỗi vững chắc đảm bảo tính đáng tin cậy cho các tích hợp của bạn:

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("Yêu cầu đã hết thời gian - API Datadog có thể đang gặp trục trặc")
    except requests.exceptions.HTTPError as e:
        if e.response.status_code == 400:
            print(f"Yêu cầu không hợp lệ: {e.response.json().get('errors', [])}")
        elif e.response.status_code == 403:
            print("Lỗi xác thực - kiểm tra các khóa API và ứng dụng của bạn")
        elif e.response.status_code == 429:
            print("Giới hạn tần suất đã đạt - thực hiện hồi quy và thử lại")
        else:
            print(f"Lỗi HTTP: {e.response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"Yêu cầu thất bại: {e}")

    return None

Kiểm tra trong môi trường sandbox với API Datadog

Trước khi triển khai trong sản xuất:

Theo dõi việc sử dụng API Datadog

Theo dõi việc sử dụng API của bạn để phát hiện sớm các vấn đề:

Kết luận: Nắm vững API của Datadog

API của Datadog cung cấp khả năng mạnh mẽ để mở rộng và tùy chỉnh nền tảng giám sát và phân tích của bạn. Bằng cách hiểu quy trình xác thực, các khái niệm cốt lõi và các phương pháp tốt nhất được nêu trong hướng dẫn này, bạn sẽ được trang bị đầy đủ để tích hợp Datadog vào các ứng dụng của bạn và tự động hóa các quy trình làm việc một cách hiệu quả.

Dù bạn đang gửi các chỉ số tùy chỉnh, tạo các theo dõi hay xây dựng các bảng điều khiển phức tạp, API cung cấp sự linh hoạt để điều chỉnh Datadog theo nhu cầu cụ thể của bạn. Khi việc sử dụng của bạn trưởng thành, hãy xem xét việc triển khai các mẫu tiên tiến hơn như:

Các khả năng lập trình do API của Datadog cung cấp cho phép bạn xây dựng một hệ sinh thái giám sát có thể mở rộng cùng với cơ sở hạ tầng của bạn và thích ứng với các yêu cầu độc đáo của tổ chức bạn.

Nhớ kiểm tra tài liệu API chính thức của Datadog thường xuyên, vì các điểm cuối và tính năng mới thường xuyên được thêm vào để mở rộng khả năng của nền tảng. Với kiến thức thu được từ hướng dẫn này, bạn đã sẵn sàng xây dựng các giải pháp giám sát tự động hóa tinh vi tận dụng đầy đủ sức mạnh của nền tảng quan sát của Datadog.

nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API