すべてのプロダクト
Search
ドキュメントセンター

Cloud Monitor:ライブデバッグサービスタスク API リファレンス

最終更新日:Aug 04, 2026

Cloud Monitor (CMS) ServiceTaskController API (バージョン 2024-03-30) は、Python アプリケーションの動的コードプローブタスクを管理します。5 種類のプローブタイプ (ログ、スナップショット、メトリック、スパン、スパンタグ) に対応しており、キャプチャ結果は Simple Log Service (SLS) に保存されます。

前提条件

  • Alibaba Cloud CLI:このトピックで使用する cms2 および sls コマンドには、Alibaba Cloud CLI (コマンドラインインターフェイス) が必要です。

  • ワークスペース ID:Application Real-Time Monitoring Service (ARMS) のワークスペース ID (default-cms-xxx-cn-hangzhou など)。

  • サービス ID:アプリケーションまたはサービスの ID (ggxw4lnjuz@f2fd3a6265a254a052afb など)。

  • SLS プロジェクト:アプリケーションで使用する SLS プロジェクト (proj-xtrace-...-cn-hangzhou など)。

  • リージョン:CLI のデフォルトリージョンに依存しないように、CMS と SLS の両方のコマンドに対して --region パラメーターを明示的に指定してください。

説明

このトピックでは、Python アプリケーション (プローブタスク) のみを対象としています。

API オペレーション

オペレーション

HTTP メソッド

パス

CLI コマンド

タスクの作成

POST

/serviceTask/{workspace}/{serviceId}/task

aliyun cms2 apm service-task create

タスクの一覧表示

GET

/serviceTask/{workspace}/{serviceId}/tasks

aliyun cms2 apm service-task list

タスクの照会

GET

/serviceTask/{workspace}/{serviceId}/task/{taskId}

aliyun cms2 apm service-task get

タスクの削除

DELETE

/serviceTask/{workspace}/{serviceId}/task/{taskId}

aliyun cms2 apm service-task delete

キャプチャ結果の照会

SLS get-logs-v2

(CMS オペレーションではありません)

aliyun sls get-logs-v2

パスパラメーター

パラメーター

タイプ

必須

説明

workspace

文字列

はい

ARMS のワークスペース ID (default-cms-xxx-cn-hangzhou など) です。

serviceId

文字列

はい

アプリケーションまたはサービスの ID (ggxw4lnjuz@f2fd3a6265a254a052afb など) です。

taskId

文字列

はい (Get/Delete)

create オペレーションによって返されるタスク ID です。

共通の CLI パラメーター

パラメーター

説明

デフォルト

--region

リージョン:CLI のデフォルトリージョンに依存しないように、CMS と SLS の両方のコマンドでこのパラメーターを明示的に指定します。

Alibaba Cloud CLI 設定のデフォルトリージョン

--endpoint

CMS エンドポイント:リージョンから派生したエンドポイントを上書きします。

cms2.${regionId}.aliyuncs.com

-o json

インデントされた JSON を出力します。デフォルトの text モードでは、コンパクトな単一行の JSON が出力されます。

text

CreateServiceTask

Live-Debug プローブタスクを作成します。

リクエスト

POST /serviceTask/{workspace}/{serviceId}/task
Content-Type: application/json

ボディパラメーター

パラメーター

タイプ

必須

説明

type

文字列

はい

タスクタイプ (taskType)。有効な値については、「タスクタイプの列挙型」をご参照ください。

ip

文字列

はい

対象インスタンスの IP アドレス。すべてのインスタンスに一致させるには、このパラメーターを * に設定します。

taskConfig

文字列 (JSON テキスト)

はい

フラットな単一プローブ設定オブジェクトで、サーバーに文字列として保存されます。CLI の --task-config パラメーターは、生の JSON オブジェクトを受け付け、自動的に文字列にシリアル化します。

CLI の例

aliyun cms2 apm service-task create \
  --workspace <workspace> --service-id <serviceId> \
  --type <taskType> --ip '<targetIp>' \
  --task-config '<taskConfigJson>' \
  --region <regionId> -o json
  • すべてのインスタンスに一致させるには、--ip* に設定します。

  • 生の JSON オブジェクトを --task-config に渡します。 JSON を手動でエスケープする必要はありません。

レスポンス

