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

Application Real-Time Monitoring Service:会話履歴収集の制御

最終更新日:Jun 23, 2026

デフォルトでは、プローブは LLM およびエージェント呼び出し時の会話履歴を記録し、そのコンテンツを OpenTelemetry 仕様に従ってフォーマットします。このドキュメントでは、LLM アプリケーションにおけるこのデータ収集の設定方法について説明します。

ARMS エージェントは、会話履歴を収集・記録するための 3 つのモードをサポートしています。

  • スパン属性に会話履歴を記録します (デフォルト)。

  • 会話履歴の記録を停止します。

  • ログに会話履歴を記録します。

要件に応じて、LLM アプリケーションの会話履歴の収集動作を設定できます。

前提条件

  • Python プローブ または Java プローブ がインストールされていること。

  • Python

    コンポーネント/フレームワーク

    対応バージョン

    シナリオ

    プローブバージョン

    OpenAI Python SDK

    1.X

    • ChatCompletion

    • Completion

    • Embedding

    2.0.0 以降

    Java

    コンポーネント/フレームワーク

    対応バージョン

    シナリオ

    プローブバージョン

    OpenAI Java SDK

    1.1.0 以降

    • ChatCompletion

    • Completion

    • Embedding

    4.6.0 以降

    Spring AI

    1.0.0 以降

    • OpenAI ChatModel

    • ChatClient (デフォルト)

    • ToolManager (デフォルト)

    4.6.0 以降

    Spring AI Alibaba

    1.0.0.3 以降

    • DashScope ChatModel

    4.6.0 以降

この例では、React エージェント関数 を使用してツール呼び出しを実行する方法を示します。まず、LLM アプリケーションツール定義 を指定して 大規模モデル を呼び出します。モデルtool_call リクエストを返します。アプリケーションはこのリクエストを実行し、ツール呼び出し結果大規模モデル に返します。それを受けて、大規模モデルは最終結果を生成します。次の シーケンス図 に、このプロセスを示します。

image

スパン属性への対話履歴の記録

収集動作とデータ形式

デフォルトでは、プローブは入力メッセージ、出力メッセージ、システムインストラクション、およびツール定義を JSON 形式でスパン属性に記録します。

属性名

説明

スキーマ

コンテンツの完全性

gen_ai.input.messages

入力メッセージ

gen_ai.input.messages

完全

gen_ai.output.messages

出力メッセージ

gen_ai.output.messages

完全

gen_ai.system_instructions

システムインストラクション

gen_ai.system_instructions

完全

gen_ai.tool.definitions

ツール定義

-

  • type

  • name

  • description

設定

  • 次の環境変数を使用して設定します。

    環境変数名

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    True

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_CAPTURE_STRATEGY

    "span-attributes"

  • Java アプリケーションの場合は、起動コマンドでシステムプロパティを使用して設定することもできます。例:

    -Dotel.instrumentation.genai.capture-message-content=true \
    -Dotel.instrumentation.genai.message-content.capture-strategy=span-attributes

GenAI クライアントスパン 1

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

gen_ai.input.messages

[
  {
    "role": "user",
    "parts": [
      {
        "type": "text",
        "content": "Weather in Paris?"
      }
    ]
  }
]

gen_ai.output.messages

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "tool_call",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "name": "get_weather",
        "arguments": {
          "location": "Paris"
        }
      }
    ],
    "finish_reason": "tool_call"
  }
]

gen_ai.tool.definitions

[
  {
    "type": "function",
    "name": "get_weather",
    "description": "Get the current temperature for a specific location."
  }
]

GenAI クライアントスパン 2

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9K4wJM99hkeDGuuJcybPwUfYCSB5n"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

gen_ai.input.messages

[
  {
    "role": "user",
    "parts": [
      {
        "type": "text",
        "content": "Weather in Paris?"
      }
    ]
  },
  {
    "role": "assistant",
    "parts": [
      {
        "type": "tool_call",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "name": "get_weather",
        "arguments": {
          "location": "Paris"
        }
      }
    ]
  },
  {
    "role": "tool",
    "parts": [
      {
        "type": "tool_call_response",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "response": "rainy, 57°F"
      }
    ]
  }
]

