オープンフローの監視

このトピックでは、Openflow の状態を監視し、問題をトラブルシューティングする方法について説明します。

Openflow ログへのアクセス

Snowflakeは、 Openflowの設定 で構成したイベントテーブルにOpenflowログを送信します。

Snowflakeは、イベントテーブルクエリの WHERE 句にタイムスタンプを含めることを推奨します。さまざまなSnowflakeコンポーネントによって生成される潜在的データ量のため、これは特に重要です。フィルターを適用すると、より小さなデータのサブセットを取得することができ、クエリのパフォーマンスが向上します。

Openflowのテレメトリーをすぐに使い始めるには、以下の クエリ例 をご参照ください。

Openflowテレメトリースキーマ

イベントテーブル列については、 イベントテーブル列 をご参照ください。

次のセクションでは、Openflowがイベントテーブルでテレメトリーをどのように構成するかを説明します。

リソース属性

Openflowによって設定されたイベントメタデータについて説明します。他のタイプのリソース属性の一般情報については、イベントテーブル列のドキュメント RESOURCE_ATTRIBUTES 列 をご参照ください。

名前

説明

アプリケーション

String

固定値 openflow

cloud.service.provider

String

awsazuregcpspcs のいずれか

コンテナーID

String

コンテナの一意の識別子

container.image.name

String

コンテナイメージの完全修飾名。Openflowランタイムテナには、ローカルコンテナレジストリへのパスが含まれます。

例: $accountid.dkr.ecr.$region.amazonaws.com/snowflake-openflow/runtime-Server

container.image.tag

String

コンテナイメージのバージョン

k8s.container.name

String

K8sコンテナの名前。Openflowランタイムコンテナは「Runtime Key」で始まり、 -gateway または `-server`で終わります。

たとえば、Runtime KeyがPostgresql-cdcの「PostgreSQLCDC」という名前のOpenflowランタイムでは、コンテナ名は次のようになります。

  • postgresql-cdc-gateway

  • postgresql-cdc-server

k8s.container.restart_count

数値文字列

このコンテナが作成されてから再起動した回数。

k8s.namespace.name

String

ポッドまたはコンテナのK8s名前空間。Openflowランタイムの場合は runtime- で始まります。値には、 kube-system および openflow-runtime-infra も含まれます。

k8s.node.name

String

ポッド/コンテナをホストする EKS ノード、または EKS ノード自体の内部ドメイン名。

例:ip-10-12-13-144.us-west-2.compute.internal

k8s.pod.name

String

K8sポッドの名前。Openflowランタイムポッドは「Runtime Key」で始まり、各ポッドレプリカの数値識別子で終わります。この数は、ランタイムに設定された「最大ノード数」まで増やすことができます。インデックスは0です。

たとえば、Runtime Keyがpostgresql-cdcでノードが3つある、「PostgreSQLCDC」という名前のOpenflowランタイムでは、ポッド名は次のようになります。

  • postgresql-cdc-0

  • postgresql-cdc-1

  • postgresql-cdc-2

k8s.pod.start_time

ISO 8601日付文字列

ポッドが開始されたタイムスタンプ

k8s.pod.uid

UUID 文字列

クラスター内のポッドの一意の識別子

openflow.dataplane.id

UUID 文字列

Openflowデプロイメントの一意の識別子。Snowflake Openflow UI の「Deployment」 > 「詳細の表示」に表示される「ID」と一致します。

リソース属性の例:
{
  "application": "openflow",
  "cloud.service.provider": "aws",
  "k8s.container.name": "pg-dev-server",
  "k8s.container.restart_count": "0",
  "k8s.namespace.name": "runtime-pg-dev",
  "k8s.node.name": "ip-10-10-62-36.us-east-2.compute.internal",
  "k8s.pod.name": "pg-dev-0",
  "k8s.pod.start_time": "2025-04-25T22:14:29Z",
  "k8s.pod.uid": "94610175-1685-4c8f-b0a1-42898d1058e6",
  "k8s.statefulset.name": "pg-dev",
  "openflow.dataplane.id": "abeddb4f-95ae-45aa-95b1-b4752f30c64a"
}
Copy

範囲

名前

説明

name

String

