Skip to main content
Version: 3.17

datadog

描述#

datadog 插件支持与 Datadog 集成。Datadog 是云应用中最常用的可观测性服务之一。启用后,插件通过 UDP 协议将指标推送到与 Datadog agent 捆绑的 DogStatsD 服务器。

该插件支持通过 UDP 将指标以批量方式推送到外部 Datadog 代理。数据可能需要一段时间才能被接收,会在批处理器的定时器到期后自动发送。

属性#

名称类型必选项默认值有效值描述
prefer_namebooleantrue[true, false]如果为 true,在指标标签中导出路由/服务名称而非 ID。
include_pathbooleanfalse[true, false]如果为 true,在指标标签中包含路径模式。
include_methodbooleanfalse[true, false]如果为 true,在指标标签中包含 HTTP 方法。
constant_tagsarray[]附加到该路由所有指标的静态键值标签,便于按信号对指标进行分组。
batch_max_sizeinteger1000[1,...]每个批次允许的最大指标条目数。达到后立即发送至 Datadog agent。设置为 1 表示立即处理。
inactive_timeoutinteger5[1,...]等待新条目的最长时间(秒),超过则发送批次。该值应小于 buffer_duration
buffer_durationinteger60[1,...]从最早条目起允许的最长缓冲时间(秒),超过则发送批次。
retry_delayinteger1[0,...]批次发送失败后重试的时间间隔,单位为秒。
max_retry_countinteger0[0,...]丢弃条目前允许的最大重试次数。

本插件支持使用批处理器来聚合并批量处理条目(日志/数据),避免频繁提交数据。默认情况下,批处理器每 5 秒或队列中数据达到 1000 条时提交一次。详情及自定义配置请参考批处理器

插件元数据#

可通过插件元数据配置该插件。

名称类型必选项默认值描述
hoststring"127.0.0.1"DogStatsD 服务器主机地址。
portinteger8125DogStatsD 服务器端口。
namespacestring"apisix"APISIX agent 发送的所有自定义指标的前缀。有助于在指标图中定位实体,例如 apisix.request.counter
constant_tagsarray[ "source:apisix" ]嵌入到生成指标中的静态标签,便于按信号对指标进行分组。详见标签定义

指标#

插件默认导出以下指标。

所有指标均以元数据中配置的 namespace 为前缀。例如,若 namespace 设置为 apisix,则 request.counter 指标在 Datadog 中会导出为 apisix.request.counter

名称StatsD 类型描述
request.counterCounter收到的请求数量。
request.latencyHistogram处理请求所需时间,单位为毫秒。
upstream.latencyHistogram代理请求到上游服务器并收到响应所需时间,单位为毫秒。
apisix.latencyHistogramAPISIX agent 处理请求所需时间,单位为毫秒。
ingress.sizeTimer请求体大小,单位为字节。
egress.sizeTimer响应体大小,单位为字节。

标签#

插件在导出指标时附带以下标签。如果某个标签没有合适的值,该标签将被省略。

名称描述
route_name路由名称。如果不存在或 prefer_name 为 false,则回退到路由 ID。
service_name服务名称。如果不存在或 prefer_name 为 false,则回退到服务 ID。
consumer若路由关联了消费者,则为消费者的用户名。
balancer_ip处理当前请求的上游负载均衡器 IP 地址。
response_statusHTTP 响应状态码,例如 201404503
response_status_classHTTP 响应状态码类别,例如 2xx4xx5xx。APISIX 3.14.0 及以上版本支持。
scheme请求协议,例如 HTTP 和 gRPC。
pathHTTP 路径模式。仅当 include_pathtrue 时可用。APISIX 3.14.0 及以上版本支持。
methodHTTP 方法。仅当 include_methodtrue 时可用。APISIX 3.14.0 及以上版本支持。

使用示例#

以下示例演示了 datadog 插件在不同场景下的配置方式。

开始前,请确保已安装 Datadog agent,它负责收集受监控对象的事件和指标并发送到 Datadog。

使用你的 API 密钥、Datadog 站点和主机名启动 Datadog agent。将 DD_DOGSTATSD_NON_LOCAL_TRAFFIC 设为 true 以接收来自其他容器的 DogStatsD 数据包:

docker run -d \
--name dogstatsd-agent \
-e DD_API_KEY=<your-api-key> \
-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_ 前缀的环境变量配置 agent 的主配置文件 datadog.yaml 中的大多数选项。更多信息请参阅 agent 环境变量

note

你可以这样从 config.yaml 中获取 admin_key 并存入环境变量:

admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')

更新 Datadog Agent 地址及元数据#

默认情况下,插件期望 DogStatsD 服务器在 127.0.0.1:8125 可用。如需自定义地址及其他元数据,请更新插件元数据。将主机设置为你的 Datadog agent 地址,端口设置为 agent 监听端口,命名空间用于前缀所有指标,并可添加常量标签:

curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT \
-H "X-API-KEY: ${admin_key}" \
-d '{
"host": "192.168.0.90",
"port": 8125,
"namespace": "apisix",
"constant_tags": [
"source:apisix",
"service:custom"
]
}'

如需恢复默认配置,发送空 body 的请求到 datadog 插件元数据接口:

curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/datadog" -X PUT \
-H "X-API-KEY: ${admin_key}" \
-d '{}'

监控路由指标#

以下示例演示如何将特定路由的指标发送到 Datadog。

创建一个启用 datadog 插件的路由。将 batch_max_size 设为 1 以立即发送每条指标,将 max_retry_count 设为 0 以禁止失败重试:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${admin_key}" \
-d '{
"id": "datadog-route",
"uri": "/anything",
"plugins": {
"datadog": {
"batch_max_size": 1,
"max_retry_count": 0
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

向路由发送几条请求:

curl "http://127.0.0.1:9080/anything"

在 Datadog 中,从左侧菜单选择指标,进入资源管理器,选择 apisix.ingress.size.count 指标,可以看到计数反映了已生成的请求数量。