gen_ai.output.messages

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "text",
        "content": "The weather in Paris is currently rainy with a temperature of 57°F."
      }
    ],
    "finish_reason": "stop"
  }
]

会話履歴収集の無効化

収集の挙動とデータフォーマット

このモードでは、プローブは入力メッセージ、出力メッセージ、またはシステムインストラクションの詳細な内容を記録しません。ツール定義については、プローブは基本情報のみを JSON フォーマットで記録します。

属性

説明

スキーマ

コンテンツの完全性

gen_ai.input.messages

入力メッセージ

gen_ai.input.messages

記録されません

gen_ai.output.messages

出力メッセージ

gen_ai.output.messages

記録されません

gen_ai.system_instructions

システムインストラクション

gen_ai.system_instructions

記録されません

gen_ai.tool.definitions

ツール定義

-

  • type

  • name

設定

  • 次の環境変数を設定します。

    環境変数名

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    False

  • Java アプリケーションの場合、次のシステムプロパティを起動コマンドに追加することもできます。

    -Dotel.instrumentation.genai.capture-message-content=false

GenAI クライアントスパン 1

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

gen_ai.tool.definitions

[
  {
    "type": "function",
    "name": "get_weather"
  }
]

GenAI クライアントスパン 2

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-call_VSPygqKTWdrhaFErNvMV18Yl"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

会話履歴のログ記録

収集の挙動とデータフォーマット

このモードでは、スパンの属性には基本情報のみが格納されます。エージェントは、入力メッセージ、出力メッセージ、システム指示、ツール定義などの詳細情報を、単一行の JSON エントリとしてローカルのログファイルに書き込みます。

属性

説明

スキーマ

コンテンツの完全性

gen_ai.input.messages

入力メッセージ

gen_ai.input.messages

完全

gen_ai.output.messages

出力メッセージ

gen_ai.output.messages

完全

gen_ai.system_instructions

システム指示

gen_ai.system_instructions

完全

gen_ai.tool.definitions

ツール定義

-

  • type

  • name

  • description

デフォルトでは、エージェントが起動すると、次の場所を順に確認して、利用可能なログディレクトリを検索します:

  1. APSARA_APM_AGENT_WORKSPACE_DIR 環境変数を使用してディレクトリが指定されている場合、エージェントはそのディレクトリ内の .apsara-apm/{language}/logs サブディレクトリにログを書き込みます。

  2. エージェントログディレクトリ: /home/admin/.opt/.apsara-apm/{language}/logs

  3. ホームディレクトリ: ~/.apsara-apm/{language}/{agent_version}_{agent_commit_id}/logs

アプリケーションが起動すると、エージェントはログストレージディレクトリを示すメッセージを標準出力に出力します。ディレクトリ管理を容易にするために、APSARA_APM_AGENT_WORKSPACE_DIR 環境変数を使用してディレクトリを指定することを推奨します。

Picked up [/Uxxxs/tools/log/.apsara-apm/python] as Agent Workspace.

会話履歴ログファイルは、genai_messages_{ip}_{pid}.log というフォーマットで命名されます。最大ファイルサイズは 256 MB です。このサイズを超えると、ファイルローテーションが実行されます。システムは最新の 2 つのログファイルのみを保持し、古いものは削除します。

設定

  • 次の環境変数を設定してください:

    環境変数

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    True

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_CAPTURE_STRATEGY

    event

  • Java アプリケーションの場合、起動コマンドにシステムプロパティーを追加してこれを設定することもできます。例:

    -Dotel.instrumentation.genai.capture-message-content=true \
    -Dotel.instrumentation.genai.message-content.capture-strategy=event

GenAI クライアントスパン 1

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

GenAI クライアントイベント 1

spanId は GenAI Client Span 1 に対応します。

