技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
datadog-api-metrics【数据与研究】Implements metrics submission to Datadog API using `datadog-api-client` with best practices for batching and tagging.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: datadog-api-metrics
description: Implements metrics submission to Datadog API using datadog-api-client with best practices for batching and tagging.
license: MIT
compatibility: opencode
metadata:
version: "1.0.0"
domain: coding
triggers:
- datadog metrics
- submit metrics
- datadog API metrics
- datadog batching
- datadog tagging
- how do I send metrics to datadog
role: implementation
scope: implementation
output-format: code
related-skills: datadog-api-logs, datadog-api-monitors
archetypes:
- monitoring
- metrics management
anti_triggers:
- metrics flooding
- unstructured metrics
response_profile:
verbosity: medium
directive_strength: high
Implements production-grade metrics submission to Datadog using datadog-api-client. Metrics are batched for efficiency and tagged for categorization. Adheres to Datadog best practices to ensure data integrity and efficient API usage.
datadog-api-client to interact with the Datadog API for metrics submission.env, service, version, and team in every metric.Initialize Configuration: Create Datadog client with environment variables for authentication (DD_API_KEY, DD_SITE). Ensure the client initializes without error.
Checkpoint: Validate the connection using a lightweight API call to list hosts.
Define Metrics Names and Tags: Establish a consistent naming convention for metrics, including a prefix representing the service or application. Define a standard tagging strategy that includes mandatory tags like env, service, and team.
Checkpoint: Each metric must be submitted with the defined set of mandatory tags.
Implement Batching Logic: Collect metrics in memory and batch-submit them to the Datadog API. Leverage asynchronous threads for sending metrics to handle high traffic efficiently. Checkpoint: Ensure metrics are submitted in batches to avoid hitting rate limits and ensure successful API calls.
Error Handling and Retrying: Implement error catching to handle API exceptions. If rate limits are reached, back off and retry after the specified delay. Checkpoint: Record failed submissions and implement logic to retry sending them after a set duration.
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.metrics_api import MetricsApi
from datadog_api_client.v2.model.metric_payload import MetricPayload
from datadog_api_client.v2.model.metric_series import MetricSeries
from datadog_api_client.v2.model.metric_point import MetricPoint
from datadog_api_client.exceptions import ApiException
import os
from datetime import datetime
import logging
logger = logging.getLogger(__name__)
class MetricSubmission:
def __init__(self):
self.configuration = Configuration(api_key={"apiKeyAuth": os.environ["DD_API_KEY"]},
server_variables={"site": os.environ.get("DD_SITE", "datadoghq.com")})
self.api_client = ApiClient(self.configuration)
self.metrics_api = MetricsApi(self.api_client)
def submit_metrics(self, metrics: list[MetricPoint], tags: list[str] = []):
metric_series = [MetricSeries(metric="app.metrics", type="gauge", points=[MetricPoint(timestamp=int(datetime.now().timestamp()), value=metric)]) for metric in metrics]
payload = MetricPayload(series=metric_series, tags=tags)
try:
self.metrics_api.submit_metrics(payload=payload)
logger.info("Metrics submitted successfully")
except ApiException as e:
logger.error("Failed to submit metrics: %s", e)
def handle_api_response(response):
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", "1"))
logger.warning(f"Rate limit exceeded; retrying after {retry_after} seconds...")
time.sleep(retry_after)
elif response.status_code == 400:
logger.error("Bad Request: Invalid metrics data");
elif response.status_code == 403:
logger.critical("Forbidden: Check your API Key or permissions");
raise PermissionError("Access Denied")
env, service, team, version) to every metric submitted.Implements log submission and forwarding to Datadog API with a focus on structured logging for enhanced observability. Configures logging to include necessary Datadog fields for correlation with metrics.
dd.trace_id, dd.span_id) during log submission.Initialize Log Configuration: Set up a logger that outputs in JSON format. Integrate the necessary Datadog fields for tracing. Checkpoint: Test log output to ensure all required fields are present.
Inject Datadog Fields: Ensure every log entry includes dd.trace_id and dd.span_id using the ddtrace library.
Checkpoint: Confirm the correlation of logs to their corresponding tracing information.
Submit Logs to Datadog: Forward the logs in batches to minimize API calls. Ensure that logs are sent with the correct tags reflecting service and environment. Checkpoint: Validate the submission and check for errors after each batch.
import logging
import json
import os
from ddtrace import patch
# Patch logging to automatically add Datadog trace IDs
patch(logging=True)
class DatadogLogger:
def __init__(self):
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s')
def log_info(self, message, tags=None):
log_entry = {"message": message, "tags": tags if tags else []}
print(json.dumps(log_entry)) # Send to your log forwarding mechanism.
def log_error(self, message, error, tags=None):
log_entry = {"message": message, "error": str(error), "tags": tags if tags else []}
print(json.dumps(log_entry)) # Send to your log forwarding mechanism.
def handle_logging_error(e):
logger.error("Logging error occurred: %s", str(e))
# Implement retry logic or fallback as necessary
Authoritative documentation links for this skill's domain. The model follows markdown links at load time to resolve external references and inline content.