IT资讯 APISIX-Datadog 插件发布,助力用户提高系统的可观测性

raymond · 2021-11-30 12:00:12 · 热度: 3

随着应用开发的复杂度增加,监控成为了应用的一个重要组成部分。及时、准确的监控既能满足快速迭代的周期性需求,又能够确保应用的稳定性和流畅性。如何选择一个适合的监控,以提升应用的可观测性,成为了每个开发者都必须面临的一道难题。

Apache APISIX 将监控和可观测性从应用中解耦了出来,给开发人员带来了一个优势:在构建应用的时候,只需要关注业务逻辑,而 Apache APISIX 可以和开发人员选定的监控平台对接,处理可观测性的问题。

Apache APISIX 最近发布了一个新的插件:APISIX-Datadog,以提供与 Datadog 监控平台的集成。这篇文章介绍了 APISIX-Datadog 插件的实现原理及功能。

APISIX-Datadog plugin 工作原理

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

APISIX-Datadog 插件将其自定义指标推送到 DogStatsD server。而 DogStatsD server 通过 UDP 连接与 Datadog agent 捆绑在一起。DogStatsD 是 StatsD 协议的一个实现。它为 Apache APISIX agent 收集自定义指标,将其聚合成一个数据点,并将其发送到配置的 Datadog server。要了解更多关于 DogStatsD 的信息,请访问 DogStatsD 文档1

当你启用 APISIX-Datadog 插件时,Apache APISIX agent 会在每个请求响应周期向 DogStatsD server 输出以下指标:

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

这些指标将被发送到 DogStatsD agent,并带有以下标签。如果任何特定的标签没有合适的值,该标签将被直接省略。

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

APISIX-Datadog 插件维护了一个带有 timer 的 buffer。当 timer 失效时,APISIX-Datadog 插件会将 buffer 的指标作为一个批量处理程序传送给本地运行的 DogStatsD server。这种方法通过重复使用相同的 UDP 套接字,对资源的占用较少,而且由于可以配置 timer,所以不会一直让网络过载。

启动 Datadog Agent

  1. 如果你已经在使用 Datadog,你必须在系统中安装一个 Datadog agent。它可以是一个 docker 容器,一个 pod 或二进制的包管理器。你只需要确保 Apache APISIX agent 可以到达 Datadog agent 的 8125 端口。

如果需要了解更多关于如何安装一个完整的 Datadog agent,请访问这里2

  1. 如果你从没使用过 Datadog
  • 首先访问 www.datadoghq.com,创建一个账户。
  • 然后按照下面演示的步骤生成一个 API 密钥。

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

APISIX-Datadog 插件只需要依赖 datadog/agent 的 dogstatsd 组件即可实现,因为该插件按照 statsd 协议通过标准的 UDP 套接字向 dogstatsd server 异步发送参数。我们推荐使用独立的 datadog/dogstatsd 镜像,而不是使用完整的 datadog/agent ,因为 datadog/dogstatsd 的组件大小只有大约 11 MB,更加轻量化。而完整的 datadog/agent 镜像的大小为 2.8 GB。

运行以下命令,将它作为一个容器来运行:

# 拉取datadog/dogstatsd的最新镜像
docker pull datadog/dogstatsd:latest
# 运行容器
docker run -d --name dogstatsd-agent -e DD_API_KEY=<Your API Key from step 2> -p 8125:8125/udp  datadog/dogstatsd

如果你在生产环境中使用 Kubernetes,你可以将 dogstatsd 作为一个 Daemonset 或多容器 Pod 与 Apache APISIX agent 一起部署。

如何在 Apache APISIX 中使用 Datadog

启用 APISIX-Datadog 插件

如果你已经启动了 dogstatsd/agent,只需执行一条命令,就可以为指定路由启用 APISIX-Datadog 插件。

# 为指定路由启用 APISIX-Datadog 插件
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{      
    "plugins": {            
        "datadog": {}       
    },      
    "upstream": {
        "type": "roundrobin",
        "nodes": {              
            "127.0.0.1:1980": 1
        }      
    },      
    "uri": "/hello"
}'

启用 APISIX-Datadog 插件后,任何对端点 URI /hello 的请求都会产生上述指标,并推送到 Datadog agent 的本地 DogStatsD server。

自定义配置

如果启用 APISIX-Datadog 插件时,使用的是默认配置,dogstatsd 服务在127.0.0.1:8125 可用。如果你想更新配置,请更新插件的元数据。

元数据参数解释

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

要了解更多关于如何有效地编写标签,请访问这里3

/apisix/admin/plugin_metadata 端点发出请求,更新元数据,如下所示。

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

插件参数解释

与元数据类似,在启用 APISIX-Datadog 插件时,你也可以调整其他参数。

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

由于所有的字段都是可选的,如果你没有手动设置任何参数,APISIX-Datadog 插件将使用默认值设置这些参数。如果你需要更新任何参数,只需用更新的参数值更新所需的路由、服务或消费者。例如,下面的代码将 batch_max_size 修改为 10。

'{
...
"plugins": {
    "datadog": {
        "batch_max_size": 10 
    }
}
... }'

停用 APISIX-Datadog 插件

你只需在插件配置中删除相应的 json 配置即可停用 APISIX-Datadog 插件。由于 Apache APISIX 插件是热加载的,因此删除 json 配置后,会立即停用 APISIX-Datadog 插件,不需要重新加载。

# 为指定路由停用 APISIX-Datadog 插件
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{ 
    "uri": "/hello",    
    "plugins": {},    
    "upstream": {        
        "type": "roundrobin",        
        "nodes": {            
            "127.0.0.1:1980": 1        
        }    
    }
}'

[1]:https://docs.datadoghq.com/developers/dogstatsd/?tab=hostagent

[2]:https://docs.datadoghq.com/agent/

[3]:https://docs.datadoghq.com/getting_started/tagging/#defining-tags

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册