前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Grafana Tempo 初体验

Grafana Tempo 初体验

作者头像
我是阳明
发布2020-11-03 16:14:16
4.1K0
发布2020-11-03 16:14:16
举报
文章被收录于专栏:k8s技术圈

前面我们介绍了 Grafana 开源了一个权限的分布式追踪系统 Tempo,虽然现在项目还在初期阶段,文档也不是很健全,但是 Grafana 描述的一站式分布式追踪平台还是非常有吸引力的。这里面我们用一个简单的示例来了解下 Grafana 是如何整合可观测性工具的。

首先我们要安装 Loki 的 Docker 驱动,这样可以将 docker-compose 中的应用程序日志发送到 Loki。

代码语言:javascript
复制
$ docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
latest: Pulling from grafana/loki-docker-driver
e497c57a86bd: Download complete
Digest: sha256:332ae553f11a08c379ae7fff95da1700818272fbb1c32aaf60eefea9bf5123e1
Status: Downloaded newer image for grafana/loki-docker-driver:latest
Installed plugin grafana/loki-docker-driver:latest
$ docker plugin ls
ID                  NAME                DESCRIPTION           ENABLED
c89eab5ba164        loki:latest         Loki Logging Driver   true

接下来克隆 tempo 的代码,进入到 examples 目录下面,该目录下面有很多测试样例:

代码语言:javascript
复制
$ git clone https://github.com/grafana/tempo.git
$ cd tempo/example/docker-compose

为了快速测试,这里我们使用 docker-compose 的方式来启动 Loki stack 的相关应用,启动的资源清单文件如下所示:

代码语言:javascript
复制
version: "2"
services:

  tempo:
    image: grafana/tempo:latest
    command:
      - "-storage.trace.backend=local"                  # 告诉 tempo 使用本地存储存放 traces 数据
      - "-storage.trace.local.path=/tmp/tempo/traces"
      - "-storage.trace.wal.path=/tmp/tempo/wal"        # 存放 wal 路径
      - "-auth.enabled=false"                           # disables the requirement for the X-Scope-OrgID header
      - "-server.http-listen-port=3100"
    volumes:
      - ./tempo.yaml:/etc/tempo.yaml
      - /tmp/tempo:/tmp/tempo
    ports:
      - "14268"  # jaeger ingest
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'

  tempo-query:
    image: grafana/tempo-query:latest
    command: ["--grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml"]
    volumes:
      - ./tempo-query.yaml:/etc/tempo-query.yaml
    ports:
      - "16686:16686"  # jaeger-ui
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yaml:/etc/prometheus.yaml
    entrypoint:
      - /bin/prometheus
      - --config.file=/etc/prometheus.yaml
    ports:
      - "9090:9090"
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'

  grafana:
    image: grafana/grafana:7.3.0-beta1
    volumes:
      - ./datasources:/etc/grafana/provisioning/datasources
      - ./dashboards-provisioning:/etc/grafana/provisioning/dashboards
      - ../../operations/tempo-mixin/out:/var/lib/grafana/dashboards
    environment:
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_DISABLE_LOGIN_FORM=true
    ports:
      - "3000:3000"
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'

  loki:
    image: grafana/loki:1.6.1
    command: -config.file=/etc/loki/local-config.yaml
    ports:
      - "3100:3100"                                   # loki needs to be exposed so it receives logs
    environment:
      - JAEGER_AGENT_HOST=tempo
      - JAEGER_ENDPOINT=http://tempo:14268/api/traces # send traces to Tempo
      - JAEGER_SAMPLER_TYPE=const
      - JAEGER_SAMPLER_PARAM=1
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'

整个资源清单文件中我们配置了 tempo、prometheus、grafana、loki 几个应用,tempo 支持 local、S3 或者 GCS 后端存储,examples 目录下面都有对应的测试文件,这里我们可以看到 tempo 使用的是 local 本地存储,直接使用下面的命令启动即可:

代码语言:javascript
复制
$ docker-compose -f docker-compose.loki.yaml up -d
......
Creating docker-compose_loki_1        ... done
Creating docker-compose_tempo-query_1 ... done
Creating docker-compose_grafana_1     ... done
Creating docker-compose_prometheus_1  ... done
Creating docker-compose_tempo_1       ... done
$ docker-compose ps
            Name                          Command               State            Ports
------------------------------------------------------------------------------------------------
docker-compose_grafana_1       /run.sh                          Up      0.0.0.0:3000->3000/tcp
docker-compose_prometheus_1    /bin/prometheus --config.f ...   Up      0.0.0.0:9090->9090/tcp
docker-compose_tempo-query_1   /go/bin/query-linux --grpc ...   Up      0.0.0.0:16686->16686/tcp
docker-compose_tempo_1         /tempo -storage.trace.back ...   Up      0.0.0.0:32768->14268/tcp

启动完成后我们可以在浏览器中打开 Grafana,在 Loki 中使用命令 {container_name="docker-compose_loki_1"} 查询几次,这样可以生成一些 traces 数据。

接下来让我们来执行一个专门查询一些 trace ids 的查询,在操作的时候通常会使用 Loki 来搜索类似于查询路径或状态码之类的数据,这里我们只是简单演示,使用命令 {container_name="docker-compose_loki_1"} |= "traceID" 查询即可。

然后我们展开某条日志数据,在属性列表中找到 TraceID。

点击后面的 Tempo 链接,我们就可以直接从日志跳转到 Trace 页面去了!

默认情况下会分屏显示 Loki 日志和 Trace 信息,在右侧就是 Tempo 为我们展示的该 TraceID 的相关跟踪信息,这样我们也完全可以根据我们的追踪信息来了解某次请求的具体情况了。

除了日志和 Trace 数据外,我们还可以直接在 Grafana 里面查询 Prometheus 的监控指标数据。

整个应用的可观测性日志、Trace、监控都完美的集成到了 Grafana 中来,形成了一站式可观测性平台,而且这些数据之间还可以进行联动,大大提高了我们观测应用的效率,这才是观测该有的样子吧,所以你还在以为 Grafana 只是一个图表工具吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 k8s技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档