Skip to content

Datadog

Datadog is a cloud-based monitoring and analytics platform. SerOps integrates with Datadog as a dual provider supporting both log retrieval and metric queries in a single integration, using the Datadog API with API key and application key authentication.

Type Logs + Metrics
Auth API Key + App Key
Query Language Datadog query syntax

Prerequisites

  • A Datadog account with API access
  • A valid API key and application key with appropriate permissions
  • Network access from the SerOps backend to the Datadog API endpoint

Configuration

{
  "provider": "datadog",
  "display_name": "Datadog Production",
  "capabilities": ["logs", "metrics"],
  "host": "https://api.datadoghq.com",
  "extra_config": {
    "site": "datadoghq.com",
    "api_key": "your-api-key",
    "app_key": "your-app-key"
  }
}

EU Datadog

For EU regions, use "site": "datadoghq.eu" and "host": "https://api.datadoghq.eu".

Authentication Options

Datadog uses API key and application key authentication. Both keys must be provided in extra_config:

  • API Key (api_key): Authenticates requests to the Datadog API.
  • App Key (app_key): Grants access to specific Datadog resources and scopes.

No basic auth (username/password) is used for Datadog.

Extra Configuration

Field Type Description
site string Datadog site identifier (e.g., datadoghq.com, datadoghq.eu). When site is provided, the host field is ignored and the API URL is derived from the site value.
api_key string Datadog API key
app_key string Datadog application key

Metric Mapping

SerOps automatically maps Prometheus-style metric names to Datadog metrics:

SerOps Metric Datadog Metric
node_memory_MemTotal_bytes system.mem.total
node_memory_MemFree_bytes system.mem.free
node_memory_MemAvailable_bytes system.mem.usable
node_cpu_seconds_total system.cpu.user

Unmapped Metrics

Metrics that do not appear in the mapping table above are passed through to Datadog using their original name.

Kubernetes setup

Not yet validated against a live Datadog account

The Datadog adapter, including this mode, is implemented and unit-tested, but has not yet run against a live account or an in-cluster Datadog Agent. See Tested environments.

Set the integration's topology_mode to kubernetes to switch SerOps from system.* metrics (host-level) to kubernetes.* metrics aggregated per service:

Query VM mode Kubernetes mode
CPU avg:system.cpu.user{...} avg:kubernetes.cpu.usage.total{...} by {service_name}
Memory total avg:system.mem.total{...} avg:kubernetes.memory.limits{...} by {service_name}
Memory usage avg:system.mem.free{...} (inverse) avg:kubernetes.memory.usage{...} by {service_name}

Prerequisites: run the Datadog Agent as a DaemonSet on your cluster with the Kubernetes integration enabled (default). Add SerOps' canonical tags via DD_TAGS on the agent:

# helm values.yaml for datadog/datadog chart
datadog:
  apiKey: <YOUR-DD-API-KEY>
  clusterName: prod-eks
  tags:
    - "organisation_name:<YOUR-ORG>"
    - "project_name:<YOUR-PROJECT>"
    - "environment:production"
  # Unified Service Tagging (USM) — DD's own convention. SerOps aliases
  # `service` → `service_name` at query time, so setting `service` here
  # via env vars or pod annotations works automatically.
  env: production
  # cluster-wide default; per-pod annotations override.
kubelet:
  tlsVerify: false     # only for kubeadm/minikube self-signed CAs

For per-pod service tagging (recommended), add DD's admission-controller annotations to your deployments:

metadata:
  annotations:
    admission.datadoghq.com/service: "checkout"   # → aliased to service_name
    admission.datadoghq.com/env: "production"     # → aliased to environment
    admission.datadoghq.com/version: "v2.3.1"

SerOps' log-side aliases (service → service_name, env → environment) mean you don't have to add SerOps-specific tags — the standard USM tags work.

APM tip: if your DD agents send traces, the same tagging flows through, so SerOps can correlate them with logs and metrics. See Distributed Traces.

Health Check

POST /api/integrations/observability/{id}/health-check/

Response:

{
  "integrations": [
    {
      "provider": "DatadogLogProvider",
      "provider_type": "log",
      "healthy": true,
      "message": "OK"
    },
    {
      "provider": "DatadogMetricProvider",
      "provider_type": "metric",
      "healthy": true,
      "message": "OK"
    }
  ]
}

Troubleshooting

Issue Solution
"Connection refused" Verify host URL is reachable from SerOps backend
"403 Forbidden" Verify api_key and app_key are valid and have the required permissions
"No data returned" Verify the time range has data; check that capabilities includes the expected type