ARMS与Grafana Tempo的兼容性
本文介绍 ARMS 与 Grafana Tempo 的兼容性信息,包括兼容原理、兼容的 Tempo HTTP API 和 TraceQL 等。
兼容原理
Grafana Tempo 是一个开源的分布式追踪后端存储系统,支持将 OpenTelemetry、Jaeger、Zipkin等多种协议 Trace 数据存储到对象存储中,并提供大规模分布式追踪数据的高性能查询服务。
ARMS 所提供的 Grafana HTTP Tempo 兼容接口,其兼容机制是将 TraceQL 查询翻译为日志服务的索引查询和 SQL 分析查询,并且按照 Tempo HTTP API 格式规范返回查询分析结果,从而实现 Tempo 查询协议的兼容。
Temop 兼容 API 访问域名
Temop兼容API的访问域名格式为 https://${sls-endpoint}/trace/tempo/
,例如 https://cn-hangzhou.log.aliyuncs.com/trace/tempo
。其中${sls-endpoint}
为 Trace 数据所属区域对应的日志服务访问域名。更多信息,请参见服务入口。
当前已支持区域:
地域名称 | 地域ID |
杭州 | cn-hangzhou |
北京 | cn-beijing |
乌兰察布 | cn-wulanchabu |
河源 | cn-heyuan |
新加坡 | ap-southeast-1 |
支持的 Tempo API
请求方法 | API路径 | 说明 |
GET | /api/traces/<traceID> | 查询 Trace 详情。 |
GET | /api/v2/traces/<traceID> | 查询 Trace 详情(V2 版本接口)。 |
GET | /api/search | 查询 Trace 列表。 |
GET | /api/search/tags | 查询 Tag。 |
GET | /api/v2/search/tags | 查询 Tag(V2 版本接口)。 |
GET | /api/search/tag/{tags}/values | 查询 Tag 值。 |
GET | /api/v2/search/tag/{tags}/values | 查询 Tag 值(V2 版本接口)。 |
GET | /ready | 是否已经准备好对外提供服务。 |
GET | /api/echo | 测试 Tempo 数据源是否正常工作。 |
支持兼容的 TraceQL 语法
支持兼容的关键字
类别 | 字段 | 说明 | 使用示例 |
Span | status | 状态。枚举值:
| status=ok |
statusMessage | 状态信息。 | statusMessage="404 NOT FOUND" | |
duration | Span 耗时。支持带单位,如果没有单位,默认 ns。示例:
| duration > 500ms | |
name | Span 名称,对应 ARMS 的 spanName。 | name="/components/api/v1/mall/product" | |
kind | Span 类型。枚举值:
| kind=server | |
spanId | Span 标识符。 | spanId=fe81595a906fe2a4 | |
Trace | traceDuration | Trace 总耗时。 | traceDuration > 100ms |
traceId | Trace 标识符。 | traceId="ea1a0100f617397599186332534d0001" | |
Attribute |
| Span 属性,对应 ARMS 的 attributes。 | span.http.path="/api/search" |
Resource |
| 资源属性,对应 ARMS 的 resources。 | resource.namespace="arms" |
Unscoped Attribute |
| 无作用域属性,对应 ARMS 的 attributes 或 resources。 | .db.statement="select * from log" |
支持兼容的操作符
类别 | 运算符 | 说明 | 示例 |
Span 选择器 | {expression} | 表达式需要写在 | {status=ok} |
比较运算符 | = | 等于 | {name="/components/api/v1/mall/product"} |
!= | 不等于 | {resource.service.name!="mall-gateway"} | |
=~ | 正则匹配 | {resource.service.name=~"mall-gateway|mall-client"} | |
!~ | 正则不匹配 | {service!~"mall-gateway|mall-client"} | |
> | 大于 | {duration>500ms} | |
>= | 大于等于 | {duration>=500ms} | |
< | 小于 | {duration<1s} | |
<= | 小于等于 | {duration<=1s} | |
逻辑运算符 | {condA && condB} | 与 | { span.http.status_code >= 200 && span.http.status_code < 300 } |
{condA || condB} | 或 | {name="/components/api/v1/mall/product" || resource.service.name="mall-gateway"} |
RAM授权
您可以使用如下权限策略授予 RAM 用户使用 Grafana Tempo 兼容 API 进行查询的权限。
系统权限策略:操作简单。
自定义权限策略:权限精细,配置复杂。
极简授权
您可以通过系统权限策略授予RAM用户使用 Tempo 兼容API查询的权限。具体操作,请参见为RAM用户授权。
系统权限策略名称 | 查询权限 | 写入权限 |
AliyunLogFullAccess | Yes | Yes |
AliyunLogReadOnlyAccess | Yes | No |
自定义权限策略
您可以通过自定义权限策略授予 RAM 用户使用 Tempo 兼容 API 查询的权限。具体操作,请参见创建自定义权限策略、为RAM用户授权。
授予RAM用户使用 Tempo 兼容API查询数据的权限。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:GetIndex",
"log:GetLogStoreContextLogs",
"log:ListLogStores",
"log:GetLogStoreHistogram",
"log:GetLogstoreLogs",
"log:GetLogStoreContextLogs",
"log:GetCursorOrData",
"log:GetLogstore"
],
"Resource": "acs:log:*:*:project/*"
}
]
}