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 ...
随机推荐
- 聪明的暴力枚举求abcde/fghij=n
目录 前言 一.题目 二.暴力初解 三.优化再解(借鉴bitmap) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...
- cordon节点,drain驱逐节点,delete 节点
目录 一.系统环境 二.前言 三.cordon节点 3.1 cordon节点概览 3.2 cordon节点 3.3 uncordon节点 四.drain节点 4.1 drain节点概览 4.2 dra ...
- Node.js 的学习(四)分别连接MongoDB与MySQL数据库,实现增删查改功能
一.Node.js 访问MongoDB 数据库 MongoDB 对许多平台都提供驱动可以访问数据库,如C#.Java.Node.js等. 1.1.安装MongoDB访问驱动 命令如下: 全局安装驱动: ...
- [ PHP 内核与扩展开发系列] 内存管理 —— 引用计数
对于 PHP 这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错.另一方面,除了要安全申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千 ...
- Android Studio运行Failed to find Build Tools revision 30.0.3
问题 第一次安装好Android Studio2022.5的版本之后开启虚拟机运行文件报错提示 Failed to find Build Tools revision 30.0.3 打开SDK已经安装 ...
- .net core/5/6/7中WPF如何优雅的开始开发
WPF是微软的.net平台中的一个桌面客户端应用程序框架,经常用于企业开发windows桌面客户端,广泛应用于中小企业快速开发一款工具,本人也是比较喜欢利用WPF开发一些小工具. 目录 知名案例 .n ...
- 环境安装-Centos7.4安装及配置
环境安装-Centos7.4安装及配置 〇.资料汇总 一.虚拟机安装 1.下载地址 https://pan.baidu.com/s/1zcOp06HX4OxPdsCCGkHbXQ 提取码:7777 2 ...
- 4.5:HDFS操作实验
〇.概述 1.拓扑结构 2.目标 进行HDFS的实验,了解HDFS的基本操作. 一.常用操作 1.启动 50070 2.查看及创建 3.上传文件
- Zabbix6.0使用教程 (一)—zabbix新增功能介绍1
使用zabbix的小伙伴应该都有关注到目前zabbix的大版本已经更新到了6.0,后面乐乐将会对如何使用zabbix6.0做一个使用教程的系列,大家可以持续关注,这篇我们主要聊聊zabbix6.0新增 ...
- 连表操作join 子查询 SQL补充 数据库软件navicat pymysql模块
目录 多表查询的两种方法 方式1:连表操作 方式2:子查询 SQL补充知识点 1.分组之前字段拼接 concat concat_ws 2.SQL执行判断条件 exists 3.表相关SQL补充 修改表 ...