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:- redisnetworks:- app-networkports:- "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:/appgo-auto:image: otel/autoinstrumentation-goprivileged: truepid: "host"networks:- app-networkenvironment: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556818.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

分治算法(3)_快速选择_数组中的第K个最大元素

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 分治算法(3)_快速排序_数组中的第K个最大元素 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论&#…

【原创】Anaconda+VScode+PySide6 完美配置Python开发环境,亲测!

准备工作 下载安装 Anaconda 下载安装Visual Studio Code 配置系统环境变量 配置Anaconda环境变量 将Anaconda安装目录及Scripts 、Library\bin 两个子目录添加到用户变量或系统变量的Path变量中。 Anaconda自带最新版Python,如果已经安装Python,建议…

Mybatis测试案例

1.创建springboot工程 创建实体类user和接口 user类 注意:java和mysql的对象的属性数据类型要一致 mapper接口 2.配置mybatis(连接数据库信息) # spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #地址url spring.datasource.urljdbc:mysql://localho…

【Python】Mistune:高效的 Python Markdown 解析器

Mistune 是一个轻量且强大的 Python Markdown 解析器。它的设计目标是兼顾速度和扩展性,同时兼容 CommonMark 标准。Mistune 支持多种渲染器(Renderers)和插件,能够根据需求将 Markdown 转换为 HTML、LaTeX 或自定义格式。此外&am…

Java中数组的应用

Java中数组的应用 数组数组的使用使用方式1-动态初始化数组的定义:数组的引用(使用/访问/获取数组元素):快速入门案例 使用方式2-动态初始化**先声明**数组**再创建**数组使用方式1和2的比较 使用方式3-静态初始化初始化数组快速入…

[嵌入式Linux]—STM32MP1启动流程

STM32MP1启动流程 1.启动模式 STM32MP1等SOC支持从多种设备中启动,如EMMC、SD、NAND、NOR、USB、UART等。其中USB、UART是作为烧录进行启动的。 STM32MP1内部ROM中存储有一段出厂代码来进行判断从哪种设备中启动,上电后这段代码会被执行,这…

CPU中的寄存器是什么以及它的工作原理是什么?

在计算机科学中,寄存器是数字设备中的一个重要组成部分,它用于存储数据和指令以快速处理。寄存器充当临时存储区,信息可以在这里被快速访问和操作,以执行复杂任务。寄存器是计算机中最基础的存储类型,它们在帮助机器高…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D ,推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天,发现这个 animation sprite resolver 在导入动画帧的时候,一直都导入的是…

allegro 替换过孔

操作步骤如下 1.选择操作对象(需要替换的过孔),右键–>Repace……–>Selected…… 2.在弹出的窗口中选择最终需要的过孔既可以

【Matlab学习日记】② 常用滤波以及噪声分析方法(上)

关注星标公众号,不错过精彩内容 作者 | 量子君 微信公众号 | 极客工作室 【Matlab学习日记】专栏目录 第一章 ① Sinmulink自动代码生成教程 第二章 ② 常用滤波以及噪声分析方法(上) 文章目录 前言一、使用滤波的目的二、常见的几种噪声和表…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值3.寻找旋转排序数组中的最小值4.寻找旋转排序数组中的最小值II5.搜索旋转排序数组6.岛屿的最大面积7.最大数8.会议室9.最长连续序列 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储…

STM32 通用同步/异步通信

一、串行通信简介 CPU与外围设备之间的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。STM32单片机提供了功能强大的串行通信模块,即通用同步/异步收发器(USART)。 1.串行通信 串行通信是数据字节一位一位地依次传送的通信方式。…

毕业设计 深度学习水果识别

文章目录 1 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果 1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果…

毕业设计——医院信息化系统原型设计

作品详情 主要功能: 信息化系统是以患者为中心,服务于重症科室医务人员,提高工作效率及医疗服务质量。软件主要包含了重症医学临床管理系统和中央监控站,重症医学临床管理系统主要实现患者床位总览、患者护理、医嘱管理、数据字典…

JS 介绍/书写位置/输入输出语法

目录 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS 的组成 2. JS 书写位置 2.1 内部 JS 2.2 外部 JS 2.3 内联 JS 3. JS 注释和结束符 4. JS 输入输出语法 4.1 输入语法 4.2 输入语句 4.3 执行顺序 5. 字面量 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS …

GOM引擎启动后M2提示Invalid filename报错的解决办法

在架设一个GOM引擎版本的时候,启动M2就提示Invalid filename,之后的网关就没有办法再启动了,研究了半天也终于是弄好了,其实也简单,就是路径设置的不对,所以无法完成启动,很多人以为在控制台设置…

国庆节刷题

10.1 C语言 10.1 C 10.2 C语言 10.2 C 10.3 C语言 10.3 C 10.4 C语言 10.4 C 10.5 C语言 10.5 C 10.6 C语言 10.6 C

如何写出Pythonic的代码?

f-string、三元操作、各种解析式、生成器装饰器的熟练运用,“内库”引用和函数封装再加持PEP8,撰写的脚本不pythonic都难。😎 (笔记模板由python脚本于2024年10月07日 18:03:27创建,本篇笔记适合特别喜欢python的coder翻阅) 【学习…

手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地

手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…

Burp Suite为何能抓到HTTPS的明文流量,Wireshark可以吗,公司电脑的加密流量也是被监控了吗?

在前期博文《万字图文详解HTTPS协议通信过程,结合抓包实战解析带你一次看透HTTPS!》中,我们知悉HTTPS通信内容是用会话密钥加密的,但不少细心的读者存在疑问:为何对于使用HTTPS协议的站点,在Burp Suite中拦…