{
  "success": true,
  "data": {
    "requestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "taskId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
  }
}

フィールド

説明

data.requestId

リクエスト ID。

data.taskId

タスク ID。この値は、SLS クエリ、Get、削除の操作で使用します。

HTTP ボディの例 (CLI シリアル化後)

{
  "type": "live_debug_log_probe",
  "ip": "*",
  "taskConfig": "{\"probeType\":\"LOG\",\"language\":\"python\",\"target\":{\"typeName\":\"app.service.order\",\"methodName\":\"OrderService.create_order\",\"location\":\"exit\",\"instanceIds\":[\"*\"]},\"action\":{\"type\":\"LOG\",\"template\":\"id={order_id}\"},\"ttl\":\"30m\",\"captureCount\":100}"
}
説明

HTTP ボディでは、taskConfig はエスケープされた JSON 文字列です。CLI の --task-config を介してパラメーターを渡す場合は、エスケープされていない JSON オブジェクトを渡してください。CLI がシリアル化を処理します。

ListServiceTask

Live-Debug プローブタスクの一覧を表示します。

リクエスト

GET /serviceTask/{workspace}/{serviceId}/tasks?type={taskType}&maxResults={n}

クエリパラメーター

パラメーター

タイプ

必須

説明

type

文字列

はい

完全一致フィルタリングに使用するタスクタイプ (live_debug_log_probe など)。

maxResults

整数

いいえ

最大エントリ数。デフォルト値: 100。最大値: 100

レスポンスフィールド

CLI は data.serviceTasks[] 配列を出力します。各項目には次のフィールドが含まれます。

フィールド

説明

taskId

タスク ID。

type

タスクタイプ。

serviceId

サービス ID。

ip

作成時に指定した IP アドレス、または *

createTime

タスクが作成された時刻。

updateTime

タスクが最後に更新された時刻。

taskConfig

タスク設定 (フラットプローブオブジェクト)。

CLI の例

aliyun cms2 apm service-task list \
  --workspace <workspace> --service-id <serviceId> \
  --type <taskType> --max-results 100 \
  --region <regionId> -o json

GetServiceTask

1 つのライブデバッグプローブタスクの詳細を照会します。

リクエスト

GET /serviceTask/{workspace}/{serviceId}/task/{taskId}?type={taskType}

クエリパラメーター

パラメーター

タイプ

必須

説明

type

文字列

必須

タスクタイプ。実際のタスクタイプと一致している必要があります。

レスポンス

CLI は data.serviceTask オブジェクトを出力します。フィールドは List のレスポンス内の 1 つの項目と同じです。

CLI の例

aliyun cms2 apm service-task get \
  --workspace <workspace> --service-id <serviceId> \
  --task-id <taskId> --type <taskType> \
  --region <regionId> -o json

DeleteServiceTask

ライブデバッグプローブタスクを削除します。削除後、サーバーはタスクを削除し、変更を設定サーバーに同期します。エージェント側の対応するプローブは非アクティブになります。

重要

デプロイ済みのプローブを無効化するには、対応するタスクを削除してください。

リクエスト

DELETE /serviceTask/{workspace}/{serviceId}/task/{taskId}?type={taskType}

クエリパラメーター

パラメーター

タイプ

必須

説明

type

文字列

はい

タスクタイプ。実際のタスクタイプと一致する必要があります。

CLI の例

aliyun cms2 apm service-task delete \
  --workspace <workspace> --service-id <serviceId> \
  --task-id <taskId> --type <taskType> \
  --region <regionId> -o json

バッチ削除の例

サービスのすべてのプローブタスクを削除するには、5 種類のプローブタイプごとにタスクを一覧表示し、削除します。

WS=<workspace>; SVC=<serviceId>; REGION=<regionId>
for t in live_debug_log_probe live_debug_snapshot_probe \
         live_debug_metric_probe live_debug_span_probe live_debug_span_tag_probe; do
  aliyun cms2 apm service-task list \
    --workspace "$WS" --service-id "$SVC" --type "$t" --region "$REGION" -o json |

  python3 -c 'import sys,json; [print(t["taskId"]) for t in (json.load(sys.stdin)["data"].get("serviceTasks") or [])]' |

  while read -r id; do
    aliyun cms2 apm service-task delete \
      --workspace "$WS" --service-id "$SVC" \
      --task-id "$id" --type "$t" --region "$REGION" -o json
  done
