使用 OpenTelemetry 进行便携式合成 HTTP 测试

博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。

合成测试是可观测性工具包的重要组成部分。它们可用于衡量应用程序 SLA、监控不同地理位置的端点、像用户一样导航网页或在客户遇到之前识别部署后的错误。

本博客将重点介绍基于 HTTP 的合成可用性测试。许多供应商提供各种可用性测试选项,并提供慷慨的免费套餐,但以企业规模监控端点会迅速导致数千个测试,当迁移可观测性供应商时,这些测试无法轻松转移。OpenTelemetry (OTel) 致力于可观测性数据的便携性,以帮助用户最大限度地提高对服务的可见性,并充分利用其可观测性投资,而无需不断重新创建相同的功能。

社区正在不断改进项目的能力,新功能很容易被忽略。在 v0.63.0 版本中,OTel Collector 通过一个名为 HTTP Check Receiver 的接收器添加了对合成 HTTP 检查的支持。此组件通过 HTTP 或 HTTPS 发送请求,并生成指标来捕获请求的持续时间并记录返回的状态码。您现在可以部署代理到您偏好的环境中,以测试公共或私有端点,而无需在防火墙中将 IP 列入白名单,并像其他 OTel 数据一样将测试传输到您偏好的目的地。

部署您的第一个 OTel 合成 ping 测试

开始使用 OTel 合成非常简单。您像往常一样配置 Collector,然后添加带有您选择的端点、HTTP 动词和收集间隔的 HTTP Check receiver。这是一个基本的 Collector 配置,供您入门。发送请求正文尚不支持,但您仍然可以在各种请求中发送自定义标头。

receivers:
  httpcheck:
    targets:
      - endpoint: https://api.restful-api.dev/objects
        method: GET
      - endpoint: https://httpbin.org/delete
        method: DELETE
      - endpoint: https://httpbin.org/post
        method: POST
        headers:
          test-key: 'test-123'
    collection_interval: 10s

exporters:
  #Your chosen exporter

processors:
  batch:

service:
  pipelines:
    metrics:
      receivers: [httpcheck]
      processors: [batch]
      #exporters: [your-exporter]

合成测试输出

默认情况下,接收器生成 3 个指标:httpcheck.durationhttpcheck.statushttpcheck.error。这些指标可用于可视化或定义警报。如果没有发生错误,则 httpcheck.error 图表将不会显示。以下是来自 httpcheck.durationhttpcheck.status 指标的一些示例屏幕截图。

持续时间检查

Synthetic duration check result

状态检查

Synthetic status check result

接下来做什么?

合成测试是 OTel 的一项令人兴奋的新功能,社区希望随着时间的推移对其进行发展。如果您对新的合成功能有任何具体要求,请随时在 opentelemetry-collector-contrib 存储库中为 HTTP Check receiver 打开一个 issue,或者打开一个 PR 自己添加功能。所有贡献和反馈都受到欢迎和赞赏。

对于更复杂的基于浏览器的测试,Selenium 项目具有原生的 OpenTelemetry 集成。我希望写一篇后续博客,介绍如何利用这些数据。

将来,我希望我们能够添加对自定义请求正文的支持,或者能够从 Playwright 等其他复杂的浏览器测试框架中提取结果。祝您测试愉快!