【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana链路追踪(一)

news2024/11/24 13:32:10

文章目录

  • 1、最终效果
  • 2、前提准备
  • 2、环境信息
  • 3、服务集成(Opentelemetry ->Tempo)
    • 3.1 上报链路数据
      • 3.1.1 下载opentelemetry-agent
      • 3.1.2 启动配置业务app
      • 3.1.3 配置opentelemetry输入输出
      • 3.1.4 配置grafana datasource
        • 3.1.4.1 配置tempo
        • 3.1.4.2 配置loki

1、最终效果

Loki与Tempo关联后,在Loki收集的日志,可以查看tempo的链路
在这里插入图片描述

2、前提准备

1、已安装Kubernetes
2、安装Grafana (安装文档)
3、安装Promtail (安装文档)
4、安装Loki (安装文档)
5、安装Tempo (安装文档)
6、安装OpenTelemetry (安装文档)

2、环境信息

服务版本安装方式Github
Kubernetes1.25我这里使用的是华为云CCE(暂时不推荐使用)-
OpenTelemetry0.97.0Helm安装https://github.com/open-telemetry
Loki2.9.6Helm安装https://github.com/grafana/loki
Tempo2.4.1Helm安装https://github.com/grafana/tempo
Grafana9.5.1Helm安装https://github.com/grafana/grafana

3、服务集成(Opentelemetry ->Tempo)

在这里插入图片描述
如图所示,绿色和蓝色这里就不说了,网上教程很多,大家自行完成

主要来说下橘色部分之前,我们来说下为什么要使用Opentelemetry,而不是直接让app->tempo。这样的设计有几个关键原因:
标准化: OpenTelemetry 是一个开放标准的可观测性框架,它提供了一套统一的API和SDK,用于收集 Metrics、Traces 和 Logs。这意味着开发者只需要学习一套接口,就可以在不同的服务和语言中实现一致的可观测性实践。这样,服务无需直接适配每个跟踪后端(如 Tempo),提高了代码的可移植性和维护性。

解耦: 通过 OpenTelemetry,服务与追踪后端(如 Tempo)之间的耦合度大大降低。服务只需生成追踪数据,而不需要知道数据最终如何被收集、处理或存储。这使得追踪系统的升级或替换变得更加容易,比如从一个追踪后端切换到另一个,而无需改动服务代码。

灵活性和扩展性: OpenTelemetry 支持多种出口(exporters),可以轻松地将数据发送到不同的后端,如 Tempo、Jaeger、Prometheus 等。这为用户提供了一个灵活的架构,可以根据需要选择最适合自己的追踪解决方案,或者根据环境(如开发、测试、生产)的不同配置不同的后端。

丰富的生态支持: OpenTelemetry 社区活跃,提供了多种语言的实现和支持,几乎涵盖了所有主流的编程语言。这意味着不论你的服务是用什么语言编写的,都能找到相应的 OpenTelemetry SDK 或者自动化的集成工具。

高级功能: OpenTelemetry SDK 提供了丰富的特性,如自动追踪上下文传播、手动追踪跨度的创建与关联、标签和事件的添加等,使得追踪数据更加丰富和有用。此外,它还支持动态采样策略,可以在不影响性能的前提下,智能地调整追踪数据的收集量。

所以通过 OpenTelemetry 作为中介,可以让服务的开发和维护更加集中于业务逻辑本身,同时享受标准化、灵活性和扩展性的优势,而不必关心具体的追踪数据处理细节

3.1 上报链路数据

3.1.1 下载opentelemetry-agent

这里已java为例
下载地址:https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases

通过修改Java启动的VM参数上报链路数据。

-javaagent:/path/to/opentelemetry-javaagent.jar //修改为文件下载的实际路径。
-Dotel.resource.attributes=service.name=appName //appName 为应用名。
-Dotel.exporter.otlp.endpoint=endpoint //opentelemetry 服务端地址。
-Dotel.metrics.exporter=none

3.1.2 启动配置业务app

配置env

JAVA_TOOL_OPTIONS = -javaagent:/tmp/aps-tools/opentelemetry-javaagent.jar -Dotel.resource.attributes=service.name=dev-dysk  -Dotel.exporter.otlp.endpoint=http://otel-opentelemetry-collector.otel.svc.cluster.local:4318  -Dotel.metrics.exporter=none

