Skip to main content

Version: 3.10.x

a7-plugin-datadog

Overview

The datadog plugin in API7 Enterprise Edition (API7 EE) pushes per-request metrics to a Datadog Agent via the DogStatsD protocol (UDP). It reports request counts, latency, bandwidth, and upstream timing with automatic tags for route, service, consumer, status code, and more.

When to Use

  • Monitor API7 EE with Datadog APM and dashboards.
  • Track request rates, latency, and error rates per route.
  • Add custom tags for business-level metrics.
  • Integrate with existing Datadog infrastructure.

Plugin Configuration Reference (Route/Service)

FieldTypeRequiredDefaultDescription
prefer_namebooleanNotrueUse route/service name instead of ID in tags
include_pathbooleanNofalseInclude HTTP path pattern in tags
include_methodbooleanNofalseInclude HTTP method in tags
constant_tagsarrayNo[]Static tags for this route (e.g. ["env:prod"])
batch_max_sizeintegerNo1000Max entries per batch
inactive_timeoutintegerNo5Seconds before flushing batch
buffer_durationintegerNo60Max age of oldest entry
max_retry_countintegerNo0Retry attempts

Plugin Metadata (Global Configuration)

Set the DogStatsD server address for all routes in a gateway group:

# Get current token and server from context
TOKEN=$(a7 context current -o json | jq -r .token)
SERVER=$(a7 context current -o json | jq -r .server)
GROUP="default"

curl "${SERVER}/apisix/admin/plugin_metadata/datadog?gateway_group=${GROUP}" \
-X PUT \
-H "X-API-TOKEN: ${TOKEN}" \
-d '{
"host": "127.0.0.1",
"port": 8125,
"namespace": "api7ee",
"constant_tags": ["source:api7-ee"]
}'
FieldTypeDefaultDescription
hoststring"127.0.0.1"DogStatsD server host
portinteger8125DogStatsD server port
namespacestring"api7ee"Metric name prefix
constant_tagsarray["source:api7-ee"]Global tags for all metrics

Metrics Emitted

MetricTypeDescription
{namespace}.request.countercounterRequest count
{namespace}.request.latencyhistogramTotal request latency (ms)
{namespace}.upstream.latencyhistogramUpstream response time (ms)
{namespace}.apisix.latencyhistogramAPI7 EE processing time (ms)
{namespace}.ingress.sizetimerRequest body size (bytes)
{namespace}.egress.sizetimerResponse body size (bytes)

Default namespace is api7ee, so metrics appear as api7ee.request.counter.

Automatic Tags

TagAlways PresentDescription
route_nameYesRoute ID or name
service_nameIf route has serviceService ID or name
consumerIf authenticatedConsumer username
balancer_ipYesUpstream IP that handled the request
response_statusYesHTTP status code (e.g. 200)
response_status_classYesStatus class (e.g. 2xx, 5xx)
schemeYeshttp, https, grpc, grpcs
pathIf include_path: trueHTTP path pattern
methodIf include_method: trueHTTP method

Step-by-Step: Send Metrics to Datadog

1. Configure plugin metadata (DogStatsD address)

a7 plugin-metadata create datadog --gateway-group default -f - <<'EOF'
{
"host": "127.0.0.1",
"port": 8125,
"namespace": "api7ee",
"constant_tags": ["source:api7-ee", "env:production"]
}
EOF

2. Enable on a route

a7 route create --gateway-group default -f - <<'EOF'
{
"id": "monitored-api",
"name": "api-v1",
"uri": "/api/v1/*",
"plugins": {
"datadog": {
"prefer_name": true,
"include_path": true,
"include_method": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": [{"host": "backend", "port": 8080, "weight": 1}]
}
}
EOF

3. Verify in Datadog

Open Datadog → Metrics Explorer → search for api7ee.request.counter.

Common Patterns

Custom constant tags per route

{
"plugins": {
"datadog": {
"prefer_name": true,
"constant_tags": [
"team:platform",
"api_version:v2",
"tier:premium"
]
}
}
}

Remote Datadog Agent

a7 plugin-metadata update datadog --gateway-group default -f - <<'EOF'
{
"host": "datadog-agent.internal",
"port": 8125,
"namespace": "mycompany",
"constant_tags": ["source:api7-ee", "datacenter:us-east-1"]
}
EOF

Datadog Dashboard Queries

# Request rate by route
sum:api7ee.request.counter{*} by {route_name}.as_count()

# P95 latency
percentile:api7ee.request.latency{*} by {route_name}, p:95

# Error rate
sum:api7ee.request.counter{response_status_class:5xx}.as_count()

# Upstream health by IP
avg:api7ee.upstream.latency{*} by {balancer_ip}

Config Sync Example

version: "1"
gateway_group: default
routes:
- id: monitored-api
name: api-v1
uri: /api/v1/*
plugins:
datadog:
prefer_name: true
include_path: true
include_method: true
constant_tags:
- "team:platform"
upstream:
type: roundrobin
nodes:
- host: backend
port: 8080
weight: 1

Troubleshooting

SymptomCauseFix
No metrics in DatadogAgent not receiving UDPCheck host/port in plugin metadata; verify Agent config
Missing consumer tagNo authentication on routeTag only appears for authenticated requests
Wrong metric namespaceDefault api7eeChange namespace in plugin metadata
Tags rejected by DatadogInvalid tag formatTags must start with a letter, not end with :
Metrics delayedLarge inactive_timeoutLower batch settings for faster delivery

This page is generated from a7-plugin-datadog/SKILL.md in the api7/a7 repository. Browse all skills on the AI Agent Skills page.

API7.ai Logo

The digital world is connected by APIs,
API7.ai exists to make APIs more efficient, reliable, and secure.

Sign up for API7 newsletter

Product

API7 Gateway

SOC2 Type IIISO 27001HIPAAGDPRRed Herring

Copyright © APISEVEN PTE. LTD 2019 – 2026. Apache, Apache APISIX, APISIX, and associated open source project names are trademarks of the Apache Software Foundation