このトピックでは、Application Real-Time Monitoring Service (ARMS) と Grafana Tempo の互換性について、互換性の原則、サポートされている Tempo HTTP API エンドポイント、および TraceQL を含めて概要を説明します。
互換性
Grafana Tempo は、OpenTelemetry、Jaeger、Zipkin などのプロトコルからのトレースデータを Object Storage Service (OSS) に保存するオープンソースの分散トレースバックエンドです。大規模な分散トレースデータに対して高性能なクエリサービスを提供します。
ARMS の Grafana Tempo 互換 HTTP API は、TraceQL クエリ構文を Simple Log Service のインデックスベースのクエリ構文と SQL 分析構文にマッピングします。その後、Simple Log Service は、Grafana Tempo の要件を満たす形式でクエリと分析結果を返します。
Tempo 互換 API エンドポイント
Tempo 互換 API のエンドポイントは https://${sls-endpoint}/trace/tempo/ 形式です。ここで、${sls-endpoint} は、トレースデータが配置されているリージョンの Simple Log Service エンドポイントを指定します。例: https://cn-hangzhou.log.aliyuncs.com/trace/tempo。
サポートされているリージョン:
リージョン | リージョン ID |
杭州 | cn-hangzhou |
北京 | cn-beijing |
ウランチャブ | cn-wulanchabu |
河源 | cn-heyuan |
シンガポール | ap-southeast-1 |
対応するエンドポイントについては、「エンドポイント」をご参照ください。
サポートされている Tempo 互換 API
次の表に、GET リクエストの API パスを示します。
API パス | 説明 |
/api/traces/<traceID> | トレースの詳細をクエリします。 |
/api/v2/traces/<traceID> | トレースの詳細をクエリします (Tempo API V2)。 |
/api/search | 検索条件でトレースを一覧表示します。 |
/api/search/tags | 使用可能なタグキーを取得します。 |
/api/v2/search/tags | 使用可能なタグキーを取得します (Tempo API V2)。 |
/api/search/tag/{tags}/values | タグ値をクエリします。 |
/api/v2/search/tag/{tags}/values | タグ値をクエリします (Tempo API V2)。 |
/ready | サービスの可用性を確認します。 |
/api/echo | Tempo データソースの接続性を検証します。 |
サポートされている TraceQL 構文
キーワード
カテゴリ | フィールド | 説明 | 例 |
Span | status | ステータス。有効な値:
| status=ok |
statusMessage | ステータスの説明。 | statusMessage="404 NOT FOUND" | |
duration | スパンの期間。単位を指定できます。指定しない場合、デフォルトの
| duration > 500 ms | |
name | スパン名。ARMS の | name="/components/api/v1/mall/product" | |
kind | スパンタイプ。有効な値:
| kind=server | |
spanId | スパン識別子。 | spanId=fe81595a906fe2a4 | |
Trace | traceDuration | トレースの合計期間。 | traceDuration > 100 ms |
traceId | トレース識別子。 | traceId="ea1a0100f617397599186332534d0001" | |
属性 |
| スパン属性。ARMS の | span.http.path="/api/search" |
リソース |
| リソース属性。ARMS の | resource.namespace="arms" |
スコープ外属性 |
| スコープ外属性。ARMS の | .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>500 ms} | |
>= | 以上 | {duration>=500 ms} | |
< | 未満 | {duration<1s} | |
<= | 以下 | {duration<=1s} | |
論理演算子 | {condA && condB} | AND | { span.http.status_code >= 200 && span.http.status_code < 300 } |
{condA || condB} | OR | {name="/components/api/v1/mall/product" || resource.service.name="mall-gateway"} |
RAM ユーザーに権限を付与する
次のいずれかの方法を使用して、RAM ユーザーに Tempo 互換 API を介してデータをクエリおよび書き込む権限を付与します。
シンプルモード: 簡単な設定
カスタムモード: きめ細かいアクセス制御が可能ですが、設定が複雑です
シンプルモード
システムポリシーを使用して、パラメータ設定を必要とせずにRAM ユーザーに必要な権限を付与します。
システムポリシーは次のとおりです。
システムポリシー | クエリ権限 | 書き込み権限 |
AliyunLogFullAccess | はい | はい |
AliyunLogReadOnlyAccess | はい | いいえ |
カスタムモード
カスタムポリシーを作成して、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/*"
}
]
}