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

文章目录

  • 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数据源,可以查询到链路信息了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于RK3568的鸿蒙通行一体机方案项目

鸿蒙通行一体机方案以鸿蒙版AIoT-3568X人工智能主板为核心平台,搭载OpenHarmony操作系统,使用自研算法和国产芯片,可管可控,并提供身份识别以及其他外设配件生态链支持。 01 项目概述 项目使用场景 鸿蒙版通行一体机方案凭借自主…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型,提升运营效率的重要力量。而在这个过程中,云管理作为确保云计算环境稳定、高效运行的关键环节,其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么? 云管理的作用是什么&…

探索渲染农场的高性能奥秘

在当今数字化的时代,渲染农场正逐渐成为许多行业不可或缺的强大工具。那么,为什么我们说渲染农场是高性能的计算机系统呢?让我们深入剖析其中关键要点。 “渲染农场”拥有大规模的计算资源。它由众多高性能的计算机节点组成,这些…

Maven、JavaWeb基础开发

1 Maven介绍 1、标准化的项目结构 2、标准化的构建流程 3、依赖管理 4、依赖范围 2 JavaWeb基础开发 2.1 Http协议 1 Http请求数据格式 2 Http响应数据格式 2.2 Web服务器(Tomcat) VTS、FileServer使用Tomcat部署; 其他服务单元TESLA S…

vue3.0(七) 计算属性(computed)

文章目录 1 计算属性(computed )1.1 computed使用1.2 computed使用场景1.4 computed的注意点1.4 computed的原理1.5 computed的示例 computed 和 Methods 的区别 1 计算属性(computed ) 在 Vue 3 中,computed 是一个用…

【AI大模型】自动生成红队攻击提示--GPTFUZZER

本篇参考论文为: Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 虽然LLM在今天的各个领域得到了广泛的运用…

Nginx安全扫描借助lua-nginx-module模块增加授权

一、问题描述 某次安全扫描通过Dirsearch工具发现,nginx代理访问某后端业务时,发现:Springboot未授权漏洞,存在信息泄露风险,危险等级:中危; 相关资源:openresty官网、/lua-nginx-m…

结构体补充-位段

文章目录 位段介绍位段内存分配位段的使用注意事项结束 位段介绍 为什么会有位段呢? 我们直到一个int是4个字节表示32个bit位,但是比如2,3这样的整数,我们只需要2个bit位就可以了,那30个比特位不就是浪费掉了吗,所以位段就产生了 位段通过结构体来实现,位段表示方法…

Hive表数据优化

Hive表数据优化 1.文件格式 为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。 (1)Text File 文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。 可…

C++之Eigen库基本使用(下)

1、常见变换 Eigen::Matrix3d //旋转矩阵(3*3) Eigen::AngleAxisd //旋转向量(3*1) Eigen::Vector3d //欧拉角(3*1) Eigen::Quaterniond //四元数(4*1) Eigen::Isom…

K8s:二进制安装k8s(单台master)

目录 一、安装k8s 1、拓扑图 2、系统初始化配置 2.1关闭防火墙selinx以及swap 2.2设置主机名 2.3在每台主机中添加hosts,做映射 2.4调整内核参数,将桥接的ipv4流量传递到iptables,关闭ipv6 2.4时间同步 3、部署docker引擎&#xff0…

【Kali Linux工具篇】wpscan的基本介绍与使用

介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞&#x…

力扣【旋转函数】python

如果直接用暴力的话,只能过4个样例好像,超时 因此得用递推公式 F1F0前n-1个数-(n-1)*第n个数 F0sum(nums)-n*第n个数 nlen(nums) ans[]#定义一个存最大值值的列表 ss sum(nums) dm 0 for j in range(n):dm j * nums[j] ans.append(dm) print(dm) n…

MinIO学习笔记

MINIO干什么用的: AI数据基础设施的对象存储 为人工智能系统提供数据支持,数据存储;对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本…

GitHub和huggingface镜像网站

GitHub镜像网站 gitclone 如果网络原因打不开GitHub的话,可以用这个网站进行克隆项目,将克隆代码修改一下 git clone https://github.com/comfyanonymous/ComfyUI.git 修改 git clone https://gitclone.com/github.com/comfyanonymous/ComfyUI.git 这个…

JSON在线解析及格式化验证 - JSON.cn网站

JSON在线解析及格式化验证 - JSON.cn https://www.json.cn/

docker八大架构之应用服务集群架构

应用服务集群架构 在之前,一个应用层要负责所有的用户操作,但是有时用户增加后就会导致供不应求的现象(单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢),这时就需要增加应用层服务器&#xf…

自动驾驶占据感知的综述:信息融合视角

24年5月香港理工的论文“A Survey on Occupancy Perception for Autonomous Driving: The Information Fusion Perspective“。 3D 占据感知技术旨在观察和理解自动驾驶车辆的密集 3D 环境。该技术凭借其全面的感知能力,正在成为自动驾驶感知系统的发展趋势&#x…

简单实现---基于STL的演讲比赛流程管理系统(C++实现)

前言 事先声明:本文章中编写的代码仅用于学习算法思想和编写基础形式使用,并未进行太多的代码优化,因此,若需要对代码进行优化以及异常处理的小伙伴们,可自行添加相关操作,谢谢! 一、题…

绘图软件 excalidraw 部署流程 [ Ubuntu 22.4已验证 ]

文章目录 前置一、修改DNS二、添加docker 镜像三、pull excalidraw/excalidraw四、启动一个docker五、访问 简介:这篇文章介绍的是一份开源的绘图软件的部署过程 前置 安装docker:Ubuntu 系统,Docker 安装步骤 [Ubuntu 22.4已验证] 其他系…