前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Grafana系列文章-「译」Tempo-使用 HTTP 推送 Spans

Grafana系列文章-「译」Tempo-使用 HTTP 推送 Spans

作者头像
东风微鸣
发布2022-04-22 14:34:41
7090
发布2022-04-22 14:34:41
举报
文章被收录于专栏:东风微鸣技术博客

有时,使用追踪系统是令人生畏的,因为你似乎需要复杂的应用程序仪器或 span 摄取管道才能推送 span。本指南旨在展示一种极其基本的技术,即使用Zipkin[1]接收器,从Bash脚本中用http/json推送 span。

启动 Tempo

首先,让我们在配置好Zipkin接收器的情况下启动Tempo。为了做到这一点,要创建一个配置文件,像这样:

代码语言:javascript
复制
server:
  http_listen_port: 3200

distributor:
  receivers:
    zipkin:

storage:
  trace:
    backend: local
    local:
      path: /tmp/tempo/blocks

并且运行 Tempo:

代码语言:javascript
复制
docker run -p 9411:9411 -p 3200:3200 -v $(pwd)/config.yaml:/config.yaml grafana/tempo:latest -config.file /config.yaml

推送 Spans

现在Tempo正在运行,并且在9411端口监听Zipkin spans[2],让我们用curl推送一个span到它。

代码语言:javascript
复制
curl -X POST http://localhost:9411 -H 'Content-Type: application/json' -d '[{
 "id": "1234",
 "traceId": "0123456789abcdef",
 "timestamp": 1608239395286533,
 "duration": 100000,
 "name": "span from bash!",
 "tags": {
    "http.method": "GET",
    "http.path": "/api"
  },
  "localEndpoint": {
    "serviceName": "shell script"
  }
}]'

请注意,timestamp字段是以微秒为单位的,是通过运行date +%s%6N得到的。duration字段也是以微秒为单位,所以100000是100毫秒。

接收 Traces

获得追踪的最简单方法是对Tempo执行一个简单的curl命令。返回的格式是OTLP[3]。

代码语言:javascript
复制
curl http://localhost:3200/api/traces/0123456789abcdef | jq

{
  "batches": [
    {
      "resource": {
        "attributes": [
          {
            "key": "service.name",
            "value": {
              "stringValue": "shell script"
            }
          }
        ]
      },
      "instrumentationLibrarySpans": [
        {
          "spans": [
            {
              "traceId": "AAAAAAAAAAABI0VniavN7w==",
              "spanId": "AAAAAAAAEjQ=",
              "name": "span from bash!",
              "startTimeUnixNano": "1608239395286533000",
              "endTimeUnixNano": "1608239395386533000",
              "attributes": [
                {
                  "key": "http.path",
                  "value": {
                    "stringValue": "/api"
                  }
                },
                {
                  "key": "http.method",
                  "value": {
                    "stringValue": "GET"
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

然而,在bash中盯着一个json blob不是很有趣。让我们启动Tempo query ,这样我们就可以直观地看到我们的追踪。Tempo query是Jaeger Query[4]的一个GRPC Plugin[5],它可以用来查询Tempo。

代码语言:javascript
复制
docker run --env BACKEND=localhost:3200 --net host grafana/tempo-query:latest

并在你选择的浏览器中打开http://localhost:16686/trace/0123456789abcdef,以查看:

single span

更多 Spans

现在我们已经有了基本的东西,很容易继续建立我们的追踪。通过指定相同的 trace ID和一个parent span ID,我们可以开始建立一个追踪。

代码语言:javascript
复制
curl -X POST http://localhost:9411 -H 'Content-Type: application/json' -d '[{
 "id": "5678",
 "traceId": "0123456789abcdef",
 "parentId": "1234",
 "timestamp": 1608239395316533,
 "duration": 100000,
 "name": "child span from bash!",
  "localEndpoint": {
    "serviceName": "shell script"
  }
}]'

而现在,用户界面显示:

parent and child spans

Spans from everything!

追踪并不限于具有复杂框架的企业语言。正如你所看到的,从你的js、python或bash脚本中存储和追踪事件很容易。今天你可以使用Tempo/分布式追踪来追踪CI管道,长期运行的bash进程,python数据处理流程或任何你能想到的其他东西。

祝你追踪(tracing)成功!

References

[1] Zipkin: https://zipkin.io/ [2] Zipkin spans: https://zipkin.io/zipkin-api/#/default/post_spans [3] OTLP: https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/trace/v1/trace.proto [4] Jaeger Query: https://hub.docker.com/r/jaegertracing/jaeger-query/ [5] GRPC Plugin: https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc

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

本文分享自 东风微鸣技术博客 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 启动 Tempo
  • 推送 Spans
  • 接收 Traces
  • 更多 Spans
  • Spans from everything!
    • References
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档