【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性,就顺便整理一下文档。

Tempo 会分为 4 篇文章:

  1. Tempo 的架构
  2. 官网测试实操跑通
  3. gin 框架发送 trace 数据到 tempo
  4. go-zero 微服务框架使用发送数据到 tempo

根据官方文档实操跑起来 tempo,中间根据自己需要改了一些,按照纯官网会有些跑不起来。

本文档用 docker-compose 启动,单独启动组件的,会在其他的文档描述。本文档主要目的在于用起来,怎么用得好,我现在也没研究太深。

所有本文档用到的配置文件,均在:zxmfke/lgtm: LGTM可观测性实战 (github.com)

git clone https://github.com/zxmfke/lgtm.git

让架构告诉我们需要什么组件来完成

【GO】LGTM_Grafana_Tempo(1)—架构

第一篇讲了 tempo 的架构,分为 Distributor,Ingester,Quier,Quier Fontend,Stroage,Compator,Matrics Generator/Backend。Distributor 意味着输入,所以得有个东西来发送 traces 数据。我们通过 github,可以找到 grafana 用来测试的 k6-tracing(初次看到,感觉就很吊)。

可能这个地方,有些人会想,好麻烦呀还要造数据,又要写代码。但是这个步骤却又是很重要的一步,相当于自测。开发前,也应该要想要的我要怎么自测,怎么测试我提供给别人的服务。

Ingester,Storage,Comptor 组成(泛) 我们的 tmepo,所以 tempo 肯定是必不可少的了。既然我们把数据发到tempo了,那我们就得做存储,为了测试所以就用 fs 来作为存储。数据存完,tempo 提供 quier,就表示我们可以查。Grafana 必然就是首选,毕竟是其旗下,因此 Grafana 也是需要的。最后一个,Matrics 要记在哪里呢?嗯,还是得要 prometheus 用来监控。不过,不开 matrics 的话,也可以不用 prometheus。

这样,本文档需要用到的所有组件就是,grafana,tempo,prometheus,k6-tracing。


文档使用镜像

  • grafana:grafana/grafana:10.1.0

  • tempo:grafana/tempo:2.2.1

    去 docker hub 上看 tempo 的 tag 都是仓库名+commitid,其实直接拉取 github 上面最新 release 版本就行

  • prometheus:prom/prometheus:v2.46.0

  • k6-tracing:ghcr.io/grafana/xk6-client-tracing:v0.0.2


文档使用配置文件地址

都是在一个仓库,可以直接 clone 下来,等下直接 docker-compose 起就好

git clone https://github.com/zxmfke/lgtm.git

组件配置文件说明及重点修改说明

针对我跑的过程中碰到的几个点,简单说明下

grafana

grafana 的是 datasource 文件,这个文件可以减少使用者手动配置 tempo,prometheus 的步骤,这个值得自己在开发的时候借鉴。主要就是配置 tempo 和 prometheus,页面的配置也会在之后文档补上。

用 datasource 文件,创建的 source,在 grafana UI 上是不能编辑的,只能通过文件改了。

tempo
server:
  http_listen_port: 3200 # tempo 监听端口

distributor:  # 配置的是允许接入哪些类型的 trace 数据
  xxxxx

ingester:
  xxxxx

compactor:
  xxxxx
  
metrics_generator: # 配置的是 metrics 的数据往哪里发,主要就是写 promethus 的 URL
  registry:
    external_labels:
      source: tempo
      cluster: docker-compose
  storage:
    path: /tmp/tempo/generator/wal
    remote_write:
      - url: http://promethus.ip:9090/api/v1/write
        send_exemplars: true

storage:
  trace:
    backend: local                     # backend configuration to use
    wal:
      path: /tmp/tempo/wal             # where to store the the wal locally
    local:
      path: /tmp/tempo/blocks

overrides:
  metrics_generator_processors: [service-graphs, span-metrics]

有看过第一篇架构的朋友,应该对配置文件里面的几个标题都很熟悉了。

解释(看的时候,查的资料)

wal

“wal” 是指 Write-Ahead Log(预写日志)。Write-Ahead Log 是一种持久化数据的技术,在系统发生崩溃或故障时,可以确保数据的可靠性和一致性。对于 Tempo 来说,“wal” 是一个配置项,用于指定预写日志文件的位置和设置。

通过使用 Write-Ahead Log,Tempo 可以将跟踪数据持久化到磁盘,以便在系统故障后能够恢复数据并保持数据的完整性。该日志文件记录了写入 Tempo 的跟踪数据的操作,以及相关的元数据。这种方式可以确保即使在系统崩溃时,跟踪数据也不会丢失,并且可以在系统恢复后重新加载。

overrides

“overrides” 是用于覆盖默认配置的配置项。它允许您对 Tempo 的行为进行细粒度的定制,以满足特定的需求和场景。

