🤔 Introducing APISIX AI Gateway – Built for LLMs and AI workloads. Learn More

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
” ]
嵌入到生成指标中的静态标签,便于按信号对指标进行分组。详见标签定义

指标

插件默认导出以下指标。

所有指标均以元数据中配置的 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 指标,可以看到计数反映了已生成的请求数量。