本文介紹 ARMS 與 Grafana Tempo 的相容性資訊,包括相容原理、相容的 Tempo HTTP API 和 TraceQL 等。
相容原理
Grafana Tempo 是一個開源的分布式追蹤後端儲存系統,支援將 OpenTelemetry、Jaeger、Zipkin等多種協議 Trace 資料存放區到Object Storage Service中,並提供大規模分布式追蹤資料的高效能查詢服務。
ARMS 所提供的 Grafana HTTP Tempo 相容介面,其相容機制是將 TraceQL 查詢翻譯為Log Service的索引查詢和 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 資料所屬地區對應的Log Service訪問網域名稱。更多資訊,請參見服務入口。
當前已支援地區:
地區名稱 | 地區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/*"
}
]
}