Observability:使用 OpenTelemetry 自动检测 Go 应用程序
作者:来自 Elastic Damien Mathieu
使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序,而无需更改应用程序代码。
在快节奏的软件开发领域,尤其是在云原生领域,DevOps 和 SRE 团队正日益成为应用程序稳定性和增长的重要合作伙伴。
DevOps 工程师不断优化软件交付,而 SRE 团队则充当应用程序可靠性、可扩展性和顶级性能的管家。挑战是什么?这些团队需要一种尖端的可观察性解决方案,该解决方案包含全栈洞察,使他们能够快速管理、监控和纠正潜在的中断,以免它们最终演变为运营挑战。
我们现代分布式软件生态系统中的可观察性不仅仅是监控 —— 它要求无限的数据收集、精确的处理以及将这些数据关联到可操作的洞察。然而,实现这种整体视角的道路充满障碍,从解决版本不兼容问题到与限制性专有代码作斗争。
进入 OpenTelemetry (OTel),采用它的人将获得以下好处:
- 使用 OTel 摆脱供应商限制,摆脱供应商锁定并确保一流的可观察性。
- 看到统一日志、指标和跟踪的和谐结合在一起,提供完整的系统视图。
- 通过更丰富和增强的仪表来改善你的应用程序监督。
- 利用向后兼容性的好处来保护你之前的检测投资。
- 以简单的学习曲线踏上 OpenTelemetry 之旅,简化入职和可扩展性。
- 依靠经过验证的、面向未来的标准来增强你对每项投资的信心。
在本博客中,我们将探讨如何使用 Docker 在 Go 应用程序中使用自动检测,而无需重构应用程序代码的任何部分。我们将使用一个名为 Elastiflix 的应用程序,它有助于以简单的方式突出显示自动检测。
应用程序、先决条件和配置
我们在本博客中使用的应用程序称为 Elastiflix,这是一款电影流应用程序。它由用 .NET、NodeJS、Go 和 Python 编写的几个微服务组成。
在我们测试示例应用程序之前,我们首先需要了解 Elastic 如何接收遥测数据。
Elastic Observability 的所有 APM 功能均可通过 OTel 数据使用。其中包括:
- 服务地图 - service map
- 服务详细信息(延迟、吞吐量、失败 transactions)
- 服务之间的依赖关系、分布式跟踪
- 事务(跟踪)
- 机器学习 (ML) 关联
- 日志关联
除了 Elastic 的 APM 和遥测数据的统一视图外,你还可以使用 Elastic 强大的机器学习功能来减少分析和警报,以帮助减少 MTTR。
先决条件
- Elastic Cloud 帐户 — 立即注册。
- 克隆 Elastiflix 演示应用程序,或你自己的 Go 应用程序
- 对 Docker 有基本了解 — 可能安装 Docker Desktop
- 对 Go 有基本了解
查看示例源代码
完整的源代码(包括本博客中使用的 Dockerfile)可在 GitHub 上找到。
以下步骤将向你展示如何检测此应用程序并在命令行或 Docker 中运行它。如果你对更完整的 OTel 示例感兴趣,请查看此处的 docker-compose 文件,它将显示完整的项目。
分步指南
步骤 0. 登录你的 Elastic Cloud 帐户
本博客假设你拥有 Elastic Cloud 帐户 — 如果没有,请按照说明开始使用 Elastic Cloud。
步骤 1. 使用自动检测功能运行 Docker 映像
我们将使用来自 Elastiflix 演示应用程序的 Go 服务进行自动检测。
我们将使用来自 Elastiflix 的以下服务:
Elastiflix/go-favorite
根据 OpenTelemetry 自动检测 Go 文档,你将使用 docker-compose 将应用程序配置为自动检测。
根据 OTEL Go 文档中所述,我们将使用环境变量并传入配置值以使其能够连接到 Elastic Observability 的 APM 服务器。
由于 Elastic 原生接受 OTLP,我们只需要提供 OTEL Exporter 需要发送数据的端点和身份验证,以及一些其他环境变量。
获取 Elastic Cloud 变量 你可以从 Kibana 的以下路径下复制端点和 token /app/apm/onboarding?agent=openTelemetry
你需要复制以下环境变量:
OTEL_EXPORTER_OTLP_ENDPOINT OTEL_EXPORTER_OTLP_HEADERS
更新 Elastiflix 存储库顶部的 docker-compose.yml 文件,添加 go-auto 服务并更新 favorite-go 服务:
favorite-go: build: go-favorite/. image: docker.elastic.co/demos/workshop/observability/elastiflix-go-favorite:${ELASTIC_VERSION}-${BUILD_NUMBER} depends_on: - redis networks: - app-network ports: - "5001:5000" environment: - REDIS_HOST=redis - TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY:-0} - TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY:-0} - TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE:-0} volumes: - favorite-go:/app go-auto: image: otel/autoinstrumentation-go privileged: true pid: "host" networks: - app-network environment: OTEL_EXPORTER_OTLP_ENDPOINT: "REPLACE WITH OTEL_EXPORTER_OTLP_ENDPOINT" OTEL_EXPORTER_OTLP_HEADERS: "REPLACE WITH OTEL_EXPORTER_OTLP_HEADERS" OTEL_GO_AUTO_TARGET_EXE: "/app/main" OTEL_SERVICE_NAME: "go-favorite" OTEL_PROPAGATORS: "tracecontext,baggage" volumes: - favorite-go:/app - /proc:/host/proc
并且,在文件底部:
volumes: favorite-go: networks: app-network: driver: bridge
最后,在主节点应用程序的配置中,你需要通过替换以下行来告诉 Elastiflix 调用 Go 收藏夹应用程序:
environment: - API_ENDPOINT_FAVORITES=favorite-java:5000
用如下行来替换:
environment: - API_ENDPOINT_FAVORITES=favorite-go:5000
步骤 3:探索 Elastic APM 中的跟踪和日志
启动并运行后,你可以 ping 已检测服务的端点(在我们的例子中,这是 /favorites),你应该会看到应用程序出现在 Elastic APM 中,如下所示:
首先,它将跟踪 SRE 需要关注的吞吐量和延迟关键指标。
深入研究后,我们可以看到所有交易的概览。
再看一下具体的 transactions:
这使你可以完全了解所有指标和跟踪!
总结
使用此 Dockerfile,你已将简单的 Go 应用程序转换为使用 OpenTelemetry 自动检测的应用程序。这将极大地帮助你了解应用程序性能、跟踪错误并深入了解用户如何与你的软件交互。
请记住,可观察性是现代应用程序开发的一个重要方面,尤其是在分布式系统中。借助 OpenTelemetry 等工具,理解复杂系统会变得容易一些。
在本博客中,我们讨论了以下内容:
- 如何使用 OpenTelemetry 自动检测 Go。
- 使用 Docker 文件中的标准命令,可以高效地完成自动检测,而无需在多个位置添加代码,从而实现可管理性。
- 使用 OpenTelemetry 及其对多种语言的支持,DevOps 和 SRE 团队可以轻松地自动检测他们的应用程序,立即了解整个应用程序堆栈的运行状况并减少平均解决时间 (mean time to resolution - MTTR)。
由于 Elastic 可以支持多种数据提取方法,无论是使用开源 OpenTelemetry 的自动检测还是使用其原生 APM 代理的手动检测,你都可以先关注几个应用程序来规划向 OTel 的迁移,然后再以最适合你业务需求的方式在你的应用程序中使用 OpenTelemety。
Developer resources:
- Elastiflix application, a guide to instrument different languages with OpenTelemetry
- Python: Auto-instrumentation, Manual-instrumentation
- Java: Auto-instrumentation, Manual-instrumentation
- Node.js: Auto-instrumentation, Manual-instrumentation
- .NET: Auto-instrumentation, Manual-instrumentation
- Go: Auto-instrumentation Manual-instrumentation
- Best practices for instrumenting OpenTelemetry
General configuration and use case resources:
- Independence with OpenTelemetry on Elastic
- Modern observability and security on Kubernetes with Elastic and OpenTelemetry
- 3 models for logging with OpenTelemetry and Elastic
- Adding free and open Elastic APM as part of your Elastic Observability deployment
- Capturing custom metrics through OpenTelemetry API in code with Elastic
- Future-proof your observability platform with OpenTelemetry and Elastic
- Elastic Observability: Built for open technologies like Kubernetes, OpenTelemetry, Prometheus, Istio, and more
还没有 Elastic Cloud 帐户?注册 Elastic Cloud 并试用我上面讨论的自动检测功能。我很想听听你对使用 Elastic 深入了解应用程序堆栈的体验的反馈。
本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。
原文:Auto-instrumentation of Go applications with OpenTelemetry — Elastic Observability Labs

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大前端:如何突破动态化容器的天花板?
本文整理自美团技术沙龙第83期《前端新动向》(B站视频)。长久以来,容器要实现动态化和双端复用,难免要牺牲掉一些性能。有没有办法让动态化容器的性能尽可能接近原生?美团金服大前端团队给出了一种解决方案,尝试突破动态化容器的天花板。 1 动态化容器的天花板 自2015年React Native推出至今9年时间,各类容器(动态化容器简称,下同)方案已经成为业界前端的普遍选择。业界有微信(小程序)、抖音(Lynx)、拼多多(Lego)、支付宝(Nebula/BirdNest)、京东(Taro-Native)等。美团也有MRN、MMP/MSC等容器。可以说容器是前端工程的关键基石,也是绕不开的话题。 过去我们做动态化改造主要为了解决以下问题: 降研发成本:通过容器将多端合一,避免一个需求在每个端重复开发,以改善研发成本结构。随着HarmonyOS NEXT的推广,这个优势将变得更大。 增部署效率:通过动态发布避开App集中集成,使得业务在移动端上可以独立部署和发布、实现211迭代,提升业务迭代面客效率。 然而凡事有利必有弊,有用必有费。动态化容器在解决上述问题的同时也带来以下问题: 降低页面成功...
- 下一篇
1024程序员节 | LFOSSA限时特惠来袭
在这个数字时代,每一位程序员都是构建未来世界的建筑师。1024程序员节,一个专属于你们的节日,我们向无尽的代码行和改变世界的创新精神致敬。在这一天,我们不仅是庆祝,更是为了支持和鼓励技术的追求和创新的探索。 在科技的世界里,每一次创新都是一场搏斗,每一次代码的编写都是对未来的一次挑战。正如习近平总书记所说:“人生能有几回搏”,这句话激励着每一位程序员在技术的海洋中勇往直前。LF开源软件学园(LFOSSA)理解这种拼搏精神,我们致力于为每一位技术爱好者和专业人士提供最前沿、最专业的学习资源。因此,在这个特别的节日里,我们决定开启限时特惠活动,回馈给每一位热爱编程、追求卓越的程序员。 LFOSSA1024程序员节 活动时间: 10月24日00:00-10月27日23:59 参与方式:直接进入 LFOSSA 官网,在结账时系统将自动为您的订单应用折扣价格。 活动说明:此活动适用于在2024年10月24日上午00:00:00至2024年10月27日下午23:59:59 ,在此期间:所有产品一经售出不予退还,请仔细核对订单信息后付款;同一优惠产品每个用户ID只能享受一次优惠价格,购买超过1单,超...
相关文章
文章评论
共有0条评论来说两句吧...