Skip to content

OpenTelemetryログ

デプロイのログタブでは、OpenTelemetry(OTel)標準形式でモデルおよびエージェントワークフローからログを受信し、アプリケーションのパフォーマンスやエラーに関する詳細な分析、トラブルシューティング、理解のために、関連するログ情報を一元化します。 さらに、モニタリング > データ探索タブでは、スパン固有のログをフィルターして表示することが可能です。

収集されたログは期間指定によるフィルター機能を提供し、OTel Logs APIを利用することで同様のフィルター機能を備えたログをプログラムでエクスポートすることが可能です。 ログはOTelに準拠しているため、サードパーティ製のオブザーバビリティツール(Datadogなど)へのエクスポートのために標準化されています。

アクセスと保持

OTel logs are available for all deployment and target types. Only users with Owner and User roles on a deployment can view these logs. Logs data is stored for a retention period of 30 days, after which it is automatically deleted.

To access the logs for a deployment, on the Deployed workloads tab, locate and click the deployment, click the Activity log tab, and then click Logs. 利用可能なログレベルはINFODEBUGWARNCRITICAL、およびERRORです。

コントロール 説明
範囲(UTC) ログの日付範囲(直近15分直近1時間直近1日、またはカスタム範囲)を選択します。
レベル 表示するログレベル(デバッグ情報警告エラー、または重要)を選択します。
表示を更新 ログタブの内容を更新して、新しいログを読み込みます。
ログをコピー 現在のログタブビューの内容をコピーします。
検索 ログタブのテキストコンテンツを検索します。

OTelログのエクスポート

以下のコード例では、OTel Logs APIを使用してデプロイのOpenTelemetry互換ログを取得し、プレビューとERRORログの数を表示した後、ログを出力ファイルに書き込みます。 コードを実行する前に、entity_id変数にデプロイIDを設定し、<DEPLOYMENT_ID>をデプロイの概要タブまたはURLから取得したデプロイIDに置き換えます。 さらに、export_logs_to_json関数を、ターゲットとするオブザーバビリティサービスで想定される形式に合わせて変更できます。

DataRobot Pythonクライアントのバージョン

以下のスクリプトを実行するには、OpenTelemetryのロギングサブモジュールをサポートするために、datarobotバージョン3.11.0以降がインストールされている必要があります。

Export OTel logs to JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import json
import datarobot as dr
from datarobot.models.otel import OtelLogEntry

# Initialize DataRobot client for authentication
dr_client = dr.Client()

# Provide DataRobot entity information
entity_type: str = "deployment"
entity_id: str = "<DEPLOYMENT_ID>" # From the deployment Overview tab or URL

# Set output filename
output_filename: str = "datarobot_otel_logs.json"

def export_logs_to_json(logs: list[OtelLogEntry], filename: str) -> None:
    """Export logs to a JSON file"""
    log_entries = []
    for log in logs:
        log_payload = dict(log.__dict__)
        log_payload.update(
            {
                "entity_type": entity_type,
                "entity_id": entity_id,
                "timestamp": log.timestamp.isoformat(),
            }
        )
        log_entries.append(log_payload)

    with open(filename, 'w') as f:
        json.dump(log_entries, f, indent=2)

# Get and export OTel logs
try:
    print(f"Getting logs for {entity_type} {entity_id}...")
    logs: list[OtelLogEntry] = OtelLogEntry.list(entity_type, entity_id)
    print(f"Found {len(logs)} logs")

    # Preview first few logs
    for log in logs[:5]:
        print(f"{log}")

    # Example: Filter for ERROR logs only
    error_logs = [log for log in logs if log.level.upper() == 'ERROR']
    print(f"Found {len(error_logs)} ERROR logs")

    # Export to JSON file
    print(f"Writing logs to {output_filename}...")
    export_logs_to_json(logs, output_filename)
    print(f"Exported {len(logs)} logs to {output_filename}")

except dr.errors.ClientError as e:
    print(f"API Error: {e}")
except FileNotFoundError as e:
    print(f"File Error: {e}")
except Exception as e:
    print(f"Unexpected Error: {e}")