【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 数据xxxxxingester:xxxxxcompactor:xxxxxmetrics_generator: # 配置的是 metrics 的数据往哪里发,主要就是写 promethus 的 URLregistry:external_labels:source: tempocluster: docker-composestorage:path: /tmp/tempo/generator/walremote_write:- url: http://promethus.ip:9090/api/v1/writesend_exemplars: truestorage:trace:backend: local                     # backend configuration to usewal:path: /tmp/tempo/wal             # where to store the the wal locallylocal:path: /tmp/tempo/blocksoverrides: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.1command: [ "-config.file=/etc/tempo.yaml" ]volumes:- ./tempo.yaml:/etc/tempo.yaml- ./tempo-data:/tmp/tempoports:- "14268:14268"  # jaeger ingest- "3200:3200"    # tempo- "9095:9095"    # tempo grpc- "4317:4317"    # otlp grpc- "4318:4318"    # otlp http- "9411:9411"    # zipkink6-tracing:image: ghcr.io/grafana/xk6-client-tracing:v0.0.2environment:- ENDPOINT=tempo:4317restart: alwaysdepends_on:- tempoprometheus:image: prom/prometheus:v2.46.0command:- --config.file=/etc/prometheus.yaml- --web.enable-remote-write-receiver- --enable-feature=exemplar-storagevolumes:- ./prometheus.yaml:/etc/prometheus.yamlports:- "9090:9090"grafana:image: grafana/grafana:10.1.0volumes:- ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yamlenvironment:- GF_FEATURE_TOGGLES_ENABLE=traceqlEditorports:- "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 里面有非常多可选项。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程 day 4

1、多进程并发服务器根据流程图重新编写 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.11…

渲染如何做到超强渲染?MAX插件CG MAGIC中的渲染功能!

渲染工作应该算是设计师的日常工作流程中最重要的环节之一了。如果渲染速度加快&#xff0c;可能是要看渲染技巧掌握的有多少了。 大家熟悉的3d Max本地渲染通道&#xff0c;对于CG MAGIC渲染功能你也一定不能错过&#xff0c;要知道操作简单易使用&#xff0c;就完全拿捏了效率…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

基于Thinkphp6框架全新UI的AI网址导航系统源码

2023全新UI的AI网址导航系统源码&#xff0c;基于thinkphp6框架开发的 AI 网址导航是一个非常实用的工具&#xff0c;它能够帮助用户方便地浏览和管理自己喜欢的网站。 相比于其他的 AI 网址导航&#xff0c;这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建&#xff0c;…

1. Spatial Intelligence of a Self-driving Car and Rule-Based Decision Making

主要内容 本文主要介绍了一些基于规则的方法&#xff0c;以实现自动驾驶规划技术在复杂车流中取得人类驾驶效果。因此此类场景更适合城市NOA。 当然本文在城市道路&#xff0c;封闭区域道路以及城际高速都适宜。主要技术点 &#xff08;1&#xff09;本文把自车周围车辆的决策…

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…

【STM32】学习笔记(OLED)-江科大

调试方式 OLED简介 硬件电路 驱动函数 OLED.H #ifndef __OLED_H #define __OLED_Hvoid OLED_Init(void); void OLED_Clear(void); void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); void OL…

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …

理论转换实践之keepalived+nginx实现HA

背景&#xff1a; keepalivednginx实现ha是网站和应用服务器常用的方法&#xff0c;之前项目中单独用nginx实现过负载均衡和服务转发&#xff0c;keepalived一直停留在理论节点&#xff0c;加之最近工作编写的一个技术文档用到keepalived&#xff0c;于是便有了下文。 服务组件…

使用Gitea自建仓库 并配置git上传

使用Gitea自建仓库 并配置git上传 使用 Docker 安装 | Gitea Documentation 1. 安装Docker 2. 使用Docker Compose快速安装 在安装目录下创建config 和 data两个文件夹 以下是我的配置&#xff0c;和官网提供的大差不差 version: "3"networks:gitea:external: …

论文阅读_医疗知识图谱_GraphCare

英文名称: GraphCare: Enhancing Healthcare Predictions with Open-World Personalized Knowledge Graphs 中文名称: GraphCare&#xff1a;通过开放世界的个性化知识图增强医疗保健预测 文章: http://arxiv.org/abs/2305.12788 代码: https://github.com/pat-jj/GraphCare 作…

uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置

目录 系列文章目录uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;1.新建项目2.托管项目的操作&#xff1a;&#xff08;无勾选托管项目可无视&#xff09;3.项目编译预览3.1游览器编译3.2微信…

以GitFlow分支模型为基准的Git版本分支管理流程

以GitFlow分支模型为基准的Git版本分支管理流程 文章目录 以GitFlow分支模型为基准的Git版本分支管理流程GitFlow分支模型中的主要概念GitFlow的分支管理流程图版本号说明借助插件Git Flow Integration Plus实现分支模型管理其他模型TBD模型阿里AoneFlow模型 GitFlow分支模型中…

2023-8-30 八数码(BFS)

题目链接&#xff1a;八数码 #include <iostream> #include <algorithm> #include <unordered_map> #include <queue>using namespace std;int bfs(string start) {string end "12345678x";queue<string> q;unordered_map<strin…

ATKck靶场系列二

信息收集 nmap -sP 192.168.111.0/24 nmap -sS -T4 -A -v -p- 192.168.111.80─# nmap -sS -T4 -A -v -p- 192.168.111.80 Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-29 01:46 EDT NSE: Loaded 155 scripts for scanning. NSE: Script Pre-scanning. Initiating NS…

el-date-picker 等 点击无反应不回显问题解决

如上图&#xff0c;编辑回显正常&#xff0c;但是时间控件在拖动过程中时间不会跟随改变。 解决办法&#xff1a; <el-date-picker input"onInput()" ...><el-input input"onInput()" ...>js中onInput() {this.$forceUpdate();},

弹窗、抽屉、页面跳转区别 | web交互入门

当用户点击或触发浏览页面的某个操作&#xff0c;有很多web交互方式&#xff0c;可以大致分为弹窗、抽屉、跳转新页面三种web交互方式。虽然这三种web交互方式看起来没什么不同&#xff0c;但实际上弹窗、抽屉、跳转新页面对交互体验有蛮大的影响。 这需要UI\UX设计师针对不同…

Redis与Mysql区别

一、关系型数据库 mysql&#xff0c;pgsql,oracle ,sqlserver 支持连表关联查询&#xff08;会有一些特定的语法特特性&#xff09; 二、非关系型数据库 redis,mongodb,memcache &#xff08;key-value&#xff09; 三、关系型数据库与非关系型数据库的区别&#xff1a; 1&am…

9个实用的交互设计软件,Get更简单的原型制作方式!

好用的原型图软件不仅可以快速可视化产品经理的想法&#xff0c;提高沟通效率&#xff0c;还可以加快测试进度&#xff0c;打造更真实的用户体验。今天本文为大家整理了9个好用的原型图工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 在设计场景中&#xff0c;即时设…