Grafana 系列文章(三):Tempo-使用 HTTP 推送 Spans
️URL: https://grafana.com/docs/tempo/latest/api_docs/pushing-spans-with-http/
Description:
有时,使用追踪系统是令人生畏的,因为它似乎需要复杂的应用程序仪器或 span 摄取管道,以便 ...
有时,使用追踪系统是令人生畏的,因为你似乎需要复杂的应用程序仪器或 span 摄取管道才能推送 span。本指南旨在展示一种极其基本的技术,即使用 Zipkin 接收器,从 Bash 脚本中用 http/json 推送 span。
启动 Tempo
首先,让我们在配置好 Zipkin 接收器的情况下启动 Tempo。为了做到这一点,要创建一个配置文件,像这样:
server:
http_listen_port: 3200
distributor:
receivers:
zipkin:
storage:
trace:
backend: local
local:
path: /tmp/tempo/blocks
并且运行 Tempo:
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,让我们用curl推送一个 span 到它。
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。
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 的一个 GRPC Plugin,它可以用来查询 Tempo。
docker run --env BACKEND=localhost:3200 --net host grafana/tempo-query:latest
并在你选择的浏览器中打开http://localhost:16686/trace/0123456789abcdef,以查看:

更多 Spans
现在我们已经有了基本的东西,很容易继续建立我们的追踪。通过指定相同的 trace ID 和一个 parent span ID,我们可以开始建立一个追踪。
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"
}
}]'
而现在,用户界面显示:

Spans from everything
追踪并不限于具有复杂框架的企业语言。正如你所看到的,从你的 js、python 或 bash 脚本中存储和追踪事件很容易。今天你可以使用 Tempo/分布式追踪来追踪 CI 管道,长期运行的 bash 进程,python 数据处理流程或任何你能想到的其他东西。
祝你追踪 (tracing) 成功!
Grafana 系列文章
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Grafana 系列文章(三):Tempo-使用 HTTP 推送 Spans的更多相关文章
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式
1.概述 通过前两篇 史上最全面的SignalR系列教程-1.认识SignalR 史上最全面的SignalR系列教程-2.SignalR 实现推送功能-永久连接类实现方式 文章对SignalR的介绍, ...
- JVM系列文章(三):Class文件内容解析
作为一个程序猿,只知道怎么用是远远不够的.起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP. ...
- 史上最全面的SignalR系列教程-2、SignalR 实现推送功能-永久连接类实现方式
1.概述 通过上篇史上最全面的SignalR系列教程-1.认识SignalR文章的介绍,我们对SignalR技术已经有了一个全面的了解.本篇开始就通过SignalR的典型应用的实现方式做介绍,例子虽然 ...
- Redis变慢?深入浅出Redis性能诊断系列文章(三)
(本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第三篇,主要从Redis服务层 ...
- NHibernate系列文章三:简单的增删改查询
摘要 上一篇文章只完成了简单的NHibernate安装.配置和连接数据库.这篇文章介绍怎样实现最简单的数据库读写操作. 1. 重构ISessionFactory生成过程 将生成ISessionFact ...
- Hadoop 系列文章(三) 配置部署启动YARN及在YARN上运行MapReduce程序
这篇文章里我们将用配置 YARN,在 YARN 上运行 MapReduce. 1.修改 yarn-env.sh 环境变量里的 JAVA_HOME 路径 [bamboo@hadoop-senior ha ...
- 《神经网络和深度学习》系列文章三:sigmoid神经元
出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐伟 ...
- 微设计(www.weidesigner.com)介绍系列文章(三)
微设计(www.weidesigner.com)是一个专门针对微信公众账号提供营销推广服务而打造的第三方平台. 3.1 优惠券 优惠券是用于微信上与顾客互动的一种营销方式,不仅能够展现自己的产品,更能 ...
- Python爬虫系列 - 初探:爬取新闻推送
Get发送内容格式 Get方式主要需要发送headers.url.cookies.params等部分的内容. t = requests.get(url, headers = header, param ...
随机推荐
- 推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能
项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4622139?contributionType=1 fork一下,由于内容过多这里就不全 ...
- git 多个commit 如何合并
git 多个commit 如何合并 本篇主要介绍一下 git 中多个commit 如何合并, 因为commit 太多 会导致提交记录混乱, 所以有时候会把多个commit 合并成一个 保持提交记录干净 ...
- SQL--Row_Number() over()的使用
1.语法 --over里面有两个参数 --partition by 用于分割区域 此参数可选 --order by 用于排序 此参数必有 row_number() over(partition by ...
- CH58X服务修改
在对ble系列应用时,很多时候拿手机充当主机.在使用ble 调试助手时常会用到write.read.notify等功能.有时可能会根据自己的需求对这些服务进行修改.下图是官方例程体现出的service ...
- 如何在CentOS7上搭建自己的GitLab仓库
序言 各位好啊,我是会编程的蜗牛,作为java开发者,在团队开发中,一般都是需要使用git及git仓库来管理我们的代码的,这非常方便.我以前在小公司的时候,基本都是一个人开发一个项目,所以也没有怎么接 ...
- 打不开 github 的方法与推荐基于Vue3与Element plus的后台管理系统
一.打不开 github 的方法 1.打开本机 hosts 文件(C:\Windows\System32\drivers\etc) 2.然后在 hosts 文件里的末尾放入一下两个 IP 地址: # ...
- mysql忽略大小写配置
#更改配置文件:vim /etc/my.cnf#添加此行在[mysqld]下lower_case_table_names=1#重启服务systemctl restart mysqld
- 第2-3-4章 上传附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 5.3 接口开发-上传附件 5.3.1 接口文档 5.3.2 代码实现 5.3.3 接口测试 5.3 接口开发-上传附件 第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令 第 ...
- 关于 python3 中的多线程的问题及理解
什么是 join() ? join() 有什么用? 答:join() 有一个参数是timeout 设置超时,这里的超时都是针对主线程的,当子线程设置为 join(1) 后,则主线程会等待这个线程 1 ...
- Maven工程提示 java:源值1.5已过时,将在未来所有发行版中删除 出现原因及解决方案(亲测好用)
原因:Maven工程默认使用Java1.5进行编译,想要不警告,需要在maven的pom文件中进行配置,同时在settings中进行配置 解决方案: <properties> <me ...