datadog
datadog 插件支持与云应用程序最常用的可观测性服务之一 Datadog 集成。启用后,该插件会通过 UDP 协议将指标推送到 Datadog agent 附带的 DogStatsD 服务器。
指标
默认情况下,该插件导出以下指标。
所有指标都将以元数据中配置的 namespace 为前缀。例如,如果 namespace 配置为 apisix,你将在 Datadog 中看到 request.counter 指标导出为 apisix.request.counter。
| 名称 | 类型 | 描述 |
|---|---|---|
| request.counter | counter | 接收到的请求数量。 |
| request.latency | histogram | 处理请求所花费的时间(毫秒)。 |
| upstream.latency | histogram | 将请求代理到上游服务器直到接收到响应所花费的时间(毫秒)。 |
| apisix.latency | histogram | APISIX agent 处理请求所花费的时间(毫秒)。 |
| ingress.size | timer | 请求体大小(字节)。 |
| egress.size | timer | 响应体大小(字节)。 |
标签
该插件导出带有以下 标签 的指标。
如果没有适合特定标签的值,则该标签将被省略。
| 名称 | 描述 |
|---|---|
| route_name | 路由的名称。如果不存在或 prefer_name 属性设置为 false,则回退到路由 ID。 |
| service_name | 服务的名称。如果不存在或 prefer_name 属性设置为 false,则回退到服务 ID。 |
| consumer | 消费者的用户名(如果路由连接到消费者)。 |
| balancer_ip | 处理当前请求的上游负载均衡器的 IP 地址。 |
| response_status | HTTP 响应状态码,例如 201、404 或 503。 |
| response_status_class | HTTP 响应状态码类别,例如 2xx、4xx 或 5xx。在 APISIX 3.14.0 及更高版本和 API7 企业版 3.9.0 及更高版本中可用。 |
| scheme | 请求协议,例如 HTTP 和 gRPC。 |
| path | HTTP 路径模式。仅当参数 include_path 设置为 true 时可用。在 APISIX 3.14.0 及更高版本和 API7 企业版 3.9.0 及更高版本中可用。 |
| method | HTTP 方法。仅当属性 include_method 设置为 true 时可用。在 APISIX 3.14.0 及更高版本和 API7 企业版 3.9.0 及更高版本中可用。 |
示例
以下示例展示了如何在不同场景下配置 datadog 插件。
在继续之前,请确保你已安装 Datadog agent,它会从受监控对象收集事件和指标并将其发送到 Datadog。
在 Docker 中启动 Datadog agent:
- Docker
- Kubernetes
docker run -d \
--name dogstatsd-agent \
-e DD_API_KEY=35ebe12345678dec56218930b79fdb4cf \
-e DD_SITE="us5.datadoghq.com" \
-e DD_HOSTNAME=apisix.quickstart \
-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 DogStatsD Agent 创建 Kubernetes 清单文件:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: aic
name: dogstatsd-agent
spec:
replicas: 1
selector:
matchLabels:
app: dogstatsd-agent
template:
metadata:
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
❶ DD_API_KEY: 替换为你的 API 密钥。
❷ DD_SITE: 替换为你的 Datadog 站点。
❸ DD_HOSTNAME: 替换为你的主机名。
❹ DD_DOGSTATSD_NON_LOCAL_TRAFFIC: 设置为 true 以监听来自其他容器的 DogStatsD 数据包。
为 DogStatsD Service 创建 Kubernetes 清单文件:
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: dogstatsd-agent
spec:
selector:
app: dogstatsd-agent
ports:
- name: dogstatsd
port: 8125
targetPort: 8125
protocol: UDP
type: ClusterIP
应用清单:
kubectl apply -f dogstatsd-deployment.yaml -f dogstatsd-service.yaml
你可以通过环境变量配置 agent 主配置文件 datadog.yaml 中的大多数选项,前缀为 DD_。有关更多信息,请参阅 agent 环境变量。
更新 Datadog Agent 地址和其他元数据
默认情况下,插件期望 DogStatsD 服务器在 127.0.0.1:8125 上可用。要自定义地址和其他元数据,请更新 插件元数据,如下所示:
- Admin API
- ADC
- Ingress Controller
curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"host": "192.168.0.90",
"port": 8125,
"namespace": "apisix",
"constant_tags": [
"source:apisix",
"service:custom"
]
}'
❶ 替换为你的私有 IP 地址。如果在 Kubernetes 中运行 Datadog Agent,请使用 Service DNS 名称(例如 dogstatsd-agent.aic.svc)。
❷ 设置为 Datadog agent 监听端口。
❸ 设置所有指标的前缀命名空间。
❹ 配置常量标签。
要恢复为默认配置,请向 datadog 插件元数据发送一个空体的请求:
curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT -d '{}'
plugin_metadata:
- name: datadog
host: "192.168.0.90"
port: 8125
namespace: apisix
constant_tags:
- "source:apisix"
- "service:custom"
❶ 替换为你的私有 IP 地址。如果在 Kubernetes 中运行 Datadog Agent,请使用 Service DNS 名称(例如 dogstatsd-agent.aic.svc)。
❷ 设置为 Datadog agent 监听端口。
❸ 设置所有指标的前缀命名空间。
❹ 配置常量标签。
将配置同步到网关:
adc sync -f adc.yaml
apiVersion: apisix.apache.org/v1alpha1
kind: GatewayProxy
metadata:
namespace: aic
name: apisix-config
spec:
provider:
type: ControlPlane
controlPlane:
service:
name: apisix-admin
port: 9180
auth:
type: AdminKey
adminKey:
value: edd1c9f034335f136f87ad84b625c8f1
pluginMetadata:
datadog:
host: "dogstatsd-agent.aic.svc"
port: 8125
namespace: apisix
constant_tags:
- "source:apisix"
- "service:custom"
❶ 设置为 Kubernetes 中 Datadog DogStatsD Agent 的 Service DNS 名称。
❷ 设置为 Datadog agent 监听端口。
❸ 设置所有指标的前缀命名空间。
❹ 配置常量标签。
应用配置:
kubectl apply -f datadog-metadata.yaml
监控路由指标
以下示例展示了如何将特定路由的指标发送到 Datadog。
创建一个带有 datadog 插件和一些可选配置项的路由:
- Admin API
- ADC
- Ingress Controller
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "datadog-route",
"uri": "/anything",
"plugins": {
"datadog": {
"batch_max_size" : 1,
"max_retry_count": 0
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'
services:
- name: httpbin
routes:
- uris:
- /anything
name: datadog-route
plugins:
datadog:
batch_max_size: 1
max_retry_count: 0
upstream:
type: roundrobin
nodes:
- host: httpbin.org
port: 80
weight: 1
将配置同步到网关:
adc sync -f adc.yaml
- Gateway API
- APISIX CRD
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: httpbin-external-domain
spec:
type: ExternalName
externalName: httpbin.org
---
apiVersion: apisix.apache.org/v1alpha1
kind: PluginConfig
metadata:
namespace: aic
name: datadog-plugin-config
spec:
plugins:
- name: datadog
config:
batch_max_size: 1
max_retry_count: 0
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: datadog-route
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /anything
filters:
- type: ExtensionRef
extensionRef:
group: apisix.apache.org
kind: PluginConfig
name: datadog-plugin-config
backendRefs:
- name: httpbin-external-domain
port: 80
apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
namespace: aic
name: httpbin-external-domain
spec:
ingressClassName: apisix
externalNodes:
- type: Domain
name: httpbin.org
---
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: datadog-route
spec:
ingressClassName: apisix
http:
- name: datadog-route
match:
paths:
- /anything
methods:
- GET
upstreams:
- name: httpbin-external-domain
plugins:
- name: datadog
config:
batch_max_size: 1
max_retry_count: 0
应用配置:
kubectl apply -f datadog-ic.yaml
❶ batch_max_size: 设置为 1 以立即发送指标。
❷ max_retry_count: 设置为 0 以在指标发送失败时不重试。
向之前创建的路由发送一些请求:
curl "http://127.0.0.1:9080/anything"
在 Datadog 中,从左侧菜单选择 Metrics 并进入 Explorer。选择 apisix.ingress.size.count 作为指标。你应该看到反映生成的请求数量的计数:
