使用 Grafana Tempo 入门 和 标签会被保留,以及其他 HTML 标签。

让我们学习Grafana Tempo的基础知识,这是一个分布式跟踪后端。

分布式跟踪是获得关于系统性能的细粒度信息的方法。它是一种可视化请求通过应用程序的生命周期的方法。该应用程序可能由单个节点上的多个服务或分布在节点上组成。

因此,通过使用分布式跟踪,您可以获得所有服务的综合视图。而Grafana Tempo就是关于这一点的。

Grafana Tempo是什么?

今年的ObservabilityCon会议上,Grafana Labs进行了一些重大更新,Grafana Tempo就是其中之一。Grafana Labs在其开源组合中添加了另一个项目“Grafana Tempo”。

Tempe是一个高度可扩展且易于使用的开源分布式跟踪后端。它完全兼容其他跟踪协议,如Zipkin、Jaeger、OpenTelemetry和OpenCensus。目前,它支持在Loki中使用Tempo数据发现引擎,监控平台如X、Y、Z和Grafana 7.3+提供了Grafana和Tempo之间的无缝体验。

为什么使用Tempo?

Tempo用于关联度量、跟踪和日志。有些情况下,用户会多次遇到同类型的错误。如果我想要了解发生了什么,我需要查看确切的跟踪。但由于降采样,我可能正在寻找的一些有价值的信息可能已经丢失。现在,使用Tempo,我们不需要对分布式跟踪数据进行降采样。我们可以将完整的跟踪存储在类似S3或GCS的存储中,使Tempo非常具有成本效益。

此外,Tempo还可以通过快速让您从指标转到已记录某些问题的特定日志的相关跟踪,实现更快的调试/故障排除。

以下是Tempo中使用的配置选项。

  • 分发器:用于配置接收选项,以接收跨度,然后将其发送到摄取器。
  • 摄取器:用于创建跟踪批次并将其发送到TempoDB进行存储。
  • 压缩机:从存储(如S3或GCS)流式传输块,将它们组合并将它们写回存储。
  • 存储:用于配置TempoDB。您需要在此配置中指定存储后端名称(S3或GCS)以及其他参数。
  • 成员列表:用于协调Tempo组件之间的操作。
  • 身份验证/服务器:Tempo使用Weaveworks/Common服务器。它用于设置服务器配置。

Tempo架构

上图显示了Grafana Tempo的工作架构。

首先,分发器以不同的格式从Zipkin、Jaeger、OpenTelemetry、OpenCensus接收跨度,并通过散列跟踪ID将这些跨度发送到摄取器。然后,摄取器创建称为块的跟踪批次。

然后,它将这些块发送到后端存储(S3/GCS)。当您有一个要进行故障排除的跟踪ID时,您将使用Grafana UI并将跟踪ID放入搜索栏中。现在查询器负责从摄取器或对象存储中获取有关您输入的跟踪ID的详细信息。

首先,它检查该跟踪ID是否存在于摄取器中;如果没有找到,则检查存储后端。它使用简单的HTTP端点来公开跟踪。同时,压缩器从存储中获取块,将它们组合并将它们发送回存储,以减少存储中的块数。

使用Docker设置Tempo

在本节中,我将逐步设置Grafana Tempo使用Docker。首先,您需要一个Tempo后端,因此设置一个docker网络。

[yaoweibin@yaoweibin ~]$ docker network create docker-tempo

下载Tempo配置文件。

[yaoweibin@yaoweibin ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml

以下是您可以获得的协议选项列表:

协议 端口
Open Telemetry 55680
Jaeger – Thrift Compact 6831
Jaeger – Thrift Binary 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

使用tempo配置文件,运行一个docker容器。这里我选择链接_5 – Thrift Compact格式(端口6831)发送跟踪。

[yaoweibin@yaoweibin ~]$ docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yaml

现在您需要运行一个Tempo查询容器。首先,下载Tempo查询配置文件。

[yaoweibin@yaoweibin ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

使用Tempo查询配置文件,运行一个docker容器。

[yaoweibin@yaoweibin ~]$ docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml

现在Jaeger UI将在http://localhost:16686上可访问,如下所示。

在搜索栏中,您可以添加要排查的日志的跟踪ID,它将为您生成跟踪。

在Tempo上运行演示应用程序

现在是时候运行Grafana Tempo提供的演示示例了。我将运行一个docker-compose示例,所以如果您也在尝试同样的操作,您的机器上必须安装docker-compose。

下载Grafana Tempo压缩文件:https://github.com/grafana/tempo

将其解压到主文件夹并进入docker-compose目录。您将会找到多个docker-compose示例;我将使用一个将应用程序数据存储在本地的示例。

[yaoweibin@yaoweibin ~]$ cd tempo-master/example/docker-compose/
[yaoweibin@yaoweibin docker-compose]$ ls
docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc
example-data readme.md tempo-link.png

运行下面的命令启动堆栈。

[yaoweibin@yaoweibin docker-compose]$ docker-compose up -d
Starting docker-compose_prometheus_1 ... done
Starting docker-compose_tempo_1 ... done
Starting docker-compose_grafana_1 ... done
Starting docker-compose_tempo-query_1 ... done
Starting docker-compose_synthetic-load-generator_1 ... done

您可以看到,它已经启动了Grafana、Loki、Tempo、Tempo-query和Prometheus的容器。

[yaoweibin@yaoweibin docker-compose]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
84cd557ce07b grafana/tempo-query:latest “/go/bin/query-linux…” 10分钟前 Up 4秒钟 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1
f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 “./start.sh” 10分钟前 Up 4秒钟 docker-compose_synthetic-load-generator_1
6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 “/run.sh” 10分钟前 Up 6秒钟 0.0.0.0:3000->3000/tcp docker-compose_grafana_1
d8574ea25028 grafana/tempo:latest “/tempo -config.file…” 10分钟前 Up 6秒钟 0.0.0.0:49173->3100/tcp, 0.0.0.0:49172->14268/tcp docker-compose_tempo_1
5f9e53b5a09c prom/prometheus:latest “/bin/prometheus –c…” 10分钟前 Up 6秒钟 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1

您也可以在浏览器中验证Grafana、Jaeger UI、Prometheus是否正在运行。

现在运行在容器中的合成负载生成器正在生成放入tempo中的跟踪ID。运行下面的命令,您可以查看日志。

[yaoweibin@yaoweibin docker-compose]$ docker-compose logs -f synthetic-load-generator
Attaching to docker-compose_synthetic-load-generator_1
synthetic-load-generator_1 
| using params: 
--jaegerCollectorUrl http://tempo:14268
synthetic-load-generator_1 
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr
synthetic-load-generator_1 
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr
synthetic-load-generator_1 
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr
synthetic-load-generator_1 
| 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency
synthetic-load-generator_1 
| 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping
synthetic-load-generator_1 

这些是您需要传递以生成跟踪的跟踪ID。

我正在复制其中一个跟踪ID并将其放入Jaeger UI搜索栏。

您可以看到它成功生成了与我提供的跟踪ID相关的跟踪。

结论

这就是关于Grafana Tempo的全部内容。继续使用Tempo生成跟踪,以深入了解您的应用程序中的指标和问题。

Tempo会捕捉到一切,您不会因为以前发生的降采样而错过任何细节。对于开发人员或生产团队来说,Tempo很容易理解日志中可能发生的错误或警告的根本原因。

类似文章