done

キャプチャ結果のクエリ (SLS)

キャプチャのステータスと結果は Simple Log Service (SLS) に書き込まれますが、CMS の Get API では返されません。

CLI の例

過去 10 分間のデータをクエリします。<taskId> を、create API が返すタスク ID に置き換えてください。

FROM=$(( $(date +%s) - 600 )); TO=$(date +%s)

# タスクステータス (インストールステータス、ファネルメトリクス)
aliyun sls get-logs-v2 --region <regionId> --accept-encoding gzip \
  --project <slsProject> --logstore logstore-apm-logs \
  --from "$FROM" --to "$TO" \
  --query "* and \"<taskId>\" | SELECT content FROM log WHERE json_extract_scalar(attributes, '\$[\"livedebug.report_type\"]') = 'status'"

# キャプチャ結果 (キャプチャデータ)
aliyun sls get-logs-v2 --region <regionId> --accept-encoding gzip \
  --project <slsProject> --logstore logstore-apm-logs \
  --from "$FROM" --to "$TO" \
  --query "* and \"<taskId>\" | SELECT content FROM log WHERE json_extract_scalar(attributes, '\$[\"livedebug.report_type\"]') != 'status'"

クエリパラメーター

パラメーター

必須

説明

--project

はい

アプリケーション用の SLS プロジェクト (proj-xtrace-...-cn-hangzhou など) です。

--logstore

いいえ

Logstore 名。デフォルト値:logstore-apm-logs

--from / --to

はい

UNIX タイムスタンプ (秒) 単位のクエリ時間範囲。

--region

はい

SLS プロジェクトのリージョン。プロジェクトのリージョンと一致させる必要があります。このパラメーターを明示的に指定してください。

クエリタイプ

クエリタイプ

フィルター条件

説明

タスクステータス

livedebug.report_type = 'status'

インストールステータスとファネルメトリクス。

キャプチャ結果

livedebug.report_type != 'status'

キャプチャデータ。

重要

SLS プロジェクトはリージョンごとに分離されています。region パラメーターが正しくないと、ProjectNotExist エラーが発生します。

タスクタイプの列挙型

次の表は、Python アプリケーションでサポートされている 5 つのプローブタイプを示しています。命名規則は live_debug_ + プローブのセマンティクス (小文字) + _probe です。

taskType

プローブタイプ

説明

live_debug_log_probe

LOG

ターゲットポイントで動的ログを出力します。

live_debug_snapshot_probe

SNAPSHOT

メソッドのスナップショットをキャプチャし、オブジェクトグラフをシリアル化します。

live_debug_metric_probe

METRIC

ターゲットポイントでカスタムメトリクスを出力します。

live_debug_span_probe

SPAN

関数実行用の OpenTelemetry スパンを作成します。

live_debug_span_tag_probe

SPAN_TAG

現在アクティブなスパンに属性を追加します。

プローブの taskConfig 構造

--task-config に渡すフラットオブジェクトです:

{
  "probeType": "LOG|SNAPSHOT|METRIC|SPAN|SPAN_TAG",
  "language": "python",
  "target": { },
  "action": { },
  "trigger": { },
  "rateLimit": { },
  "ttl": "1h",
  "captureCount": 100,
  "enabled": true
}

トップレベルフィールド

フィールド

タイプ

必須

説明

probeType

文字列

はい

プローブのタイプです。有効な値は、LOGSNAPSHOTMETRICSPANSPAN_TAG です。

language

文字列

はい

言語です。このパラメーターを python に設定します。

target

オブジェクト

はい

ターゲットのメソッドまたは行を特定します。

action

オブジェクト

はい

プローブのアクションです。構造は probeType によって異なります。

trigger

オブジェクト

いいえ

トリガー条件です。

rateLimit

オブジェクト

いいえ

レート制限の構成です。

ttl

文字列

ttl または captureCount のうち少なくとも 1 つ

生存期間 (TTL) です。サポートされる形式は、30s5m2h1d、または秒数です。ms は使用しないでください。

captureCount

int

ttl または captureCount のうち少なくとも 1 つ

最大キャプチャ数です。ttl または captureCount のいずれかが先に到達した時点で、タスクは終了します。

enabled

ブール値

いいえ

通常、作成時は true です。enabled: false でタスクを作成しても、既存のプローブは無効化されません。

target:ターゲットの特定

フィールド

タイプ

必須

説明

typeName

文字列

関数レベルのプローブでは推奨します

モジュール名 (sys.modules のキー) です。例: app.service.order。メインモジュールの場合、このパラメーターを __main__ に設定します。

methodName

文字列

関数レベルのプローブでは推奨します

関数の __qualname__ です。クラスメソッドの場合は ClassName.method_name 形式を使用します。通常の関数の場合は、関数名をそのまま使用します。

sourceFile

文字列

いいえ (行レベルのプローブでは推奨します)

ソースファイル名、またはパスのサフィックスです。

location

文字列

いいえ

フックポイントです。有効な値は、enterexitexceptionline:N です。デフォルト値は exit です。SPAN プローブは関数レベルのみをサポートし、line は使用できません。

instanceIds

string[]

強く推奨します

プローブが有効となるインスタンス ID のリストです。このパラメーターは、taskConfig のトップレベルではなく、target 内に配置します。すべてのインスタンスの場合は ["*"] に設定します。空の場合、プローブは有効になりません。

instanceIps

string[]

いいえ

プローブが有効となる IP アドレスのリストです。AND ロジックで instanceIds と組み合わせられます。

行レベルのプローブでは、主に sourceFile + location:"line:N" を使用できます。

trigger:トリガー条件 (任意)

フィールド

タイプ

デフォルト

説明

condition

文字列

-

この式が true と評価される場合にのみ、プローブはデータをキャプチャします。

callerPattern

文字列

-

呼び出し元フィルターです (Python ではほとんど使用されません)。

条件の例: amount > 10000 または @return is None or amount > 10000

式のルールは次のとおりです:

  • パラメーター名、ローカル変数、またはモジュールレベルのグローバル変数を直接使用します。

  • exit または exception の箇所では、@return@duration (ミリ秒)、または @exception を使用します。

  • OGNL、args[0]returnValuedurationMs は使用しないでください。

  • 条件が @return または @exception を参照する場合、プローブの locationexit または exception である必要があります。

rateLimit:レート制限 (任意)

フィールド

タイプ

デフォルト

説明

maxExecutionsPerSecond

int

プローブのタイプによって異なります (以下を参照)

1 秒あたりの最大実行回数 (トークンバケット) です。

samplingProbability

double

1.0

サンプリング確率 (0~1) です。

executionTimeoutMs

int

100

単一キャプチャのタイムアウト (ミリ秒) です。

デフォルトのレート制限: LOGMETRICSPAN、および SPAN_TAG プローブでは、毎秒約 5,000 回の実行が可能です。 SNAPSHOT プローブでは、毎秒約 1 回の実行が可能です。 行レベルのプローブには、毎秒約 100 回という追加のグローバル保護制限があります。

タイプ別プローブアクション

LOG (taskType: live_debug_log_probe)

ターゲットポイントで、オブジェクトグラフをシリアル化せずに動的ログを出力します。

action フィールド

フィールド

タイプ

必須

説明

type

文字列

はい

"LOG" に設定します。

template

文字列

はい

ログテンプレートです。動的な値には {expression} 構文を使用します。

説明

LOG プローブはテンプレートをレンダリングするだけで、capture ディメンションを無視します。パラメーター、戻り値、またはスタックトレースをキャプチャするには、SNAPSHOT プローブを使用してください。

{
  "probeType": "LOG",
  "language": "python",
  "target": {
    "typeName": "app.service.order",
    "methodName": "OrderService.create_order",
    "location": "exit",
    "instanceIds": ["*"]
  },
  "action": {
    "type": "LOG",
    "template": "create_order id={order_id} amount={amount} ret={@return} cost={@duration}ms"
  },
  "ttl": "30m",
  "captureCount": 100
}

SNAPSHOT (taskType: live_debug_snapshot_probe)

メソッドのスナップショットをキャプチャし、オブジェクトグラフをシリアル化します。

action フィールド

フィールド

タイプ

必須

説明

type

文字列

はい

"SNAPSHOT" に設定します。

capture

文字列配列

はい

キャプチャするディメンションです。指定されていない場合、または [] に設定されている場合、オブジェクトグラフはキャプチャされません。

