变量 Variable
有时,我们需要从已提供的数据源之外的地方查询变量,例如从某个 HTTP API。
在这种情况下,你需要发起一个 HTTP 请求,并解析返回的数据,以获取你想要的变量值。
在这篇文档中,我们将发起一个 HTTP 请求,从 Jaeger 中获取 frontend
服务的 operation
变量值。
在开始之前,你需要有一个运行中的 Jaeger 实例,参考 https://www.jaegertracing.io/ 了解更多信息。
我们将创建一个变量,用于从 jaeger http api 查询数据:
http://localhost:16686/api/services/frontend/operations
我们将使用 Jaeger 文档中创建的
service
变量,请确保它仍然存在。
如下所示,填写变量基本信息:
大家应该有注意到,在 Query values
字段中,我们使用了 service
变量:
http://localhost:16686/api/services/${service}/operations
这意味着我们可以在 HTTP 请求 url 中使用变量。
在 Request transform
部分,我们可以设置 HTTP 请求的参数,例如 start time
,end time
等。
你不能在 function body
中使用变量格式 ${var1}
,但是你可以使用它的 variables
参数作为替代。
由于我们不需要任何参数,所以保持默认即可。
如果你查看
Request transform
函数,你应该看到它默认为你的请求添加了start
和end
参数。
这是 HTTP 数据源最重要的部分,我们需要解析响应数据,以获取我们想要的变量值,下面是 HTTP 数据源的返回格式:
{
"error": null,
"data": ['value1', 'value2']
}
而发起到 Jaeger 的 HTTP 请求返回格式如下:
{
"data": [
"/logproto.Querier/Label",
],
"total": 31,
"limit": 0,
"offset": 0,
"errors": null
}
因此我们需要对返回格式进行一下简单转换:
function transformResult(httpResult) {
return {
error: httpResult.errors,
data: httpResult.data
}
}
现在我们可以成功获取到 frontend
service 的 operation
变量值。
上面的代码很简单,原因只有一个: Jaeger 的 API 返回格式跟我们需要的几乎一致,但是大多数情况下,你都需要做一些额外的工作来确保数据格式被正确转换。
如上所示,由于我们在 http 请求的 url 中使用了 service
变量,因此当改变 service
变量值时,operation
变量的值也会随之变化,666.