Firebase Genkit ライブラリは OpenTelemetry で計測可能 トレース、指標、ログの収集をサポートできますGenkit のユーザーは テレメトリー データをモニタリング ツールや可視化ツールに提供するために、 OpenTelemetry Go SDK を構成します。 特定の OpenTelemetry 対応システムにエクスポートできます。
Genkit には、データをエクスポートするように OpenTelemetry を構成するプラグインが含まれています。 Google Cloud Monitoring と Cloud Logging。サポート 使用する場合は、テレメトリー プラグインを記述することで Genkit を拡張できます。 このページで説明するとおりです。
始める前に
作成について詳しくは、Genkit プラグインの作成をご覧ください。
テレメトリープラグインを含むあらゆる Genkit プラグインに
対応しています特に
すべてのプラグインは、ユーザーが呼び出すことが想定される Init
関数をエクスポートする必要があります。
確認しましょう。
エクスポータとロガー
前述のように、テレメトリー プラグインの主な役割は、 データをエクスポートするための OpenTelemetry(Genkit がすでに計測可能になっている) アクセスを制限することです。これを行うには、次のものが必要です。
- OpenTelemetry の
SpanExporter
の実装 任意のサービスにデータをエクスポートできます。 - OpenTelemetry の
metric.Exporter
の実装 任意のサービスにデータをエクスポートできます。 slog.Logger
またはslog.Handler
の実装 任意のサービスにログをエクスポートできます。
エクスポート先のサービスによっては、 比較的軽微な作業か大規模な作業かです。
OpenTelemetry は業界標準であるため、多くのモニタリング サービスはすでに
これらのインターフェースを実装するライブラリがあります。たとえば、googlecloud
プラグインでは、Genkit の
opentelemetry-operations-go
このライブラリは Google Cloud チームによって管理されています。
同様に、多くのモニタリング サービスには、
標準の slog
インターフェース。
一方、サービスに利用できるライブラリがない場合は、 必要なインターフェースの実装は大規模なプロジェクトになる場合があります。
OpenTelemetry レジストリを確認する またはモニタリング サービスのドキュメントを参照して、統合がすでに利用可能かどうかを確認してください。
これらの統合をご自身で構築する必要がある場合は、
OpenTelemetry の公式エクスポータ
および slog
ハンドラの作成ガイドのページをご覧ください。
プラグインのビルド
依存関係
すべてのテレメトリー プラグインは、Genkit コアライブラリといくつかの OpenTelemetry ライブラリ:
import {
// Import the Genkit core library.
"github.com/firebase/genkit/go/core"
// Import the OpenTelemetry libraries.
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/trace"
}
既存の OpenTelemetry または slog
を中心にプラグインを構築する場合
インポートすることも必要です
Config
テレメトリー プラグインは、少なくとも次の構成をサポートする必要があります。 オプション:
type Config struct {
// Export even in the dev environment.
ForceExport bool
// The interval for exporting metric data.
// The default is 60 seconds.
MetricInterval time.Duration
// The minimum level at which logs will be written.
// Defaults to [slog.LevelInfo].
LogLevel slog.Leveler
}
以下の例では、これらのオプションが利用可能であることを前提としています。 対応方法に関するガイダンスを提供します。
ほとんどのプラグインには、対象サービスの設定も含まれます。 (API キー、プロジェクト名など)のエクスポート先を指定します。
Init()
テレメトリー プラグインの Init()
関数は、次のすべてを行う必要があります。
Genkit が開発環境で実行されている(例:
genkit start
で実行され、Config.ForceExport
オプションが set:shouldExport := cfg.ForceExport || os.Getenv("GENKIT_ENV") != "dev" if !shouldExport { return nil }
トレーススパン エクスポータを初期化し、Genkit に登録します。
spanProcessor := trace.NewBatchSpanProcessor(YourCustomSpanExporter{}) core.RegisterSpanProcessor(spanProcessor)
指標エクスポータを初期化して OpenTelemetry に登録する ライブラリ:
r := metric.NewPeriodicReader( YourCustomMetricExporter{}, metric.WithInterval(cfg.MetricInterval), ) mp := metric.NewMeterProvider(metric.WithReader(r)) otel.SetMeterProvider(mp)
次の場合はユーザー構成の収集間隔(
Config.MetricInterval
)を使用するPeriodicReader
を初期化する。slog
ハンドラをデフォルトのロガーとして登録します。logger := slog.New(YourCustomHandler{ Options: &slog.HandlerOptions{Level: cfg.LogLevel}, }) slog.SetDefault(logger)
ユーザーが指定した最小ログ数に従うようにハンドラを構成する必要があります。 レベル(
Config.LogLevel
)。
PII の秘匿化
ほとんどの生成 AI フローはなんらかのユーザー入力から始まるため、 一部のフロートレースに、個人を特定できる情報(PII)を含む 保護します。ユーザーのプライバシーを保護するにはPII は秘匿化する必要があります。 エクスポートする前にトレースから抽出できます
独自のスパン エクスポータを構築する場合は、 その内容に入ります
既存の OpenTelemetry インテグレーションを中心にプラグインを作成する場合は、
指定のスパン エクスポータを、これを実行するカスタム エクスポータでラップできます。
タスクを実行します。たとえば、googlecloud
プラグインは genkit:input
と
ラッパーを使用してエクスポートする前に、すべてのスパンの genkit:output
属性
次のようになります。
type redactingSpanExporter struct {
trace.SpanExporter
}
func (e *redactingSpanExporter) ExportSpans(ctx context.Context, spanData []trace.ReadOnlySpan) error {
var redacted []trace.ReadOnlySpan
for _, s := range spanData {
redacted = append(redacted, redactedSpan{s})
}
return e.SpanExporter.ExportSpans(ctx, redacted)
}
func (e *redactingSpanExporter) Shutdown(ctx context.Context) error {
return e.SpanExporter.Shutdown(ctx)
}
type redactedSpan struct {
trace.ReadOnlySpan
}
func (s redactedSpan) Attributes() []attribute.KeyValue {
// Omit input and output, which may contain PII.
var ts []attribute.KeyValue
for _, a := range s.ReadOnlySpan.Attributes() {
if a.Key == "genkit:input" || a.Key == "genkit:output" {
continue
}
ts = append(ts, a)
}
return ts
}
トラブルシューティング
目的の場所にデータが表示されない場合は、OpenTelemetry を 便利な診断ツールを提供 問題の原因を特定するのに役立つことがあります。