通过使用 “overrides” 配置项,您可以在 Tempo 中针对某些特定的组件、服务或操作进行个性化配置。这些覆盖配置可以覆盖全局配置中的默认设置,以便对特定组件或场景进行定制化设置。


Docker Compose YAML

# 如果有 git clone 的话,直接 cd tempo/docker-compose/local 即可
wget https://github.com/zxmfke/lgtm/blob/main/tempo/docker-compose/local/docker-compose.yaml -O docker-compose.yaml
version: "3"
services:

  tempo:
    image: grafana/tempo:2.2.1
    command: [ "-config.file=/etc/tempo.yaml" ]
    volumes:
      - ./tempo.yaml:/etc/tempo.yaml
      - ./tempo-data:/tmp/tempo
    ports:
      - "14268:14268"  # jaeger ingest
      - "3200:3200"    # tempo
      - "9095:9095"    # tempo grpc
      - "4317:4317"    # otlp grpc
      - "4318:4318"    # otlp http
      - "9411:9411"    # zipkin

  k6-tracing:
    image: ghcr.io/grafana/xk6-client-tracing:v0.0.2
    environment:
      - ENDPOINT=tempo:4317
    restart: always
    depends_on:
      - tempo

  prometheus:
    image: prom/prometheus:v2.46.0
    command:
      - --config.file=/etc/prometheus.yaml
      - --web.enable-remote-write-receiver
      - --enable-feature=exemplar-storage
    volumes:
      - ./prometheus.yaml:/etc/prometheus.yaml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana:10.1.0
    volumes:
      - ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml
    environment:
      - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor
    ports:
      - "3000:3000"

注意事项

  1. tempo 的 ports 是根据配置文件中 distributor 来的,开放哪些 receiver 就开哪些端口。

    单点部署 tempo 的有一个很容易出错的地方,docker run 的时候只知道开放 3200 端口,以为 tempo 就起好了,但是往里面发 traces 数据的时候又写不进去。

  2. k6-tracing 是往 tempo 发数据,所以必须得等 tempo 启动好


配置文件改动位置

grafana-dataresources.yaml
# 如果有 git clone 的话,直接 cd tempo/docker-compose/local 即可
wget https://github.com/zxmfke/lgtm/blob/main/tempo/docker-compose/local/grafana-dataresources.yaml -O grafana-dataresources.yaml

L9:prometheus.ip,改成部署的服务器IP

L20:tempo.ip,改成部署的服务器IP

prometheus.yaml
# 如果有 git clone 的话,直接 cd tempo/docker-compose/local 即可
wget https://github.com/zxmfke/lgtm/blob/main/tempo/docker-compose/local/prometheus.yaml -O prometheus.yaml

L11:tempo.ip,改成部署的服务器IP

tempo.yaml
# 如果有 git clone 的话,直接 cd tempo/docker-compose/local 即可
wget https://github.com/zxmfke/lgtm/blob/main/tempo/docker-compose/local/tempo.yaml -O tempo.yaml

L34:promethus.ip,改成部署的服务器IP

我是本地 docker-compose 起,所以改的都是部署的服务器IP地址。后面部署在别的地方 ,或者用创建docker network,都是可以的。


启动

docker-compose 的安装就不在这边描述了,Install Docker Desktop on Debian | Docker Docs,有完整的教程。

docker-compose up -d

启动过程可能会出现如下画面:

在这里插入图片描述

容器名称可能会不一样,这个没关系。启动完成后,执行 docker ps,就可以看到我们想要启动的 4 个容器。

在这里插入图片描述

停止

docker-compose down

页面访问

在通过之前描述,k6-tracing 是定时往 tempo 里面发数据,我们就来看一下 grafana 上面怎么看。

登入 grafana

浏览器请求 IP:3000,访问 grafana 的主页。第一次登入的话,账号密码是 admin/admin。

在这里插入图片描述

进入 explore 页面

在这里插入图片描述

选择一个 trace 查看

在这里插入图片描述

查看 service Graph

详细可看,Service graph view | Grafana Tempo documentation

在这里插入图片描述

Metrics

我们在 tempo 的配置项里面开启了 metrics_generator,所以可以通过 explore 里面选择 prometheus 来当做数据源,查看。在筛选器里面的 Metric 里面有非常多可选项。

在这里插入图片描述

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

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

相关文章

微信小程序 趣味学习与益智游戏系统APP

管理员、用户可通过HBuilder系统手机打开系统,注册登录后可进行管理员后端;首页、个人中心、用户管理、学生分类管理、学一学管理、玩一玩管理、听一听管理、试题管理、练一练管理、系统管理、考试管理,用户前端;首页、学一学、玩…

Linux 内核动态打印调试(dev_info、 dev_dbg )

