Observability:使用 OpenTelemetry 自动检测 Go 应用程序

news2024/11/24 2:36:32

作者:来自 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

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

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

相关文章

网络资源模板--Android Studio 通讯录App

目录 一、项目演示 二、项目测试环境 三、项目详情​编辑 四、完整的项目源码 一、项目演示 网络资源模板--通讯录App 二、项目测试环境 三、项目详情 首页 package com.example.addressbook.activity;import androidx.appcompat.app.AppCompatActivity; import androidx.c…

Qwen变体新成员加一,英伟达训练 NVLM-D-72B 视觉大模型

今天(2024 年 9 月 17 日),我们推出了前沿级多模态大语言模型(LLM)系列 NVLM 1.0,它在视觉语言任务上取得了最先进的结果,可与领先的专有模型(如 GPT-4o)和开放存取模型&…

2024高校网络安全管理运维赛 wp

0x00 前言 本文是关于“2024高校网络安全管理运维赛”的详细题解,主要针对Web、Pwn、Re、Misc以及Algorithm等多方向题目的解题过程,包含但不限于钓鱼邮件识别、流量分析、SQLite文件解析、ssrf、xxe等等。如有错误,欢迎指正。 0x01 Misc 签到…

纯干货!一个白帽子挖漏洞经验细致分享_白帽子找漏洞一天能多少

不知道是不是很多人和我一样,每天刷着漏洞,看着自己的排名一位一位的往上提升,但是,但是。总感觉怪怪的,为什么别人刷的漏洞都是现金,而自己刷的漏洞都是给库币。别人一天为什么提交那么多漏洞,…

winform appconfig

文章目录 添加一个appconfig配置文件的结构读取写入 这是wiform自带的配置文件,格式为xml 其位置在程序根目录下 添加一个appconfig 首先默认情况下,winform会自动创建一个名叫appconfig的配置文件,位于程序根目录下 如果需要手动创建更多…

【路径规划】基于球面向量的粒子群优化算法(SPSO)

摘要 本文提出了一种基于球面向量的粒子群优化算法(Spherical Vector-based Particle Swarm Optimization, SPSO)用于解决路径规划问题。该算法通过球面坐标系表示粒子的位置更新,增强了搜索空间的探索能力和全局优化性能。通过与遗传算法&a…

浅析基于双碳目标的光储充一体化电站状态评估技术

摘要:全国碳市场拉开了我国能源结构加速转型的大幕,催生了光伏、储能和新能源汽车等一批绿色产业的兴起,同时随着利好政策扶植和消费者的青睐,光伏、储能和新能源汽车市场均加快发展。但传统的充电桩和光伏电站都是分开建设&#…

基于SSM的家庭理财系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题目的: 随着社会的进步,我国经济的快速发展,人们的生活水平提高了,现在人们已经不仅仅满足于能够吃得饱穿得好,现在的人们在想着如何丰富自己的精神世界,想着如何去…

Win11环境下 DELPHI 12.2 安装全过程

背景描述 DELPHI作为曾经的Windows原生开发的王者,DELPHI12.2可以实现Windows、Android、IOS、macOS、Linux的应用开发,现在还有少数企业使用,大多数用户是从传统D3/4/5/6/7坚持下来的爱好者,2ccc.com里有相关内容,但…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化,图像的压缩率以及对应的图像质量指标PSN…

QT使用websocket实现语音对讲

简介: 本文所描述的功能和代码,是基于QT的开发环境。在QT上使用websocket,接受和发送pcm音频,实现了语音对讲功能。经自测,该功能可以正常使用,以下是相关代码的分享。 void MainWindow::on_pushButton_Ope…

Linux学习笔记(七):磁盘的挂载与扩展

Linux学习笔记(七):磁盘的挂载与扩展 在虚拟机环境中,当我们的存储空间不足时,添加一块新的硬盘显得尤为重要。 1. 新增磁盘 首先,你需要确保有一块物理磁盘或虚拟磁盘。在虚拟机管理器中,你可以…

1.4TB! 全台湾2024年三维建筑模型3DTiles数据

在今年1月13日,我写了一篇文章,详细介绍了了全台湾2023年三维建筑模型数据以及数据背景。隔了8个月之后,我对全岛建筑模型数据进行了更新,不仅在数量上有增长,而且数据显示性能也进行了优化,下面我针对对2024年数据进行…

探索Python文本处理的新境界:textwrap库揭秘

文章目录 **探索Python文本处理的新境界:textwrap库揭秘**一、背景介绍二、textwrap库是什么?三、如何安装textwrap库?四、简单函数使用方法4.1 wrap()4.2 fill()4.3 shorten()4.4 dedent()4.5 indent() 五、实际应用场景5.1 格式化日志输出5…

黑龙江等保测评详细指南

一、什么是等保测评? 等保(信息安全等级保护)是指根据信息系统的重要性和安全需求,对其进行分级保护的制度。黑龙江省的等保测评旨在评估信息系统的安全性,确保其符合国家和地方的安全标准。 二、等保测评的必要性 1…

OpenAI重磅发布Canvas:跟ChatGPT一起写作编程

现在是大半夜1点56,国庆第三天,我想睡觉,真的。 但是,ChatGPT更新了,虽然不是那种王炸级的新模型模型更新,但是更新了一个极度优雅,对普通人极度友好的功能。 而且,顺带&#xff0…

ASB:LLM智能体应用攻防测试数据集

ABS:LLM智能体应用攻防测试数据集 Agent应用 Agent Security Bench (ASB): Formalizing and Benchmarking Attacks and Defenses in LLM-based Agents 尽管基于 LLM 的代理能够通过外部工具和记忆机制解决复杂任务,但也可能带来严重安全风险。现有文献对…

地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium,不同场景下应如何选择地图库

目录 地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium 一、总览 二、定制地图美学的先行者——Mapbox 1、主要功能特点 2、开源情况 3、市场与应用人群 4、安装与基础使用代码 三、开源GIS地图库的全能王——OpenLayers 1、主要功能特点 2…

重要的事情说两遍!Prompt「复读机」,显著提高LLM推理能力

【导读】 尽管大模型能力非凡,但干细活的时候还是比不上人类。为了提高LLM的理解和推理能力,Prompt「复读机」诞生了。 众所周知,人类的本质是复读机。 我们遵循复读机的自我修养:敲黑板,划重点,重要的事…

原生input实现时间选择器用法

2024.10.08今天我学习了如何用原生的input&#xff0c;实现时间选择器用法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <div><input id"yf_start" type"text"> </div><script>$(#yf_start).datepicker({language: zh…