{
  "scope": {
    "name": "aliyun.instrumentation.openai",
    "version": "1.0.1"
  },
  "timeUnixNano": 1760080084146812928,
  "severity": "UNSPECIFIED",
  "attributes": {
    "event.name": "gen_ai.client.inference.operation.details",
    "gen_ai.provider.name": "openai",
    "gen_ai.operation.name": "chat",
    "gen_ai.request.model": "gpt-4",
    "gen_ai.request.max_tokens": 200,
    "gen_ai.request.top_p": 1.0,
    "gen_ai.response.id": "chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l",
    "gen_ai.response.model": "gpt-4-0613",
    "gen_ai.usage.output_tokens": 17,
    "gen_ai.usage.input_tokens": 47,
    "gen_ai.response.finish_reasons": ["tool_calls"],
    "gen_ai.input.messages": "[{\"role\":\"user\",\"parts\":[{\"type\":\"text\",\"content\":\"Weather in Paris?\"}]}]",
    "gen_ai.output.messages": "[{\"role\":\"assistant\",\"parts\":[{\"type\":\"tool_call\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"name\":\"get_weather\",\"arguments\":{\"location\":\"Paris\"}}],\"finish_reason\":\"tool_call\"}]",
    "gen_ai.tool.definitions": "[{\"type\":\"function\",\"name\":\"get_weather\",\"description\":\"Get the current temperature for a specific location.\"}]"
  },
  "traceId": "0b46a347592ac487ed092ebe802c6818",
  "spanId": "b3c40af8cd1a522c"
}

GenAI クライアントスパン 2

属性

スパン名

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-VSPygqKTWdrhaFErNvMV18Yl"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

GenAI クライアントイベント 2

spanId は GenAI Client Span 2 に対応します。

{
  "scope": {
    "name": "aliyun.instrumentation.openai",
    "version": "1.0.1"
  },
  "timeUnixNano": 1760080084176812928,
  "severity": "UNSPECIFIED",
  "attributes": {
    "event.name": "gen_ai.client.inference.operation.details",
    "gen_ai.provider.name": "openai",
    "gen_ai.operation.name": "chat",
    "gen_ai.request.model": "gpt-4",
    "gen_ai.request.max_tokens": 200,
    "gen_ai.request.top_p": 1.0,
    "gen_ai.response.id": "chatcmpl-VSPygqKTWdrhaFErNvMV18Yl",
    "gen_ai.response.model": "gpt-4-0613",
    "gen_ai.usage.output_tokens": 52,
    "gen_ai.usage.input_tokens": 97,
    "gen_ai.response.finish_reasons": ["stop"],
    "gen_ai.input.messages": "[{\"role\":\"user\",\"parts\":[{\"type\":\"text\",\"content\":\"Weather in Paris?\"}]},{\"role\":\"assistant\",\"parts\":[{\"type\":\"tool_call\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"name\":\"get_weather\",\"arguments\":{\"location\": \"Paris\"}}]},{\"role\":\"tool\",\"parts\":[{\"type\":\"tool_call_response\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"response\":\"rainy, 57°F\"}]}]",
    "gen_ai.output.messages": "[{\"role\":\"assistant\",\"parts\":[{\"type\":\"text\",\"content\":\"The weather in Paris is currently rainy with a temperature of 57°F.\"}],\"finish_reason\":\"stop\"}]"
  },
  "traceId": "0b46a347592ac487ed092ebe802c6818",
  "spanId": "0a706a178bd746c5"
}

会話履歴の SLS への送信

会話履歴をローカルログに記録するモードでは、LoongCollector を使用してローカルログを収集し、処理のために Log Service (SLS) に送信できます。

ステップ 1:LoongCollector のインストール

環境に LoongCollector が既にインストールされている場合は、このステップを省略できます。

[環境タイプ]

[参照]

Linux

コレクターのインストール

Windows

コレクターのインストール

Kubernetes

インストールと設定

