跳到主要内容

datadog

Datadog 是一个用于监控应用程序和基础设施的可观测性平台。datadog 插件通过 UDP 将网关请求指标发送到 DogStatsD;DogStatsD 是 Datadog Agent 随附的指标聚合服务。Agent 聚合这些指标后将其转发到 Datadog,以供查询、仪表板和告警使用。

指标​

该插件会导出以下指标。每个指标名称都会以插件元数据中配置的命名空间为前缀。使用默认命名空间 apisix 时,request.counter 会导出为 apisix.request.counter。

名称类型描述
request.counterCounter接收的请求数。
request.latencyHistogram请求总延迟,单位为毫秒。
upstream.latencyHistogram从建立上游连接到收到上游响应的耗时,单位为毫秒。没有可用的上游延迟时,不会上报此指标。
apisix.latencyHistogram网关处理请求所用的时间,单位为毫秒。
ingress.sizeTimer请求大小,单位为字节。
egress.sizeTimer响应大小,单位为字节。

标签​

当以下标签的值可用时,插件会将其附加到指标:

名称描述
route_name当 prefer_name 为 true 且已配置名称时,使用路由名称;否则使用路由 ID。
service_name当 prefer_name 为 true 且已配置名称时,使用服务名称;否则使用服务 ID。
consumerConsumer 用户名。
balancer_ip处理请求的上游节点地址。
response_statusHTTP 响应状态码,例如 200、404 或 503。
response_status_classHTTP 响应状态类别,例如 2xx、4xx 或 5xx。该标签从 API7 企业版 3.9.0 和 3.10.0 以及 APISIX 3.14.0 开始提供。
scheme上游协议,例如 http、https 或 grpc。
path当 include_path 为 true 时,为匹配的路由路径。
method当 include_method 为 true 时,为 HTTP 方法。

示例​

以下示例会部署固定版本的 DogStatsD Agent,配置网关以访问该 Agent,并在 Datadog 中验证网关指标。Docker 设置使用专用网络,以便网关可以通过容器名称向 Agent 发送 UDP 指标。

创建或选择一个 Datadog API 密钥,并确定组织使用的 Datadog 站点。将它们设置为环境变量,不要将密钥添加到配置文件或源代码管理中:

export DD_API_KEY=replace-with-datadog-api-key
export DD_SITE=datadoghq.com

以下 Agent 部署仅用于评估。生产部署请遵循 Datadog Agent 容器指南以及组织的密钥管理要求。

将 GATEWAY_CONTAINER 设置为正在运行的 APISIX 或 API7 网关容器。创建专用网络并将网关连接到该网络:

export GATEWAY_CONTAINER=replace-with-gateway-container-name

docker network create gateway-datadog-net
docker network connect gateway-datadog-net "$GATEWAY_CONTAINER"

在同一网络中启动独立的 DogStatsD Agent:

docker run -d \
--name dogstatsd-agent \
--network gateway-datadog-net \
-e DD_API_KEY \
-e DD_SITE \
-e DD_HOSTNAME=apisix-docs-datadog \
-e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \
registry.datadoghq.com/dogstatsd:7.83.1

等待 Agent 健康检查通过:

until [ "$(docker inspect -f '{{.State.Health.Status}}' dogstatsd-agent)" = "healthy" ]; do
sleep 2
done

配置 DogStatsD 目标​

插件元数据定义了所有启用该插件的路由共享的 DogStatsD 端点、指标命名空间和标签。为所选环境配置元数据:

curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"host": "dogstatsd-agent",
"port": 8125,
"namespace": "apisix_docs",
"constant_tags": [
"source:apisix",
"docs_example:datadog"
]
}'

该端点必须能从网关访问。命名空间会作为每个指标的前缀,固定标签则便于在 Datadog 中识别示例指标。

监控路由指标​

创建一个将请求指标发送到 DogStatsD 的路由。该示例包含匹配的路径、HTTP 方法和路由专用标签,并会立即将每个指标条目发送到 Agent 以便验证。

curl "http://127.0.0.1:9180/apisix/admin/routes/datadog-route" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "datadog-docs",
"uri": "/anything/datadog",
"plugins": {
"datadog": {
"batch_max_size": 1,
"include_path": true,
"include_method": true,
"constant_tags": [
"scenario:plugin-hub"
]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

发送多个请求以生成指标:

for request_number in $(seq 1 5); do
curl -fsS "http://127.0.0.1:9080/anything/datadog?request=${request_number}" > /dev/null
done

DogStatsD 会在较短的时间间隔内聚合指标,然后将其转发。在 Datadog 中打开 Metrics → Explorer,选择 apisix_docs.request.counter,并按 docs_example:datadog 筛选。对于新组织,该指标可能需要几分钟才会显示。

Datadog Metrics Explorer 显示 datadog 插件发出的 APISIX 请求计数器