JAVA_TOOL_OPTIONS 是一个环境变量,它允许你在不直接修改启动 Java 应用程序的命令行参数的情况下,向 Java 虚拟机 (JVM) 传递额外的配置选项。这对于那些不能直接控制 JVM 启动参数的应用特别有用,比如通过 JNI (Java Native Interface) 调用 JVM 的应用、脚本中嵌入的 JVM 应用,或者一些服务管理工具自动启动的服务。

联系开发修改服务日志字段,新增trance_id

启动会发现日志中并没有trace_id字段,这是因为并没有做日志字段对应,属于正常情况。虽不会影响opentelemetry输入输出,但是会影响接下来的loki和tempo集成,他们需要trace_id字段做为相同数据媒介来快速查询。

在这里插入图片描述

3.1.3 配置opentelemetry输入输出

#声明使用的输出
exporters:
  debug: {}
  logging:
  otlp:
    endpoint: "tempo-distributor-discovery.trace.svc.cluster.local:4317" #修改为tempo地址
    tls:
      insecure: true
extensions:
  health_check:
    endpoint: 0.0.0.0:13133
processors:
  batch: {}
  memory_limiter:
    check_interval: 5s
    limit_percentage: 80
    spike_limit_percentage: 25
#声明使用的输入
receivers:
  jaeger:
    protocols:
      grpc:
        endpoint: 0.0.0.0:14250
      thrift_compact:
        endpoint: 0.0.0.0:6831
      thrift_http:
        endpoint: 0.0.0.0:14268
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  prometheus:
    config:
      scrape_configs:
      - job_name: opentelemetry-collector
        scrape_interval: 10s
        static_configs:
        - targets:
          - 0.0.0.0:8888
  zipkin:
    endpoint: 0.0.0.0:9411
#真正要使用的输入输出
service:
  extensions:
  - health_check
  pipelines:
    logs:
      exporters:
      - debug
      - logging
      processors:
      - memory_limiter
      - batch
      receivers:
      - otlp
    metrics:
      exporters:
      - debug
      processors:
      - memory_limiter
      - batch
      receivers:
      - otlp
      - prometheus
    traces:
      exporters:
      - debug
      - otlp
      processors:
      - memory_limiter
      - batch
      receivers:
      - otlp
      - jaeger
      - zipkin
  telemetry:
    metrics:
      address: 0.0.0.0:8888

重新启动opentelemetry

3.1.4 配置grafana datasource

3.1.4.1 配置tempo

在这里插入图片描述
URL:http://tempo-gateway.trace.svc
在这里插入图片描述

在这里插入图片描述

3.1.4.2 配置loki

在这里插入图片描述
URL:http://loki-distributed-gateway.logs.svc.cluster.local
在这里插入图片描述

Name:trace_id
Regex:trace_id=(\w+)
Query(先打开下面的Internal link):${__value.raw}

最后,我们在grafana的explore中选择Tempo数据源,可以查询到链路信息了
在这里插入图片描述

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

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

相关文章

C++进阶 | [3] 续 | 搜索二叉树的两种模型

摘要:搜索二叉树的效率,搜索二叉树的两种搜索模型及应用举例 前面一片文章学习了并实现了搜索二叉树,这篇将从实际应用的角度进一步介绍搜索二叉树。 1. 搜索二叉树的效率 平衡搜索二叉树 BST的查找效率是 O(N)。 分析:如右图所示…

驾驭多云环境,加速AI创新丨Animbus Cloud 8.3.0 算力调度平台升级发布

大模型开启全球新一轮AI浪潮,伴随算力规模的爆发增长以及计算技术的多元创新,需要更稳定、高效、敏捷的异构计算基础设施,才能充分发挥对算力能力的重要支撑。 作为开放智能云边架构引领者,九州未来凭借多年的技术积累、实践沉淀…

怎么ai拍照搜题?让你的学习之路更平坦!

怎么ai拍照搜题?在数字化时代,人工智能(AI)的广泛应用已经渗透到我们生活的方方面面,其中AI拍照搜题功能更是受到了广大学子的热烈欢迎。这一功能通过拍照上传题目,利用AI技术快速识别并分析题目内容&#…

C语言——模拟实现库函数atoi

1. atoi atoi&#xff1a;将字符串转换为整数。 1. 头文件 <string.h> 2. 声明&#xff1a; 1. 如果字符串开始有空格&#xff0c;直接跳过。 2. - 会影响打印的数字的正负。 3. 只打印数字字符&#xff0c;遇到非数字字符就停止。 4. 如果转换之后的数字大于 …

非预警,这3本TOP期刊,为何走到On Hold这步?

