cx-profiling について
cx-profilingは、Coralogix profiling APIを使って継続的プロファイリングデータを調べるCLIスキルです。サービスのランキングから関数単位の分析までを案内します。
主な機能
- 01CPUまたはメモリでサービスを順位付け
- 02利用可能なプロファイル種別を確認
- 03プロファイル指標の絞り込みと集計
- 04デコード済みフレームグラフの表示
- 05読み取り専用コマンドとJSON・TOON出力
活用シーン
- 01CPUやメモリ使用量の多いサービスを特定
- 02Podやラベルごとのプロファイル使用量を比較
- 03サービス内の高負荷関数を追跡
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ coralogix/ cx-cli --skill cx-profilingインストール後、Claude Code で/cx-profilingを入力して読み込まれたか確認します。
詳細
プロファイリングスキル
Coralogix プロファイリング API を通じて、どのサービスが最も多くの CPU やメモリを消費しているか、またサービス内のどの関数がその原因となっているかなど、継続的プロファイリングに関する質問に回答する際にこのスキルを使用します。profiles.cpu-profiles:Read 権限が必要です。
CLI コマンド
| コマンド | 目的 | 主なフラグ |
|---|---|---|
cx profiling services | CPU+ウォール秒(cpu)、または割り当て+ヒープバイト(memory)の多い順にプロファイリング対象サービスを表示 | --category(必須)、--environment、--limit(デフォルト 20、最大 100)、--offset、--include-time-series |
cx profiling metadata <service> | サービスの言語と、データがあるプロファイルタイプを表示 | - |
cx profiling filters <service> | サービスのプロファイルを絞り込むためのラベルキーとその値を表示 | --profile-type(必須)、--filter、--max-values-per-key(デフォルト 50) |
cx profiling metrics <service> | 1 つのプロファイルタイプの使用量を時間ごとに表示し、service、pod、または任意のラベルで分割。合計値の多い順に表示 | --profile-type(必須)、--sum-by(デフォルト service)、--max-buckets(デフォルト 60)、--limit(デフォルト 10)、--filter |
cx profiling flame-graph <service> | デコードされたフレームグラフと、自己値の高い関数を表示 | --profile-type(必須)、--filter、--top-functions(デフォルト 20)、--min-node-ratio(デフォルト 0.01)、--max-depth、--show-kernel |
- すべてのコマンドは読み取り専用で、
-o json/-o toonに対応しています。 - すべてのコマンドで
--start/--endを指定します(デフォルトはnow-1h/now)。now、now-1h形式の相対表現、または ISO-8601 タイムスタンプを使用できます。 --profile-typeはcpu、wall、memory-allocation-bytes、memory-allocation-objects、memory-heap-bytes、memory-heap-objectsのいずれかです(大文字と小文字は区別されません。MEMORY_HEAP_BYTESも使用できます)。最初にmetadataを確認してください。has_data: trueのタイプだけが結果を返します。--filterは繰り返し指定でき、フィルターは AND で結合されます。key=v1,v2(いずれかの値)、key!=v1,v2(いずれの値でもない)、key:exists、key:not-existsを指定します。filtersでキーと値を確認してください。services --environmentはdeployment.environment.nameと一致します。サービスのランキングで適用される唯一のフィルターです。servicesはランキングをページ分割して取得します。ページがいっぱいになると、次に使用する--offsetが CLI に表示されます。--include-time-seriesを指定しない限り、時系列データは省略されます。- 大規模なサービスでは
flame-graphに約 40 秒かかることがあります。短い--http-timeoutは設定しないでください。
調査ワークフロー
-
負荷の高いサービスを見つける(ユーザーがサービス名を指定している場合は省略します):
cx profiling services --category cpu --limit 10 -o json cx profiling services --category memory --environment <env> --limit 10 -o json -
サービスで利用可能なプロファイルタイプを確認します:
cx profiling metadata <service> -o json -
絞り込みや分割に使える項目(ポッド、バージョン、環境など)を確認します:
cx profiling filters <service> --profile-type cpu -o json -
使用量が変化した時期とその原因を特定します。手順 3 の
podまたはラベルキーで分割します:cx profiling metrics <service> --profile-type cpu --sum-by pod --limit 5 -o json cx profiling metrics <service> --profile-type cpu --sum-by service.version --start now-24h -o json -
原因となっているコードを特定します。まず上位の関数を確認してから、ツリーを確認します:
cx profiling flame-graph <service> --profile-type cpu --top-functions 10 -o json | jq '.top_functions' cx profiling flame-graph <service> --profile-type cpu --filter k8s.pod.name=<pod> \ --min-node-ratio 0.05 --max-depth 20 -o json
出力の読み方
- サービス:
cpu行にはtotal_cpu_seconds/total_wall_secondsが含まれます。memory行にはtotal_memory_allocations_bytes/total_heap_bytesが含まれます。last_activeはエポック秒です。 - メトリクス:
seriesはtotal(バケット合計の総和)で順位付けされ、--limitの件数に切り詰められます。total_seriesはサーバーが返した系列数です。unitはプロファイルタイプに応じてseconds、bytes、objectsのいずれかです。 - フレームグラフ:
top_functionsはツリー全体にわたって関数とファイルの組み合わせごとに自己値を合計するため、ツリーの切り詰めによる影響を受けません。treeノードにはfunction、file、line、self、total、self_percent、total_percent、children(totalの降順)が含まれます。omitted_subtreesは--min-node-ratio/--max-depthによって除外されたノードの数です。サーバーはすでに、合計の 0.1% 未満のノードを除外しています。シンボルのないフレームは、アドレスまたはunknownとして表示されます。warnings(例:maxBytes)は、サーバーがプロファイルの読み取りを早期に停止したことを示すため、グラフが対象範囲の一部のみをカバーしている可能性があります。
重要な原則
- まず順位を確認し、その後に掘り下げます —
servicesとmetricsは低コストですが、flame-graphは高コストの呼び出しです。実行を依頼する前に、サービス、プロファイルの種類、時間範囲、フィルターを絞り込んでください。 - 大きなツリーは容量も大きくなります — 深いスタック(Java、Scala)では、数百 KB の JSON が生成されることがあります。ツリーには
--min-node-ratioを大きくするか、--max-depthを設定してください。または、.top_functionsだけを読み取ってください。 - Self と total の違い —
selfが大きい場合、その関数自体が高負荷です。selfが小さいのにtotalが大きい場合、コストはその関数が呼び出す処理にあります。 - 結果が空でもエラーではありません — 選択したプロファイルの種類または時間範囲にデータがないサービスでは、空の系列または合計がゼロのグラフが返されます。
metadataを再確認し、--startの範囲を広げてください。 - プロファイリングデータがない場合 —
metadataにhas_data: trueのプロファイルの種類が表示されない場合、そのサービスはプロファイリングされていません。他のサービス名を探さず、cx-service-catalogまたはcx-telemetry-queryingから回答してください(CPU またはメモリの使用量、発生時刻、該当するポッドを確認)。そのサービスで関数レベルの詳細を確認するには、プロファイリングを有効にする必要があることを伝えてください。 - 複数プロファイルへのファンアウトは、すべてのサブコマンドで使用できます。
-p <profile>を繰り返してください。複数指定した場合、結果にはprofileが付与されます。
関連スキル
cx-service-catalog— 同じサービスの RED メトリクス(レイテンシ、エラー)を確認できます。ここで見つかった CPU スパイクとレイテンシの悪化を関連付けてください。cx-telemetry-querying— プロファイリングで明らかになったサービスまたはポッドのログ、スパン、PromQL メトリクスに切り替えて確認できます(cx logs、cx spans、cx metrics)。cx-infra— 高負荷のポッドがインフラストラクチャの問題を示している場合に、ホストとコンテナーの状態を確認できます。
コメント
Markdown 対応