共计 2250 个字符,预计需要花费 6 分钟才能阅读完成。
👉️URL: https://grafana.com/docs/temp…
📝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 系列文章
Grafana 系列文章
三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.