使用 Datadog 监控 APISIX 指标
随着 IT 基础设施和系统复杂性的增加,持续监控已成为任何 IT 运营的重要组成部分,以提高系统可靠性并避免代价高昂的停机时间。
Datadog 是一个云监控平台,为指标、日志和追踪提供统一的解决方案。该平台提供了许多预定义的仪表板模板,并允许灵活自定义以满足复杂的数据分析和可视化需求。
本指南将引导你完成使用容器化 Datadog 代理将 Datadog 与 APISIX 集成的过程。你将在 APISIX 中启用 datadog 插件以将指标导出到代理,从而允许你在 Datadog 中监控 APISIX 指标,并使用它们创建额外的监控、警报和分析。

前置条件
- 安装 Docker。
- 安装 cURL 以向服务发送请求进行验证。
- 按照 快速入门教程 在 Docker 或 Kubernetes 中启动一个新 的 APISIX 实例。
- 创建一个 Datadog 帐户 并记下站点和 API 密钥。
启动 Datadog 代理
Datadog 代理 从受监控对象收集事件和指标并将其发送到 Datadog,你可以在其中进一步分析你的监控和性能数据。
启动 Datadog 代理:
- Docker
- Kubernetes
docker run -d \
--name dogstatsd-agent \
// Annotate 1
-e DD_API_KEY=35ebe12345678dec56218930b79fdb4cf \
// Annotate 2
-e DD_SITE="us5.datadoghq.com" \
// Annotate 3
-e DD_HOSTNAME=apisix.quickstart \
// Annotate 4
-e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \
-p 8125:8125/udp \
datadog/dogstatsd:latest
❶ DD_API_KEY: 替换为你的 API 密钥。
❷ DD_SITE: 替换为你的 Datadog 站点。
❸ DD_HOSTNAME: 替换为你的主机名。
❹ DD_DOGSTATSD_NON_LOCAL_TRAFFIC: 设置为 true 以监听来自其他容器的 DogStatsD 数据包。
为 Datadog 创建一个部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ingress-apisix
name: dogstatsd-agent
labels:
app: dogstatsd-agent
spec:
replicas: 1
selector:
matchLabels:
app: dogstatsd-agent
template:
metadata:
namespace: ingress-apisix
labels:
app: dogstatsd-agent
spec:
containers:
- name: dogstatsd-agent
image: datadog/dogstatsd:latest
env:
- name: DD_API_KEY
value: "35ebe12345678dec56218930b79fdb4cf"
- name: DD_SITE
value: "us5.datadoghq.com"
- name: DD_HOSTNAME
value: "apisix.quickstart"
- name: DD_DOGSTATSD_NON_LOCAL_TRAFFIC
value: "true"
ports:
- containerPort: 8125
protocol: UDP
restartPolicy: Always
为 Datadog 创建一个服务文件:
apiVersion: v1
kind: Service
metadata:
namespace: ingress-apisix
name: dogstatsd-agent
spec:
selector:
app: dogstatsd-agent
ports:
- protocol: UDP
port: 8125
targetPort: 8125
将配置应用到你的集群:
kubectl apply -f deployment-datadog.yaml -f service-datadog.yaml
你可以通过环境变量配置代理的主配置文件 datadog.yaml 中的大多数选项,前缀为 DD_。有关更多信息,请参阅 代理环境变量。
连接 Datadog 代理到 APISIX
默认情况下,datadog 插件期望 Datadog 代理在 127.0.0.1:8125 上可用。要更新 IP 地址和其他元数据,请按如下方式配置 datadog 插件的 插件元数据:
- Admin API
- ADC
- Ingress Controller
curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT -d '
{
// Annotate 1
"host": "192.168.0.90",
// Annotate 2
"port": 8125,
// Annotate 3
"namespace": "apisix"
}'
❶ host: 替换为你的 IP 地址。
❷ port: 如果不使用默认的 8125,请替换为你的端口。
❸ namespace: 自定义作为所有指标前缀的命名空间。
plugin_metadata:
datadog:
// Annotate 1
host: 192.168.0.90
// Annotate 2
port: 8125
// Annotate 3
namespace: ingress-apisix
❶ host: 替换为你的 IP 地址。
❷ port: 如果不使用默认的 8125,请替换为你的端口。
❸ namespace: 自定义作为所有指标前缀的命名空间。
将配置同步到 APISIX:
adc sync -f adc-plugin-metadata.yaml
- Gateway API
- APISIX CRD
更新你的 GatewayProxy 清单以包含 datadog 插件元数据配置:
apiVersion: apisix.apache.org/v1alpha1
kind: GatewayProxy
metadata:
namespace: ingress-apisix
name: apisix-config
spec:
provider:
type: ControlPlane
controlPlane:
# 你的控制面连接配置
# ....
pluginMetadata:
datadog: {
"host": "dogstatsd-agent",
"port": 8125,
"namespace": "apisix"
}
将配置应用到你的集群:
kubectl apply -f dd-plugin-metadata.yaml
监控路由指标
全局启用 datadog 并创建一个示例路由以生成指标。或者,你可以在路由上启用该插件。
- Admin API
- ADC
- Ingress Controller
将 datadog 配置为全局插件:
curl "http://127.0.0.1:9180/apisix/admin/global_rules/datadog" -X PUT -d '
{
"plugins": {
"datadog": {}
}
}'
创建一个你将收集指标的示例路由:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "dd-route",
"uri": "/anything",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'
将 datadog 配置为全局插件,并创建一个你将收集指标的示例路由:
global_rules:
datadog: {}
services:
- name: httpbin Service
routes:
- uris:
- /anything
name: dd-route
upstream:
type: roundrobin
nodes:
- host: httpbin.org
port: 80
weight: 1
将配置同步到 APISIX:
adc sync -f adc-route.yaml -f adc-plugin-metadata.yaml
- Gateway API
- APISIX CRD
更新你的 GatewayProxy 清单以将 datadog 启用为全局插件:
要在添加其他配置之前查看当前 GatewayProxy 配置,请运行:
kubectl get gatewayproxy apisix-config -o yaml
apiVersion: apisix.apache.org/v1alpha1
kind: GatewayProxy
metadata:
namespace: ingress-apisix
name: apisix-config
spec:
provider:
type: ControlPlane
controlPlane:
auth:
adminKey:
value: edd1c9f034335f136f87ad84b625c8f1
type: AdminKey
service:
name: apisix-admin
port: 9180
plugins:
- name: datadog
enabled: true
为要收集指标的示例路由创建另一个 Kubernetes 清单文件:
apiVersion: v1
kind: Service
metadata:
namespace: ingress-apisix
name: httpbin-external-domain
spec:
type: ExternalName
externalName: httpbin.org
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: ingress-apisix
name: dd-route
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /anything
backendRefs:
- name: httpbin-external-domain
port: 80
将配置应用到你的集群:
kubectl apply -f gateway-proxy.yaml -f httpbin-route.yaml
本教程无法使用 APISIX CRD 完成,因为它们尚不支持插件元数据。
在 Datadog 中,从左侧菜单中选择 Metrics 并转到 Explorer。你应该看到许多可用的 APISIX 指标:

向路由生成一些请求:
curl "http://127.0.0.1:9080/anything"
你应该收到 HTTP/1.1 200 OK 响应。
导航回 Datadog 指标资源管理器并选择 apisix.ingress.size.count 作为指标。你应该看到计数反映了生成的请求数量:

下一步
你现在已经将 Datadog 与 APISIX 集成以进行指标监控。有了这些指标,你现在可以根据系统可靠性要求创建 警报 和 控制台。有关更多信息,请参阅 Datadog 文档。