本周投稿推荐 SSCI • 2区社科类&#xff0c;3.0-4.0&#xff08;社科均可&#xff09; EI • 计算机工程类&#xff08;接收广&#xff0c;录用极快&#xff09; SCI&EI • 4区生物医学类&#xff0c;1.5-2.0&#xff08;录用率99%&#xff09; • 1区工程类&#…

高性能计算基础

高性能计算基础 CUDA的线程组织结构 CUDA的存储体系结构&#xff0c;每一种存储的优缺点&#xff0c;该如何合理使用。GPU每一代的新特性有了解过吗&#xff1f;应该从哪里去了解详细信息&#xff1f;CUDA stream的概念&#xff0c;为什么要使用多个stream&#xff1f;GPU和…

html中用frameset对窗口进行划分

html中&#xff0c;一般有<head><body>等部分&#xff0c;在用<frameset>对窗口进行区域划分时&#xff0c;<body>标签对就不再需要了。直接删除就可以了。 请看下面的示例&#xff1a; 由于使用frameset进行窗口划分时&#xff0c;对于电脑屏幕的划分…

鸿蒙开发接口Ability框架:【(AbilityDelegator)】

AbilityDelegator AbilityDelegator提供添加用于监视指定能力的生命周期状态更改的AbilityMonitor对象的能力&#xff0c;包括对AbilityMonitor实例的添加、删除、等待ability到达OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability、…

美业收银系统源码-App/iPad/PC管理系统常见问题讲解(1)

博弈美业管理系统源码 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1、平板iPad的评论内容&#xff0c;是从哪里评论的呢&#xff1f; 顾客在接受服务后&#xff0c;可以到…

从使用教程、实现原理、差异对比全方面带你玩转业务系统中高频使用的过滤器与拦截器

1.概述 在Java Web开发中&#xff0c;**过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;**是两种常见的组件&#xff0c;用于在请求到达目标资源之前或之后执行一些操作&#xff0c;如日志记录、权限控制、字符编码处理等。虽然它们的作用有…

PaddleOCR_PP-Structure

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.15.132 NETMASK255.255.255.0 GATEWAY192.168.15.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…

易我分区大师18.5发布上线:全方位提升您的磁盘管理体验

近期&#xff0c;易我分区大师18.5版本正式发布上线&#xff01; 新版本在原有基础上进行了升级和优化&#xff0c;不仅继承了前版本的强大功能&#xff0c;还新增了C盘数据迁移、清除Windows PIN码以及蓝屏问题助手等实用功能&#xff0c;帮助用户更轻松、更高效地管理电脑磁…

车载电子电器架构 —— UDS Service 11介绍

车载电子电器架构 —— UDS Service 11介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

栈的相关操作练习:用栈实现队列

1.思路解析 首先了解&#xff0c;队列遵循先进先出&#xff0c;栈遵循后进先出&#xff0c;所以利用两个栈popst与pushst进行元素转移后可以实现先进先出的功能。原题来源于leetcode中的:232.用队列实现栈 2.操作详解 首先要自己写一个栈及其操作&#xff0c;这里直接给出&…

C++类与对象基础探秘系列(一)

目录 面向过程和面向对象初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类的对象模型 如何计算类对象的大小 类对象的存储方式 结构体内存对齐规则 类成员函数的this指针 this指针的引出 this指针的特性 C语言和C实…

leetCode-hot100-位运算专题

例题中的视频讲解是B站中的宝藏博主的讲解视频&#xff0c;每道题后面都附有该题对应的视频链接~ 位运算知识总结 1.异或2.与运算和或运算3.左移和右移4.综合例题 1.异或 参考资料&#xff1a;位运算-异或&#xff0c;以下知识点讲解的内容参考了该篇博文&#xff0c;有兴趣的…

MySQL表结构的一些设计经验分享

我们在对一张表进行设计时&#xff0c;还要遵守一些基本的原则&#xff0c;比如经常听见的“范式准则”。但范式准则过于理论&#xff0c;在真实业务中&#xff0c;不必严格遵守三范式的要求。而且有时为了性能考虑&#xff0c;还可以进行反范式的设计&#xff0c;比如在数据仓…

ATFX:美国通胀率平台期,或助力黄金延续涨势

ATFX金属&#xff1a;5月9日19:00至5月10日19:00&#xff0c;COMEX黄金的小时级别出现一波持续24小时的上涨走势&#xff0c;最高触及2385.3美元&#xff0c;累计涨幅2.78%&#xff0c;成为上周最佳的短线交易时机。R阻力线形成后&#xff0c;COMEX黄金进入下降通道&#xff0c…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…