captureExpressions

文字列配列

いいえ

評価する追加の式です。

captureConfig

オブジェクト

いいえ

オブジェクトグラフのシリアル化に関する制限です。

capture 列挙値

説明

ARGS

メソッド引数をシリアル化します。

RETURN

戻り値をシリアル化します。

THIS

現在のインスタンスをシリアル化します。

EXCEPTION

例外の概要を記録します。

LOCALS

ローカル変数をキャプチャします (デバッグ情報が必要です)。

STACK

コールスタックをキャプチャします (オプトイン。明示的に含める必要があります)。

EXECUTION_DETAIL

メソッド本体内のサブ呼び出しを集約します。

captureConfig

フィールド

デフォルト

説明

maxDepth

3

オブジェクトシリアル化の最大深度です。

maxCollectionSize

100

コレクションまたは配列内の要素の最大数です。

maxStringLength

1024

文字列の最大長です。

maxFieldCount

50

オブジェクトごとのフィールドの最大数です。

maxTotalSizeBytes

65536

単一スナップショットの最大サイズ (バイト) です。

stackTraceDepth

50

コールスタックの最大深度です。

redactedFieldPatterns

[".*password.*",".*token.*",".*secret.*"]

フィールド名のリダクションに使用する正規表現です。

captureExpressions

構文は trigger.condition および LOG テンプレートと同じです (制限付き eval)。結果は context.evaluatedExpressions に書き込まれます。各項目は次の形式です:

{"name": "order_id", "type": "...", "value": "...", "notCapturedReason": null}

評価が失敗した場合、valuenull に設定され、notCapturedReason に理由が記録されます。これは他のディメンションには影響しません。captureExpressionscapture は互いに独立しています。

{
  "probeType": "SNAPSHOT",
  "language": "python",
  "target": {
    "typeName": "app.service.order",
    "methodName": "OrderService.create_order",
    "location": "exit",
    "instanceIds": ["*"]
  },
  "trigger": {
    "condition": "@return is None or amount > 10000"
  },
  "action": {
    "type": "SNAPSHOT",
    "capture": ["ARGS"],
    "captureExpressions": ["order_id", "amount * count", "self.user_id", "@return"],
    "captureConfig": {
      "maxDepth": 3,
      "maxCollectionSize": 100,
      "maxStringLength": 1024
    }
  },
  "ttl": "30m",
  "captureCount": 50
}

METRIC (taskType: live_debug_metric_probe)

ターゲットポイントで、カスタムメトリクスを出力します。

action フィールド

フィールド

タイプ

必須

説明

type

文字列

はい

"METRIC" に設定します。

metricName

文字列

はい

メトリクス名です (例: livedebug.order.amount)。

metricType

文字列

はい

メトリクスタイプです。有効な値は、COUNTERGAUGEHISTOGRAMSUMMARY です。

valueExpression

文字列

はい

メトリクス値となる Python 式です。

tags

オブジェクト

いいえ

タグのマップです。値は Python 式の文字列です。

{
  "probeType": "METRIC",
  "language": "python",
  "target": {
    "typeName": "app.service.order",
    "methodName": "OrderService.create_order",
    "location": "exit",
    "instanceIds": ["*"]
  },
  "action": {
    "type": "METRIC",
    "metricName": "livedebug.order.amount",
    "metricType": "HISTOGRAM",
    "valueExpression": "amount",
    "tags": {
      "is_vip": "str(user_id == 'vip')"
    }
  },
  "ttl": "1h"
}

SPAN (taskType: live_debug_span_probe)

ターゲット関数の実行に対して OpenTelemetry スパンを作成します。例外が発生した場合は、スパンを ERROR としてマークし、例外イベントを記録します。関数レベルのみ。

action フィールド

フィールド

タイプ

必須

説明

type

文字列

はい

"SPAN" に設定します。

spanName

文字列

はい

スパン名です。

spanTags

オブジェクト

いいえ

属性のマップです。値は Python 式の文字列です。

{
  "probeType": "SPAN",
  "language": "python",
  "target": {
    "typeName": "app.service.order",
    "methodName": "OrderService.create_order",
    "location": "enter",
    "instanceIds": ["*"]
  },
  "action": {
    "type": "SPAN",
    "spanName": "dyn.create_order",
    "spanTags": {
      "order.id": "str(order_id)",
      "order.amount": "str(amount)"
    }
  },
  "ttl": "1h"
}