メトリックのプロバイダー。次のいずれかです。

  • Openflowコネクタメトリックの場合は runtime

  • システムレベルのメトリックの場合は github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubetstatsreceiver

スコープの例:
{
  "name": "runtime"
}
Copy

記録の種類

この行が表すOpenflowテレメトリーのタイプに応じて、以下のいずれかになります。

  • LOG

  • METRIC

Openflowは TRACE 記録は収集しませんが、これはSnowflakeイベントテーブルのこの列の有効なタイプでもあります。

記録

オプション。この JSON オブジェクトは、この行が表すメトリックのタイプを記述します。

名前

説明

メトリック

オブジェクト

2つのフィールドが含まれます。

  • 名前 生成された一意のメトリックのため、通常はドット区切りの名前空間を使用

  • 単位 バイト、ナノ秒、スレッドなど、タイプによって表される値

名称と単位値は大きく異なります。完全なリストについては、以下の アプリケーションメトリック をご参照ください。

metric_type

String

次のいずれか:

  • ゲージ ほとんどのOpenflowメトリックの場合は、増減できるスナップショット値

  • 合計 ポッドなどの累積メトリック用 CPU 時間とネットワーク IO

value_type

String

このメトリックによって生成される値のプリミティブ型。次のいずれかです。

  • INT

  • DOUBLE

aggregation_temporality

String

オプション。ポッド CPU時間やネットワークIO など、以前の値に依存する厳密に増加するメトリックの場合は、累積に設定します。

is_monotonic

ブール値

オプション。累積メトリックの場合、これは時系列内で厳密に増加していることを示すため当てはまります。

記録例:
{
  "metric": {
    "name": "connection.queued.duration.max",
    "unit": "millisecond"
  },
  "metric_type": "gauge",
  "value_type": "INT"
}
Copy

記録属性

ログ

ログの記録属性は通常、このログのソースがどこであるかを示します。たとえば、testruntime という名前のOpenflowランタイムからのログは次の記録属性を持つ可能性があります:

{
  "log.file.path": "/var/log/pods/runtime-testruntime_testruntime-0_66d80cdb-9484-40a4-bdba-f92eb0af14c7/testruntime-server/0.log",
  "log.iostream": "stdout",
  "logtag": "F"
}
Copy

システムメトリック

CPU 使用率などのシステムメトリックは通常、記録属性を設定しないため、これは null になります。

Openflowアプリケーションメトリック

アプリケーションまたは「フロー」メトリックの記録属性は、メトリックを生成したデータパイプラインのコンポーネントに関する詳細を提供します。これはコンポーネントのタイプによって異なります。アプリケーションメトリック をご参照ください。

{
  "component": "PutSnowpipeStreaming",
  "execution.node": "ALL",
  "group.id": "c052f9d7-7f76-3013-a2c5-d3b064fa7326",
  "id": "c69e2913-22a9-36bb-a159-6a5ed1fb9d63",
  "name": "PutSnowpipeStreaming",
  "type": "processor"
}
Copy

この列には、テレメトリーの生の値が含まれます。メトリックの場合、これは数値(整数または倍精度)になります。ログの場合、これは半構造化された文字列値または適切にフォーマットされた JSON 文字列のいずれかです。

Openflowランタイムログ

Openflowランタイムはほとんどのログを JSON として出力するため、Snowflakeの TRY_PARSE_JSONVALUE 列に適用すると、この値をさらに次の構造化フィールドに分割できます。

名前

説明

formattedMessage

String

ランタイムロガーから出力された実際のログメッセージ。

レベル

String

次のいずれか:

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

loggerName

String

ロガーの完全修飾クラス名。Openflowプロセッサーは通常、 com.snowflake.openflow.runtime.processors で始まるロガー名を使用します。

これは、特定のプロセッサー、コントローラーサービス、バンドルライブラリのログを表示するのに便利です。

ナノ秒

Integer

このログメッセージが作成されたナノ秒レベルの時間(ミリ秒から始まる)。

たとえば、ナノ秒値111222333は、タイムスタンプ値1749180210111に対応し、ナノ秒の左端の3桁はタイムスタンプの右端の3桁と一致します。

threadName

String

