grafana tempo 分布式追踪框架学习试用

环境基于了官方的docker-compose demo

环境准备(基于docker-compose 运行)

  • docker-compose 文件
version: "3"
services:
  tempo:
    image: grafana/tempo:latest
    command: 
      - "-storage.trace.backend=local"                  # tell tempo where to permanently put traces
      - "-storage.trace.local.path=/tmp/tempo/traces"   
      - "-storage.trace.wal.path=/tmp/tempo/wal"        # tell tempo where to store the wal
      - "-auth.enabled=false"                           # disables the requirement for the X-Scope-OrgID header
      - "-server.http-listen-port=3100" 
    volumes:
      - ./example-data/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:
      - ./etc/tempo-query.yaml:/etc/tempo-query.yaml
    ports:
      - "16686:16686"  # jaeger-ui
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'
  minio:
    image: minio/minio
    environment:
      - MINIO_ACCESS_KEY=tempo
      - MINIO_SECRET_KEY=supersecret
    command:  minio server /data
    ports:
      - "9000:9000"
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./etc/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'
  synthetic-load-generator:
    image: omnition/synthetic-load-generator:1.0.25
    volumes:
      - ./etc/load-generator.json:/etc/load-generator.json
    environment:
      - TOPOLOGY_FILE=/etc/load-generator.json
      - JAEGER_COLLECTOR_URL=http://tempo:14268
  grafana:
    image: grafana/grafana:7.3.6
    volumes:
      - ./example-data/datasources:/etc/grafana/provisioning/datasources
      - ./example-data/dashboards-provisioning:/etc/grafana/provisioning/dashboard
    ports:
      - "3000:3000"
    logging:
      driver: loki
      options:
        loki-url: 'http://localhost:3100/api/prom/push'
  loki:
    image: grafana/loki:2.1.0
    command: -config.file=/etc/loki/local-config.yaml
    ports:
      - "3100:3100"                                
    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'
  • 依赖的组件说明
    依赖了loki,grafana,prometheus,synthetic-load-generator(生成metrics)
    tempo 包含的组件(engine,以及query),容器的日志基于了loki plugin,相关prometheus
    以及grafana datasource 还有dashboard 配置,参考github 配置

运行

  • 首先安装docker loki log plugin
 
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
  • 运行
docker-compose up -

效果

注意需要输入一个traceid,可以同loki 查找

说明

grafana 的tempo 是一个很不错的工具,至少目前来看比使用jaeger的技术原生方案至少会简化好多,当然tempo 也是在巨人的肩
膀上成长的,grafana 的agent 也是一个很不错的工具,集成了log,metrics,trace,好处是保证了各种元数据的一致

参考资料

https://github.com/rongfengliang/grafana-tempo-learning
https://github.com/grafana/tempo/tree/master/example/docker-compose

原文地址:https://www.cnblogs.com/rongfengliang/p/14242689.html