注: 以下の翻訳の正確性は検証されていません。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 7export 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 17import { 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 10import 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 を使用します。効果的なログの記述、サービスログの表示、ログレベルによる絞り込みについての詳細なガイダンスは、サービスログとデバッグを参照してください。
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 16import { 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 12import 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)