この呼び出しを処理するスレッドの名前。例: Timer-Driven Process Thread-7

throwable

JSON オブジェクト

このログメッセージに例外またはスタックトレースがない場合、 null になります。そうでない場合は、スタックトレースを JSON フィールドを含む文字列としてログに記録します。

  • className- スローされた例外

  • message - 例外でログに記録されたメッセージ

  • stepArray - 次を含む、スタックトレースのメソッド呼び出しの配列。

    • className

    • fileName

    • lineNumber

    • methodName

タイムスタンプ

Integer

このログメッセージが作成された時刻。UNIX エポックからのミリ秒として表されます。

たとえば、1749180210044は、ログが2025-06-05 03:23:30.044 UTC に作成されたことを示します。

アプリケーションメトリック

注釈

次のリストは、Openflowランタイムで使用可能なすべてのアプリケーションメトリックをカバーしています。ランタイムは、Snowflakeイベントテーブルに永続化するためにOpenflowコネクタに関連するメトリックのサブセットのみを出力します。

Snowflakeの OpenTelemetry レポートタスクは一部またはすべてのメトリックを任意の OTLP 宛先に送信できます。

接続メトリック

メトリック名

単位

説明

connection.input.bytes

bytes

入力アイテムのサイズ

connection.input.count

items

入力のアイテム数

connection.output.bytes

bytes

出力されたアイテムのサイズ

connection.output.count

items

出力のアイテム数

connection.queued.bytes

bytes

キューに入れられたアイテムのサイズ

connection.queued.bytes.max

bytes

キューに入れられるアイテムの最大サイズ

connection.queued.count

items

キューに入れられたアイテムの数

connection.queued.count.max

items

キューに入れられたアイテムの最大数

connection.queued.duration.total

ミリ秒

キューに入れられたアイテムの期間の合計

connection.queued.duration.max

ミリ秒

キューに入れられたアイテムの最大期間

connection.backpressure.threshold.bytes

bytes

バックプレッシャーが適用される前に、この接続でキューに入れることができるデータの最大サイズ(バイト単位)。

connection.backpressure.threshold.objects

items

バックプレッシャーが適用される前にこの接続でキューに入れることができる FlowFiles の最大設定数。

connection.loadbalance.status.load_balance_not_configured

バイナリ、0または1

接続にロードバランス設定が構成されていない場合は1。それ以外の場合は0です。

connection.loadbalance.status.load_balance_active

バイナリ、0または1

接続がクラスター全体で負荷分散されている場合は1。それ以外の場合は0。

connection.loadbalance.status.load_balance_inactive

バイナリ、0または1

接続がクラスター全体で負荷分散されていない場合は1。それ以外の場合は0。

接続記録属性

各接続メトリックには、次の記録属性が含まれます。

属性

説明

ID

接続の一意の識別子

name

ユーザーから見える接続名

type

固定値 接続

source_id

この接続に FlowFiles を送信しているコンポーネントの一意の識別子

source.name

この接続に FlowFiles を送信しているコンポーネントのユーザーから見える名前

destination.id

この接続から FlowFiles を受信しているコンポーネントの一意の識別子

destination.name

この接続から FlowFiles を受信しているコンポーネントのユーザーから見える名前

group.id

この接続を含むプロセスグループの一意の識別子

入出力ポートのメトリック

入力ポートと出力ポートは、技術的には2つの別々のタイプのコンポーネントです。一貫性を保つため、入力ポートと出力ポートのメトリックと属性は同じですが、入力ポートか出力ポートかを示す type 属性は異なります。

メトリック名

単位

説明

port.thread.count.active

threads

アクティブなスレッドの数

port.bytes.received

bytes

受信したバイト数

port.bytes.sent

bytes

送信したバイト数

port.flowfiles.received

flowfiles

受信済み FlowFiles 数

port.flowfiles.sent

flowfiles

送信済み FlowFiles 数

port.input.bytes

bytes

入力アイテムのサイズ

port.input.count

items

入力のアイテム数

port.output.bytes

bytes

出力されたアイテムのサイズ

port.output.count

items

出力のアイテム数

入力および出力ポート記録属性

各ポートメトリックには、次の記録属性が含まれます。

属性

説明

ID