SPAN_TAG (taskType: live_debug_span_tag_probe)

現在のアクティブなスパンに属性を追加します。アクティブなスパンが存在しない場合は、サイレントにスキップします。

action フィールド

フィールド

タイプ

必須

説明

type

文字列

はい

"SPAN_TAG" に設定します。

tags

配列

はい

タグの配列です。各項目の形式は { "key": "...", "value": "<Python expression>" } です。

{
  "probeType": "SPAN_TAG",
  "language": "python",
  "target": {
    "typeName": "app.service.order",
    "methodName": "OrderService.create_order",
    "location": "exit",
    "instanceIds": ["*"]
  },
  "action": {
    "type": "SPAN_TAG",
    "tags": [
      {"key": "order.id", "value": "str(order_id)"},
      {"key": "order.result", "value": "str(@return)"}
    ]
  },
  "ttl": "1h"
}

エラーとトラブルシューティング

症状

考えられる原因

解決策

ProjectNotExist

SLS リージョンが正しくありません。

aliyun sls --region を使用して正しいリージョンを指定してください。リージョンはプロジェクトのリージョンと一致する必要があります。

タスクは存在するが、一覧表示すると結果が空になる

type パラメーターが実際のタスクタイプと一致していません。

厳密なタスクタイプでタスクを一覧表示してください。

enabled:false でタスクを作成してもアクティブプローブが停止しない

このパラメーターはデプロイ済みのタスクには影響しません。

DeleteServiceTask を使用してプローブを無効化してください。

プローブがデータをキャプチャしない

instanceIds が空、モジュール名が正しくない、またはトラフィックが発生していません。

instanceIds["*"] に設定し、typeNamemethodName を確認して、ステータスをクエリする前にトラフィックを発生させてください。

スパンの作成に失敗する、または無効になる

line:N が場所として使用されています。

関数レベルの enter または exit に変更してください。

TTL 例外

ms 単位が使用されています。

smhd、または秒単位の数値を使用してください。

完全なワークフローの例 (LOG プローブ)

# 0. 環境変数
REGION=cn-hangzhou
SLS_PROJECT=proj-xtrace-xxxxxxxxxxxxxxxxxxxxxx-cn-hangzhou
WORKSPACE=default-cms-xxxxxxxxxxxxxxxxxx-cn-hangzhou
SERVICE_ID='ggxw4lnjuz@f2fd3a6265a254a052afb'

# 1. タスクの作成
RESP=$(aliyun cms2 apm service-task create \
  --workspace "$WORKSPACE" --service-id "$SERVICE_ID" \
  --type live_debug_log_probe --ip '*' \
  --task-config '{"probeType":"LOG","language":"python","target":{"typeName":"app.service.order","methodName":"OrderService.create_order","location":"exit","instanceIds":["*"]},"action":{"type":"LOG","template":"id={order_id} ret={@return}"},"ttl":"30m","captureCount":50}' \
  --region "$REGION" -o json)
echo "$RESP"
TASK_ID=$(echo "$RESP" | python3 -c 'import sys,json; print(json.load(sys.stdin)["data"]["taskId"])')

# 2. タスクの確認
aliyun cms2 apm service-task get \
  --workspace "$WORKSPACE" --service-id "$SERVICE_ID" \
  --task-id "$TASK_ID" --type live_debug_log_probe \
  --region "$REGION" -o json

# 3. インストルメント化されたエンドポイントへのトラフィックを生成し、結果をクエリ (過去 10 分)
FROM=$(( $(date +%s) - 600 )); TO=$(date +%s)
aliyun sls get-logs-v2 --region "$REGION" --accept-encoding gzip \
  --project "$SLS_PROJECT" --logstore logstore-apm-logs \
  --from "$FROM" --to "$TO" \
  --query "* and \"$TASK_ID\" | SELECT content FROM log WHERE json_extract_scalar(attributes, '\$[\"livedebug.report_type\"]') != 'status'"

# 4. タスクの削除
aliyun cms2 apm service-task delete \
  --workspace "$WORKSPACE" --service-id "$SERVICE_ID" \
  --task-id "$TASK_ID" --type live_debug_log_probe \
  --region "$REGION" -o json