ARMS与Grafana Tempo的兼容性

更新时间: 2025-06-13 10:11:58

本文介绍 ARMS 与 Grafana Tempo 的兼容性信息,包括兼容原理、兼容的 Tempo HTTP API 和 TraceQL 等。

兼容原理

Grafana Tempo 是一个开源的分布式追踪后端存储系统,支持将 OpenTelemetry、Jaeger、Zipkin等多种协议 Trace 数据存储到对象存储中,并提供大规模分布式追踪数据的高性能查询服务。

ARMS 所提供的 Grafana HTTP Tempo 兼容接口,其兼容机制是将 TraceQL 查询翻译为日志服务的索引查询和 SQL 分析查询,并且按照 Tempo HTTP API 格式规范返回查询分析结果,从而实现 Tempo 查询协议的兼容。

image

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

状态。枚举值:

  • unset

  • ok

  • error

status=ok

statusMessage

状态信息。

statusMessage="404 NOT FOUND"

duration

Span 耗时。支持带单位,如果没有单位,默认 ns。示例:

  • 500

  • 10 ns

  • 500 ms

  • 12.88 s

  • 10.5 min

  • 1 h

duration > 500ms

name

Span 名称,对应 ARMS 的 spanName。

name="/components/api/v1/mall/product"

kind

Span 类型。枚举值:

  • unspecified

  • internal

  • server

  • client

  • producer

  • consumer

kind=server

spanId

Span 标识符。

spanId=fe81595a906fe2a4

Trace

traceDuration

Trace 总耗时。

traceDuration > 100ms

traceId

Trace 标识符。

traceId="ea1a0100f617397599186332534d0001"

Attribute

span.开头的字段,示例:

  • span.http.path

  • span.db.statement

Span 属性,对应 ARMS 的 attributes。

span.http.path="/api/search"

Resource

resource.开头的字段,示例:

  • resource.service.name

  • resource.namespace

  • resource.agentVersion

资源属性,对应 ARMS 的 resources。

resource.namespace="arms"

Unscoped Attribute

.开头的字段,示例:

  • .http.path

  • .db.statement

无作用域属性,对应 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/*"
        }
    ]
}
上一篇: 调用链分析 下一篇: 使用Grafana访问ARMS的Tempo兼容接口
阿里云首页 可观测链路 OpenTelemetry 版 相关技术圈