ポートの一意の識別子

name

ユーザーから見えるポートの名前

type

ポート入力 または ポート出力 のいずれか

group.id

このポートを含むプロセスグループの一意の識別子

プロセスグループメトリック

メトリック名

単位

説明

processgroup.thread.count.active

threads

アクティブなスレッドの数

processgroup.thread.count.stateless

threads

ステートレススレッドの数

processgroup.thread.count.terminated

threads

終了したスレッドの数

processgroup.bytes.read

bytes

読み取りバイト数

processgroup.bytes.received

bytes

受信したバイト数

processgroup.bytes.transferred

bytes

転送されたバイト数

processgroup.bytes.sent

bytes

送信したバイト数

processgroup.bytes.written

bytes

書き込まれたバイト数

processgroup.flowfiles.received

flowfiles

受信済み FlowFiles 数

processgroup.flowfiles.sent

flowfiles

送信済み FlowFiles 数

processgroup.flowfiles.transferred

flowfiles

転送済み FlowFiles 数

processgroup.input.count

items

入力アイテム数

processgroup.input.content.size

bytes

入力アイテムのサイズ

processgroup.output.count

items

出力されたアイテムの数

processgroup.output.content.size

bytes

出力されたアイテムのサイズ

processgroup.queued.count

items

キューに入れられたアイテムの数

processgroup.queued.content.size

bytes

キューに入れられたアイテムのサイズ

processgroup.time.processing

ナノ秒

処理にかかった時間

プロセスグループ記録属性

各プロセスグループメトリックには、以下の記録属性が含まれます。

属性

説明

ID

プロセスグループの一意の識別子

name

プロセスグループのユーザーから見える名前

type

固定値 process-group

tree.level

フローのルートプロセスグループに対するプロセスグループの深さ。フローの最上位レベルにあるプロセスグループのtree.levelは1になります。

プロセッサーメトリック

メトリック名

単位

説明

processor.thread.count.active

スレッド

アクティブなスレッドの数

processor.thread.count.terminated

スレッド

終了したスレッドの数

processor.time.lineage.average

ナノ秒

平均系列期間

processor.invocations

呼び出し

呼び出しの数

processor.bytes.read

バイト

読み取りバイト数

processor.bytes.received

バイト

受信したバイト数

processor.bytes.sent

バイト

送信したバイト数

processor.bytes.written

バイト

書き込まれたバイト数

processor.flowfiles.received

flowfiles

受信済み FlowFiles 数

processor.flowfiles.removed

flowfiles

削除済み FlowFiles 数

processor.flowfiles.sent

flowfiles

送信済み FlowFiles 数

processor.input.count

アイテム

入力アイテム数

processor.input.content.size

bytes

入力アイテムのサイズ

processor.output.count

アイテム

出力されたアイテムの数

processor.output.content.size

バイト

出力されたアイテムのサイズ

processor.time.processing

ナノ秒

処理にかかった時間

processor.run.status.running

バイナリ、0または1

実行中は1。それ以外の場合は0

processor.run.status.stopped

バイナリ、0または1

停止した場合は1。それ以外の場合は0

processor.run.status.validating

バイナリ、0または1

検証中の場合は1。それ以外の場合は0

processor.run.status.invalid

バイナリ、0または1

無効の場合は1。それ以外の場合は0

processor.run.status.disabled

バイナリ、0または1

無効の場合は1。それ以外の場合は0

processor.counter

count

カウンターの値

プロセッサー記録属性

各プロセッサーメトリックには、次の記録属性が含まれます。

属性

説明

ID

プロセッサーの一意の識別子

name

ユーザーが表示および編集できるプロセッサーの名前

type

固定値 processor

コンポーネント

プロセッサーの不変クラス名。

execution.node

このプロセッサーの実行方法に応じて、 ALL または PRIMARY のいずれかになります

group.id

このプロセッサーを含むプロセスグループの一意の識別子

カウンターの追加属性

上記の標準的なプロセッサー属性に加えて、 processor.counter メトリックには次が含まれます。

属性

説明

type

固定値 counter

カウンター

ユーザーまたはシステムが生成したカウンターの名前

リモートプロセスグループメトリック

メトリック名

単位

説明