目录 前言 1 printk消息级别 2 调整内核printk打印级别 3 dev_xxx函数简介 4 配置内核使用动态打印 5 动态调试使用方法 6 动态打印调试的基本原理 🎈个人主页🎈:linux_嵌入式大师之路的博客-CSDN博客🎉🎉&…

Mysql优化原理分析

一、存储引擎 1.1 MyISAM 一张表生成三个文件 xxx.frm:存储表结构xxx.MYD:存储表数据xxx.MYI:存储表索引 索引文件和数据文件是分离的(非聚集) select * from t where t.col1 30; 先去t.MYI文件查找30对应的索引…

【Terraform学习】Terraform模块基础操作(Terraform模块)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解

概要 是否还在为网页测试而烦恼?是否还在为重复的点击、等待而劳累?试试强大的Selenium!让你的网页自动化测试变得轻松有趣! 一、Selenium库到底是什么? Selenium 是一个强大的自动化测试工具,它可以让你直…

单片机(二)使用位移 让灯亮

一:硬件电路 P2 口: P2.0~ P2.7 是这些 I0 口 LED 阳极接 电源 , P20 口 为低电平 可以让 LED灯 亮 二:软件实现部分 两种 ① 通过循环 来展示从左 到右 #include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端…

5G工业网关赋能救护车远程监控,助力高效救援

智慧医疗是传统医疗业发展进步的必要趋势,医疗设备通过物联网技术的应用实现智能化转型。通过5G工业网关将医疗器械等设备的数据采集再经过专网传输到医疗系统中,实现医疗设备间的数据共享和远程监控,能够帮助医疗行业大大提高服务质量和管理…

Unity——资产包(Asset Bundles)

对很多单机游戏来说,游戏的所有资源往往是与游戏本体一同发布的,资源部西药独立出来。但对于大型商业项目来说,游戏产品还需要再发布之后进行维护和更新,这就引出了Unity资产包的概念 一、资产包(Asset Bundles&#x…

Linux Input子系统

一、基本概念 按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。本质属于字符设备。 1. input子系统结构如下: input 子系统分为 input 驱动层、input 核心层、input 事件处理层&…

[Linux]进程

文章目录 1. 进程控制1.1 进程概述1.1.1 并行和并发1.1.2 PCB1.1.4 进程状态1.1.5 进程命令 1.2 进程创建1.2.1 函数1.2.2 fork() 剖析 1.3 父子进程1.3.1 进程执行位置1.3.2 循环创建子进程1.3.3 终端显示问题1.3.4 进程数数 1.4 execl和execlp函数1.4.1 execl()1.4.2 execlp(…

什么是浏览器缓存(browser caching)?如何使用HTTP头来控制缓存?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器缓存和HTTP头控制缓存⭐ HTTP头控制缓存1. Cache-Control2. Expires3. Last-Modified 和 If-Modified-Since4. ETag 和 If-None-Match ⭐ 缓存策略⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击…

攻防世界-web-fakebook

1. 题目描述 打开链接,这样一个界面 貌似没啥特殊的。。。没关系,我们每个页面都点击一下 login页面:一个简单的登录页面 join界面:不出意外,这应该是一个注册界面 目前,我们什么都不做,能获…

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面:核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作: 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 (1)创建线程组 &#xf…

多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile

一、回顾💛 谈谈volatile关键字用法 volatile能够保证内存可见性,会强制从主内存中读取数据,此时如果其他线程修改被volatile修饰的变量,可以第一时间读取到最新的值。 二、💙 HashMap线程不安全没有锁,HashTable线程…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果…

跳槽面试:如何转换工作场所而不失去优势

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【数学建模】清风数模正课7 多元线性回归模型

多元线性回归分析 回归分析就是,通过研究自变量X和因变量Y的相关关系,来解释Y的形成机制,从而达到通过X去预测Y的目的。 所以回归分析需要完成三个使命,首先是识别重要变量,其次是判断正负相关,最后是估计…

【大数据知识】大数据平台和数据中台的定义、区别以及联系

数据行业有太多数据名词,例如大数据、大数据平台、数据中台、数据仓库等等。但大家很容易混淆,也很容易产生疑问,今天我们就来简单聊聊大数据平台和数据中台的定义、区别以及联系。 大数据平台和数据中台的定义 大数据平台:一个…

Gradio入门(1)输入输出、表格、文本高亮

本文将会介绍gradio的入门使用,并结合大模型(LLM),给出三个使用例子。   Gradio 是通过友好的 Web 界面演示机器学习模型的最快方式,以便任何人都可以在任何地方使用它。其官网网址为:https://www.gradio…

手写一个简单爬虫--手刃豆瓣top250排行榜

#拿到页面面源代码 request #通过re来提取想要的有效信息 re import requests import re url"https://movie.douban.com/top250"headers{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/11…