ステップ 2:収集設定の作成

  1. Log Service コンソールにログインします。対象のプロジェクトをクリックし、ログを保存する Logstore を展開してから、 [データインポート] の横にある image アイコンをクリックします。 [JSON - テキストログ] セクションで、 Connect Now をクリックします。

  2. 既存のマシングループを選択するか、ログが保存されているホスト用に新しいマシングループを作成します。

    [シナリオ] では [ホストシナリオ] を選択します。[インストール環境] では [ECS] を選択します。[適用されたマシングループ] リストで、対象のマシングループ (例: genai) が追加されていることを確認します。

  3. 収集設定を作成します。 [入力設定] で、 [ファイルパス] を実際のログディレクトリに置き換えます。ディレクトリパスを確認するには、起動時のアプリケーションの標準出力を確認してください。 [処理設定] では、標準 JSON 解析を選択します。

    たとえば、 [設定名]playground-test-config に設定し、 [入力タイプ][テキストログ収集] を選択し、 /home/admin/logs/.apsara-apm/java/**/logs/genai_messages_*.log のようなファイルパス形式を使用し、 [最大ディレクトリモニタリング深さ]1 に設定します。

    xxx
    Picked up /home/admin/logs/.apsara-apm/java/4.6.0_4e280e61/ as Agent Workspace.
    Unable to locate the -XX:ErrorFile parameter in the JVM options.
    If you are using Kubernetes, we recommend updating ack-onepilot to version 3.2.3 or later.
    For other environments, please consider adding the following parameters manually:
    -XX:ErrorFile=/{JavaAgentDirectory}/hs_err_pid%p.log
    -XX:OnError=/{JavaAgentDirectory}/crash_log_collector.sh
    These settings will enable automatic crash log collection to ARMS, helping us monitor
     incidents and provide timely feedback.
    Please note that this reminder does not affect the functionality of ARMS.
    If you prefer not to make these changes, feel free to disregard this message.
    Apsara Java Agent start cost: 5071 ms
  4. データの取得と分析を有効にするには、次のようにインデックスを設定します:
    [フルテキストインデックス] を有効にしますが、 [大文字と小文字の区別][中国語文字を含める] は無効にします。[指定フィールドでのクエリ] で、次のフィールドのインデックスを追加します: [属性] (タイプ:json。[大文字と小文字の区別][中国語文字を含める] を有効にします)、 [リソース] (タイプ:json。[大文字と小文字の区別][中国語文字を含める] を有効にします)、 [spanId] (タイプ:text。[大文字と小文字の区別][中国語文字を含める] を無効にします)、 [traceId] (タイプ:text。[大文字と小文字の区別][中国語文字を含める] を無効にします)。







説明

ログ収集の詳細については、ホストからテキストログを継続的に収集するをご参照ください。

ステップ 3:SLS で収集されたログの表示

初期設定が完了すると、数分以内に SLS にログが表示されます。

▼ attributes: {}
    event.name: "gen_ai.client.inference.operation.details"
    gen_ai.input.messages: "[{"role":"system","parts":[{"type":"text","content":"	
xxx
xxx
xxx
:
xxx
                              xxx"}]},{"role":"user","parts":[{"type":"text","content":"xxx"}]}]"
    gen_ai.operation.name: "invoke_agent"
    gen_ai.output.messages: "[{"role":"assistant","parts":[{"type":"text","content":"
xxx
                                    "}],"finishReason":"stop"}]"
    gen_ai.provider.name: "spring-ai"
    gen_ai.request.model: "qwen-max"
    gen_ai.request.temperature: 0.8
  ► gen_ai.response.finish_reasons: []
    gen_ai.response.id: "0d98f.xxx"
    gen_ai.tool.definitions: "[{"type":"function","name":"getBookingDetails"},{"type":"function","name":"cancelBooking"},{"type":"function","name":"changeBooking"}]"
    gen_ai.usage.input_tokens: 1300
    gen_ai.usage.output_tokens: 59
body:
▼ resource: {}
  ► attributes: {}

メッセージ長の制限の調整

過剰な使用量を防ぐため、プローブはメッセージあたり 8192 文字のデフォルト上限を超えるメッセージ内容を切り捨てます。切り捨てられたメッセージには、次の例のように ...[truncated] 識別子が付きます:

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "text",
        "content": "The weather in Paris...[truncated]"
      }
    ],
    "finish_reason": "stop"
  }
]

設定

  • 次の環境変数を使用して上限を設定します:

    環境変数

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_MAX_LENGTH

    8192

  • Java アプリケーションの場合は、起動コマンドにシステムプロパティを追加して、この上限を設定することもできます。例:

    -Dotel.instrumentation.genai.message.content.max.length=8192

切り捨て対象のメッセージ本文

会話履歴タイプ

メッセージ

gen_ai.input.messages

TextPart.content

gen_ai.output.messages

TextPart.content

gen_ai.system_instructions

TextPart.content