remoteprocessgroup.thread.count.active

threads

アクティブなスレッドの数

remoteprocessgroup.remote.port.count.active

ポート

アクティブなリモートポートの数

remoteprocessgroup.remote.port.count.inactive

ポート

非アクティブなリモートポートの数

remoteprocessgroup.duration.lineage.average

ナノ秒

平均系列期間

remoteprocessgroup.refresh.age

ミリ秒

最終更新からの時間

remoteprocessgroup.received.count

items

受け取ったアイテムの数

remoteprocessgroup.received.content.size

bytes

受け取ったアイテムのサイズ

remoteprocessgroup.sent.count

items

送信済みアイテムの数

remoteprocessgroup.sent.content.size

bytes

送信済みアイテムのサイズ

remoteprocessgroup.transmission.status.transmitting

バイナリ、0または1

リモートプロセスグループが送信中の場合は1。それ以外の場合は0。

remoteprocessgroup.transmission.status.nottransmitting

バイナリ、0または1

リモートプロセスグループが送信している場合は0。それ以外の場合は1です。

リモートプロセスグループの記録属性

各リモートプロセスグループメトリックには、次の記録属性が含まれます。

属性

説明

ID

リモートプロセスグループの一意の識別子

name

ユーザーから見えるリモートプロセスグループの名前

group.id

このリモートプロセスグループを含むプロセスグループの一意の識別子

authorization.issue

リモートプロセスグループへのアクセスに使用される認証

target.uri

リモートプロセスグループの URI

type

固定値 remote-process-group

JVMメトリック

メトリック名

単位

説明

jvm.memory.heap.used

bytes

JVM ヒープ上のオブジェクトが現在使用しているメモリの量

jvm.memory.heap.committed

bytes

JVM ヒープで使用が保証されているメモリの量

jvm.memory.heap.max

bytes

JVM ヒープに割り当てられるメモリの最大量

jvm.memory.heap.init

bytes

JVM ヒープに割り当てられたメモリの初期量

jvm.memory.heap.usage

percentage

JVM ヒープの使用状況

jvm.memory.non-heap.usage

percentage

JVM ヒープ以外の使用状況

jvm.memory.total.init

bytes

JVM に割り当てられたメモリの初期量

jvm.memory.total.used

bytes

JVMが使用する現在のメモリ量

jvm.memory.total.max

bytes

JVM が使用できるメモリの最大量

jvm.memory.total.committed

bytes

JVM が使用できることが保証されているメモリの量

jvm.threads.count

threads

ライブスレッドの数

jvm.threads.deadlocks

threads

JVM スレッドのデッドロック

jvm.threads.daemon.count

threads

ライブデーモンスレッドの数

jvm.uptime

JVM プロセスが実行されている秒数

jvm.file.descriptor.usage

percentage

現在使用中の利用可能なファイル記述子の割合。

jvm.gc.G1-Concurrent-GC.runs

実行

G1同時ガベージコレクションが実行された合計回数

jvm.gc.G1-Concurrent-GC.time

ミリ秒

G1同時ガベージコレクションが実行された合計時間

jvm.gc.G1-Young-Generation.runs

実行

G1ヤングジェネレーションが実行された合計回数

jvm.gc.G1-Young-Generation.time

ミリ秒

G1ヤングジェネレーションが実行された合計時間

jvm.gc.G1-Old-Generation.runs

実行

G1旧世代が実行された合計回数

jvm.gc.G1-Old-Generation.time

ミリ秒

G1旧世代が実行されている合計時間

JVM 記録属性

JVM メトリックは記録属性を提供しません。

CPUメトリック

メトリック名

単位

説明

cores.available

コア

ランタイムで利用可能なコアの数

cores.load

percentage

システム負荷の平均、または利用できない場合は-1

CPU 記録属性

属性

説明

ID

