注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

関数の計装とテレメトリー

関数から特定の種類のテレメトリーを発行して、本番ワークフローの監視とデバッグに使用できます。

関数が発行したテレメトリーを表示する方法については、オントロジーと AIP の観測可能性に関するドキュメントを参照してください。

サポートされるテレメトリーの種類

次のテーブルは、関数の各言語でサポートされるテレメトリーの種類の概要を示しています。すべての種類の関数で、関数の実行時間全体を対象とする1個のスパンと、1件のリクエストログが自動的に作成されます。

言語ログスパンメトリクス
TypeScript v1はい製品で定義されたスパンのみ[1]製品で定義されたメトリクスのみ[2]
TypeScript v2はいはい[3]製品で定義されたメトリクスのみ[2]
Pythonはいはい[3]製品で定義されたメトリクスのみ[2]

[1] TypeScript v1 関数の製品で定義されたスパンには、オブジェクトの読み込みやクエリの実行などの操作が含まれます。

[2] Foundry は、すべての種類の関数について実行時間全体を記録します。

[3] TypeScript v2 関数と Python 関数では、すべての送信ネットワークリクエストが自動的に計装されますが、カスタムスパンを追加することもできます。

ログ

関数からカスタムログを発行し、後から表示できます。次の例は、TypeScript v1 関数、TypeScript v2 関数、Python 関数からログを発行する方法を示しています。

TypeScript v2 関数では、Foundry が OpenTelemetry SDK のグローバルロガープロバイダーを設定し、そこからロガーを取得できます。ログ記録にサードパーティーのライブラリを使用する場合は、グローバルロガープロバイダーから取得したロガーを通じてログを発行するように、それらのライブラリを設定する必要があります。

Copied!
1 2 3 4 5 6 7 export class MyFunctions { @Function() public myFunction(name: string): string { console.log(`This is a custom log line, ${name}.`); return `Hello, ${name}!`; } }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import { logs } from "@opentelemetry/api-logs"; const logger = logs.getLogger("my-function"); export default function myFunction(name: string): string { logger.emit({ body: "This is a custom log line.", attributes: { name }, }); // グローバルな console オブジェクトも使用できます console.log(`This is a custom log line, ${name}.`); return `Hello, ${name}!`; }
Copied!
1 2 3 4 5 6 7 8 9 10 import logging from functions.api import function logger = logging.getLogger(__name__) @function def my_function(name: str) -> str: logger.info("This is a custom log line.") return f"Hello, {name}!"

ログ記録のベストプラクティス

次のログ記録のプラクティスに従います。

  • 適切なログレベルを選択する: 通常の操作には INFO、復旧可能な問題には WARN、失敗には ERROR、詳細な診断には DEBUG を使用します。
  • 関連するコンテキストを含める: 実行フローを理解しやすくするため、識別子、件数、操作の詳細を追加します。
  • 機密データのログ記録を避ける: 資格情報、機密情報が含まれている可能性のある API レスポンスの全文、その他のセキュリティ上機密性の高い内容をログに記録しないでください。

効果的なログの記述、サービスログの表示、ログレベルによる絞り込みについての詳細なガイダンスは、サービスログとデバッグを参照してください。

スパン

TypeScript v2 関数と Python 関数では、カスタムスパンを作成して特定の操作の所要時間を追跡することもできます。次の例は、カスタムスパンを作成する方法を示しています。

TypeScript v2 関数と Python 関数では、Foundry が OpenTelemetry SDK のグローバルトレーサープロバイダーを設定し、そこからトレーサーを取得できます。トレーシングにサードパーティーのライブラリを使用する場合は、グローバルトレーサープロバイダーから取得したトレーサーを通じてトレースを発行するように、それらのライブラリを設定する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { trace } from "@opentelemetry/api"; import { Integer } from "@osdk/functions"; const tracer = trace.getTracer("my-function"); export default function sqrt(n: Integer): Integer { const sqrt = tracer.startActiveSpan("my-custom-span", (span) => { try { return Math.sqrt(n); } finally { span.end(); } }); return sqrt; }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 import math from functions.api import function from opentelemetry import trace tracer = trace.get_tracer(__name__) @function def sqrt(n: int) -> int: with tracer.start_as_current_span("my-custom-span"): return math.sqrt(n)