コンテンツにスキップ

OpenTelemetry で NextPDF Connect を観測する

NextPDF には、PDF 生成ライフサイクル全体にわたってトレーススパンとメトリクスを発行する組み込みの OpenTelemetry インストルメンテーションが備わっています。クラスパス上に OpenTelemetry SDK が存在しない場合、インストルメンテーションは不活性のままです。パフォーマンスへのペナルティも、オートロードの失敗も、追加設定もありません。これはトランスポート非依存のコンセプトページであるため、PDF がインプロセス呼び出し、MCP の tools/call、REST リクエスト、または NextPDF Connect に対する gRPC 呼び出しのいずれで生成される場合でも、同じインストルメンテーションが適用されます。

このページは、実行可能なレシピというより、説明として読んでください。OpenTelemetry SDK とエクスポーターは NextPDF ではなくホストアプリケーションが提供するため、このページには、再現可能なハッシュを固定できる自己完結型の例はありません。

ホストアプリケーションが OpenTelemetry SDK と 1 つのエクスポーターを選択し、インストールします。NextPDF はグローバルに登録されたトレーサープロバイダーを読み取り、独自の SDK はバンドルしません。トレースを前提にする前に、バンドルされている可用性プローブを実行し、NextPDF が SDK を認識できることを確認してください。プローブが true を返すのは、OpenTelemetry API がクラスパス上にある場合に限られます。

NextPDF は、ドキュメントビルドのライフサイクルに関するスパンと、少数のカウンターおよびヒストグラムを発行します。スパンは、ルートのビルドスパンに加えて、フォント解決、HTML パース、レイアウト、画像デコード、シリアライズ、およびオプションのバーコード、フォーム、ナビゲーション、添付の各フェーズを対象とします。メトリクスは、レンダリング時間、ページ数、警告数、ピークメモリ、出力サイズ、フォント数、画像数を対象とします。正確なスパンとメトリクスの一覧は、インストールされている NextPDF バージョンに依存します。古い記述にある固定の個数はバージョン依存として扱ってください。数値を暗記するのではなく、実行中のビルドに照らして確認してください。

NextPDF Connect が Web フレームワークの背後で動作する場合、Connect 呼び出しは受信リクエストのトレースの子として表示されます。これにより、1 つの分散トレースが HTTP エントリ、アプリケーション、PDF ビルドにまたがります。

このページは、どの Connect ツールも宣言するものではありません。代わりに、横断的なインストルメンテーションについて説明します。ツールサーフェスについては /connect/tool-catalog/ を参照してください。トランスポートについては /transports/mcp/、/transports/rest/、/transports/grpc/. を参照してください。

PDF を生成する前にトレーサープロバイダーを構築してグローバルに登録し、その後は通常どおり生成します。NextPDF の内部インストルメンテーションは、呼び出しごとにコードを書かなくても、スパンとメトリクスを自動的に発行します。バッファされたスパンが失われないよう、プロセス終了時にプロバイダーをフラッシュしてください。具体的なプロバイダーとエクスポーターの配線方法は、ホストアプリケーションの選択に委ねられます。その内容は OpenTelemetry PHP プロジェクトで文書化されているため、このページでは再掲しません。

HTTP でエクスポートするコレクターの場合、ホストは PSR-18 HTTP クライアントを提供します。トランスポートの失敗と、非成功の HTTP ステータスは、2 つの別個のケースとして扱ってください。PSR-18 クライアントが型付きのクライアント例外を送出するのは、リクエストをまったく送信できない場合に限られます(PSR-18 §4)。これに対し、4xx/5xx のレスポンスは呼び出し元に通常どおり返され、例外ではありません(PSR-18 §4)。コレクターのエクスポートパスと Connect ツールのトランスポートは独立しているため、コレクターのエクスポートが失敗しても、PDF 生成そのものを失敗させてはなりません。

  • 最初の生成後にプロバイダーを登録した場合。 登録前に作成されたスパンは no-op トレーサーを使用し、バックエンドには決して到達しません。プロバイダーはアプリケーションのブート時に登録してください。
  • 終了時のフラッシュがない場合。 バッチプロセッサーはスパンをバッファし、プロバイダーをシャットダウンせずにプロセスが終了すると、そのスパンは失われます。シャットダウン処理をワーカーまたはカーネルの terminate フックに組み込んでください。
  • gRPC エクスポートには gRPC PHP 拡張が必要です。 HTTP エクスポートには拡張が不要なため、拡張を利用できない場合は HTTP を選択してください。
  • W3C Trace Context の伝播。 受信リクエストに traceparent/tracestate が含まれる場合、SDK はそのコンテキストを NextPDF のスパンへ自動的に伝播し、Connect 呼び出しは呼び出し元のトレースに参加します。

インストルメンテーションのオーバーヘッドは、PDF 生成時間に比べてごく小さいものです。フロントマターのバジェットは保証ではなく、ドキュメント上の上限です。リクエストレートが高い場合は、ヘッドベースまたはコレクター側のサンプリングを使用して、エクスポート量とコストを抑えてください。

NextPDF は、迂回できない厳格なテレメトリーデータポリシーを強制します。固定の属性許可リストは、構造的なメタデータとパフォーマンスメトリクスのみをエクスポートします。具体的には、ページ数、フォント数、画像数、ファイルサイズ、出力プロファイル名、ブール値フラグ、所要時間、メモリ、バージョンおよびティアの識別子です。ドキュメントの内容、ファイルパス、生のストリームバイト、base64 ペイロード、個人データ、認証情報は決してエクスポートされません。許可リストにない属性はすべて破棄され、キー自体が許可されている場合でも、ペイロードのパターンに一致する値も破棄されます。この性質により、ドキュメントデータを漏らすことなく、トレースを共有の可観測性パイプラインに流せます。これはライブラリの振る舞いであって、トレースを受信するバックエンドに関するデプロイメントレベルの保証ではありません。

主張条項reference_id
トランスポートの失敗が、PSR-18 のクライアント例外となる唯一のケースPSR-18 §4
4xx/5xx のレスポンスは通常の戻り値であり、例外ではないPSR-18 §4

OpenTelemetry プロトコルと W3C Trace Context フォーマットは外部仕様であり、それぞれの団体によって維持管理されています。このページはそれらへの適合を主張せず、本文を再掲することもしません。正式な定義は、公開された OpenTelemetry 仕様(https://opentelemetry.io/docs/specs/otel/)および W3C Trace Context 勧告(https://www.w3.org/TR/trace-context/)に存在します。

該当なし。インストルメンテーションはコア機能であり、ゲートされません。

インストルメンテーションはトランスポート非依存です。どのトランスポートで実行される Connect 呼び出しも同じビルドライフサイクルのスパンを生成し、ホストがトランスポート層をインストルメント化している場合、トランスポートはそれを囲む独自のスパンを追加します。

可観測性はリスクモデルと直交します。テレメトリーの発行はツールのリスクレベルを変更せず、ConfirmationGate によってゲートされることも決してありません。

該当なし。テレメトリーの発行はツールの呼び出しではないため、ゲートを通過しません。

  • /connect/tool-catalog/:観測対象となるツールサーフェス。
  • /transports/mcp/ / /transports/rest/ / /transports/grpc/:トレース対象の Connect 呼び出しが到達しうるトランスポート。