固定値 `cpu

name

オペレーティングシステムの名前

アーキテクチャ

オペレーティングシステムのアーキテクチャ

version

オペレーティングシステムのバージョン

ストレージメトリック

メトリック名

単位

説明

storage.free

bytes

指定されたリポジトリの無料ストレージの量

storage.used

bytes

特定のリポジトリの使用済みストレージの量

ストレージ記録属性

属性

説明

ID

ストレージリポジトリの一意の識別子

name

IDと同じで一貫性を保つために提供されます

storage.type

flowfilecontent、 または provenance のいずれか

クエリ例

以下のクエリは、Openflowテレメトリーを使用するための例です。

すべてのクエリは、Openflowが SNOWFLAKE.TELEMETRY.EVENTS のデフォルトイベントテーブルにテレメトリーを送信するように構成されていることを前提としています。SnowflakeアカウントまたはOpenflowデプロイメントが別のイベントテーブルで構成されている場合は、 SNOWFLAKE.TELEMETRY.EVENTS と表示されている場所でそのテーブル名を置き換えてください。

FlowFiles スタックを検索

このクエリは、一定のしきい値を超えてキューに入れられている FlowFiles との接続を返します。これは、接続がスタックしている可能性があり、介入が必要であることを示しています。ユースケースに応じて30分のしきい値を調整します。

SELECT * FROM (
  SELECT
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    record_attributes:name as Connection_Name,
    record_attributes:id as Connection_ID,
    MAX(TO_NUMBER(value / 60 / 1000)) as Max_Queued_File_Minutes
  FROM snowflake.telemetry.events
  WHERE true
    AND record_type = 'METRIC'
    AND record:metric:name = 'connection.queued.duration.max'
    AND timestamp > dateadd(minutes, -30, sysdate())
  GROUP BY 1, 2, 3, 4
  ORDER BY Max_Queued_File_Minutes DESC
) WHERE Max_Queued_File_Minutes > 30;
Copy

Openflowランタイムのエラーログを検索する

SELECT
  timestamp,
  Deployment_ID,
  Runtime_Key,
  parsed_log:level as log_level,
  parsed_log:loggerName as logger,
  parsed_log:formattedMessage as message,
  parsed_log
FROM (
  SELECT
    timestamp,
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    TRY_PARSE_JSON(value) as parsed_log
  FROM snowflake.telemetry.events
  WHERE true
    AND timestamp > dateadd('minutes', -30, sysdate())
    AND record_type = 'LOG'
    AND resource_attributes:"k8s.namespace.name" like 'runtime-%'
  ORDER BY timestamp DESC
) WHERE log_level = 'ERROR';
Copy

実行中および非実行のプロセッサーを検索

一部のフローは、アクティブにデータを処理していない場合でも、すべてのプロセッサーが「実行中」状態にあることを期待します。

このクエリは、実行中または別の状態のプロセッサーを見つけるのに役立ちます。例:

  • stopped

  • invalid

  • disabled

SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  record_attributes:component as Processor,
  record_attributes:id as Processor_ID,
  TO_NUMBER(value) as Running
FROM snowflake.telemetry.events
WHERE true
  AND record:metric:name = 'processor.run.status.running'
  AND record_type = 'METRIC'
  AND timestamp > dateadd(minutes, -30, sysdate());
Copy

Openflowランタイムの CPU 使用率が高い箇所を見つける

データフローの速度やスループットの低下は、 CPU のボトルネックの結果である可能性があります。Openflowランタイムは、構成した最小ノード数と最大ノード数に基づいて、自動的にスケールアップします。

Openflowランタイムが最大ノード数を使用中で、まだ CPU の使用率が依然として高い場合は、次のことを検討してください。

  1. ランタイムに割り当てられたノードの最大数の増加

  2. コネクタまたはフローをトラブルシューティングして、ボトルネックを特定

Snowsightチャートは、時間の経過に伴う CPU 使用状況のクエリ結果を簡単に視覚化する方法を提供します。

SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  resource_attributes:"k8s.pod.name" as Runtime_Pod,
  TO_NUMBER(value, 10, 3) * 100 as CPU_Usage_Percentage
FROM snowflake.telemetry.events
WHERE true
  AND timestamp > dateadd(minute, -30, sysdate())
  AND record_type = 'METRIC'
  AND record:metric:name ilike 'container.cpu.usage'
  AND resource_attributes:"k8s.namespace.name" ilike 'runtime-%'
  AND resource_attributes:"k8s.container.name" ilike '%-server'
ORDER BY timestamp desc, CPU_Usage_Percentage desc;
Copy