暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Grafana全家桶(三)使用Grafana Agent与Tempo实现链路追踪完整demo

栋总侃技术 2023-10-21
844

上一节我们已经成功的部署了分布式Tempo后端服务,这一节将通过Grafana Agent与一个集成了opentelemetry SDK的Go程序Demo实现Trace的数据打通,并在grafana上查看trace调用链路。

Grafana Agent介绍

上一节部署的Tempo服务是可以直接通过Tempo-distributor组件或者使用TempoGateWay直接接收Trace数据的,是无需部署Grafana Agent组件的。

考虑到生产实践中,Tempo作为基础组件一般与业务服务集群分开部署,部署在单独的集群,为各个业务集群提供Trace存储服务,所以考虑在各集群内部部署Grafana Agent,业务服务产生的Trace数据发送至Grafana Agent,由Grafana Agent根据配置的策略统一发送至Tempo服务端,如图:


Grafana Agent为Grafana Labs开源的一款Agent,用于数据采集。而采集的数据除了上述的Trace数据以外,也支持Logs、Metrics数据,对Logs、Metrics的采集在后续章节介绍Grafana生态对日志、监控的支持时再详细讲解。

Grafana Agent部署

Grafana Agent代码仓库提供了其Helm部署的Chart,只需要配置Grafana Agent的输入和输出配置。

其中输入配置otelcol.receiver.otlp"xxx"
表示支持接收数据的方式。这里的配置表示通过4317(默认的GRPC端口)端口接收Grpc数据,4318(默认的HTTP端口)端口接收http数据。

  configMap:
    content: |-
      otelcol.receiver.otlp "default" {
       grpc {
        endpoint = "0.0.0.0:4317"
       }

       http {
        endpoint = "0.0.0.0:4318"
       }

       output {
        traces  = [otelcol.processor.batch.default.input]
       }
      }

      otelcol.processor.batch "default" {
       timeout = "200ms"
       send_batch_size = 8192

       output {
        traces  = [otelcol.exporter.otlp.default.input]
       }
      }


      otelcol.exporter.otlp "default" {
       client {
        endpoint = "ip:4317"
        tls {
         insecure             = true
         insecure_skip_verify = true
        }
       }
      }

在中配置的otelcol.exporter.otlp "default" 地址为Tempo接收服务的地址,如果后端需要通过Http方式接收数据也可以配置为

otelcol.exporter.otlphttp"default" {
 client {
  endpoint = "ip:port"

  tls {
   insecure             = true
   insecure_skip_verify = true
  }
 }
}

client.point为上一章节中Tempo-distributor的地址或者Tempo-Gateway的访问地址。

关于Grafana-agent的其他配置可以参考官方文档:https://grafana.com/docs/agent/latest/flow/reference/components/

Grafana配置Tempo数据源

添加数据源页面选择Tempo类型

配置数据源名称、查询地址

配置prometheus数据源

需要先将Tempo remotewrite的Prometheus先配置为Prometheus类型数据源后开启serviceGraph且选择对应的prometheus数据源,


Trace Demo验证

demo是使用Go集成opentelemetry的SDK,以及使用go.opentelemetry.io/contrib/instrumentation提供的Gin、Gorm、go-redis封装库模拟微服务间调用、Mysql请求、Redis操作来展示Trace和各Span的关系。

有关Go集成opentelemetry SDK的代码在后续章节单独讲解,就不在这里详细阐述了。

demo将部署三个服务分别为server1、server2、server3,之间的调用关系在后续将Trace数据发送至Tempo后,可以在Grafana中展示查看。

Grafana查看Trace

访问Grafana的探索(Explore)页面

选择需要查看的服务查看上报的Trace列表

点击Trace ID 查看Trace的Span详情

点击service Graph可以查看服务的调用关系图谱,以及各调用的平均请求延时、成功率等。


到这里我们已经搭建完整的demo环境,完成了服务的链路跟踪接入Tempo,以及在Grafana查看链路跟踪信息。下一章节将会带来Go应用是如何集成OpenTelemetry SDK的?

往期回顾:

Grafana全家桶(二)链路跟踪Grafana Tempo的介绍和部署

Grafana全家桶(一)Grafana Labs产品介绍


文章转载自栋总侃技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论