加州酒店
加州酒店
灵感来自跟踪
和otel-cli公司
,一对用于跟踪shell脚本的实用程序。我们需要这样的东西来检测本地构建,这样我们才能了解人们在等待构建、测试等方面花费了多少时间。
用法
二进制名称为酒店
.目前,唯一支持的命令是执行官
$酒店高管——帮助用法:酒店高管[-s|--span-name span_name][-i |--设置sigint-status SPAN_status][-a|--属性KEY=VALUE]。。。(命令[参数]…|--shell脚本)在启用跟踪的情况下执行给定命令可用选项:-h、 --help显示此帮助文本-s、 --span-name span_name程序报告的span的名称。由默认情况下,这是您传入的脚本。-i、 --设置信号状态SPAN_status进程被终止时报告的状态信号。-a、 --attribute KEY=VALUE要添加到范围的字符串属性。--shell SCRIPT运行任意shell脚本,而不是运行可执行命令
目前,程序仅在环境变量中查找配置。
OTEL_EXPORTER_OTLP_ENDPOINT(终点)
(默认为本地主机:4317
)
OTEL_服务_名称
OTEL_EXPORTER_OTLP_标题
备注_资源_属性
- 可能还有其他人,请参阅
hs-opentelemetry-sdk型
了解更多信息
背景/常见问题解答
Lol名字怎么了
嗯otel-cli公司
是该工具的好名字。但这是一个Haskell实现,所以我需要一个小时
在那里的某个地方。hotel-cli酒店
听起来不错。但是等等。。。克莱
…我还能用它做什么?啊哈!
对不起的
与的差异跟踪
这个跟踪
工具具有以下基本工作流:
$TRACE_PARENT=$(跟踪开始“构建”)$make构建$trace完成
当你打电话时跟踪开始“trace-name”
,它生成一个跟踪ID
和跨度Id
并将其记录到临时目录中的文件中。文件名包含跟踪ID和范围ID。该文件包含跟踪的名称、开始时间以及您提供的任何其他元数据。
当你打电话时迹线光洁度
,工具将查找跟踪_家长
环境变量。然后它会在$TMP/记录道/状态
与跟踪_家长
.它加载文件,创建一个跨度
使用文件中给定的时间戳,然后调用跨度。终点
.然后,该工具发出网络请求以报告此数据。
问题
该工具允许您启动组并运行将生成单个跨度的命令,从而了解整体跟踪。跟踪组开始
类似于跟踪开始时间
-它创建一个新的跨度ID,将其附加到父跨度,并将其写入临时目录。跟踪任务
做一些更地道的事情-它创建了一个跨度
,运行您提供的命令,然后执行跨度.结束
.跟踪组完成
类似于迹线光洁度
-它加载组的父跨度信息,创建一个跨度
、和呼叫跨度。终点
从组中加载时间戳。
我做的玩具示例如下:
$TRACE_PARENT=$(跟踪开始“为什么”)\GROUP=$(跟踪组开始“why-1”)\跟踪任务“$GROUP”——开始构建\跟踪组完成“$group”\迹线光洁度
据蜂巢公司称,这需要170ms的时间开始构建
,然后再花费650毫秒来完成整个过程-为什么-1
小组赛加时约370毫秒,然后是决赛迹线光洁度
呼叫又增加了300米。
对于工具的明显意图(检测CI构建)来说,这种性能影响可能不是很大,但对于我的工具的意图-检测本地开发人员工作流。300米是重要的,但如果发生一次也不可怕。然而,我们想记录的每一步都会发生这种情况吗?这是一个问题。
现成的解决方案是使用机器本地的OpenTelemetry收集器,可以在后台定期报告跨度。这是一个额外的部署步骤,所以如果可能的话,最好避免这样做。
嵌套
API要求您以这种方式工作:
$TRACE_PARENT=$(跟踪开始“my-TRACE”)$OUTER_GROUP=$(跟踪组以“整洁”开头)$INNER_GROUP=$(跟踪组开始“整洁”“$OUTER_GROOP”)$trace任务“$INNER_GROUP”--生成$trace group完成“$INNER_group”$trace group完成“$OUTER_group”$trace完成
所以你什么时候都可以跟踪开始时间
,则为父跨度创建标识符。但你什么时候都可以跟踪组完成
,您可以查找相关的父spanID,然后实际创造一子跨度.
这使得创建span很困难,只需“知道”您是否在根目录中。为了提供一个可组合的接口,您需要这样做:shell脚本调用其他可以记录跨度的shell脚本。
与的差异otel-cli公司
好,otel-cli公司
解决了上述大多数问题。主要入口点是otel-cli执行官
,它为您运行命令,并报告其跨度。你可以筑巢otel-cli执行
任意调用,效果很好。然而,它也有一些问题,其中最具挑战性的是围绕信号的错误。我根本弄不清Golang中信号周围的行为,所有可用的互联网建议都没有什么帮助。然后我决定用钉子钉出这个工具。