OpenTelemetry Kotlin の設定
OpenTelemetry Kotlin SDK は、DSL パラメーターを通じて初期化時に設定されます。
createOpenTelemetry と createCompatOpenTelemetry はどちらも同じ DSL を使用し、完全な例を以下に示します。
val otel: OpenTelemetry = createOpenTelemetry {
// ここで SDK を設定する
}
以下のセクションでは、SDK の動作のさまざまな側面を設定する方法を示します。 これは SDK を設定する方法の網羅的なリストではなく、最も一般的なユースケースを取り上げています。
エクスポート
OTLP によるテレメトリーのエクスポート
OpenTelemetry Kotlin は、HTTP 上のバイナリエンコーディングによる OTLP でのエクスポートをサポートしています。 ログとトレースは以下の設定でエクスポートでき、OpenTelemetry Collector のデフォルトポートにデータを送信します。
val baseUrl = "http://localhost:4318"
val otel: OpenTelemetry = createOpenTelemetry {
tracerProvider {
export {
batchSpanProcessor(otlpHttpSpanExporter(baseUrl))
}
}
loggerProvider {
export {
batchLogRecordProcessor(otlpHttpLogRecordExporter(baseUrl))
}
}
}
リソース
リソースをグローバルに設定して、すべてのシグナルに属性を追加できます。
val otel: OpenTelemetry = createOpenTelemetry {
serviceName = "checkout"
resource(schemaUrl = "https://opentelemetry.io/schemas/1.30.0") {
setStringAttribute("service.namespace", "payments")
setBooleanAttribute("feature.experimental_checkout", true)
setLongAttribute("service.instance.replica", 3)
setDoubleAttribute("rollout.percentage", 0.25)
setStringListAttribute("service.tags", listOf("checkout", "v2"))
}
tracerProvider {
resource {}
}
}
リソースを単一のシグナルにスコープすることも可能です。 これはグローバル設定とマージされます(ローカルが優先されます)。
val otel: OpenTelemetry = createOpenTelemetry {
tracerProvider {
resource {
setStringAttribute("service.namespace", "payments")
}
}
}
糖衣構文により、Map<String, Any> からリソースを設定することもできます。
val otel: OpenTelemetry = createOpenTelemetry {
resource {
resource(mapOf("service.namespace" to "payments"))
}
}
デフォルトでは、SDK は常に service.name、service.version、telemetry.sdk.* を設定します。
これらは独自の値を指定することで上書きできます。
制限
属性の制限
属性の制限は、属性の数と属性値の文字数を制限します。 以下のようにグローバルに設定できます。
val otel: OpenTelemetry = createOpenTelemetry {
attributeLimits {
attributeCountLimit = 200
attributeValueLengthLimit = 256
}
}
ログの制限
ログの制限は属性の制限セクションと同様に機能しますが、ログレコードに限定されます。
val otel: OpenTelemetry = createOpenTelemetry {
loggerProvider {
logLimits {
attributeCountLimit = 200
attributeValueLengthLimit = 256
}
}
}
スパンの制限
スパンの制限は属性の制限セクションで示したものと同じ制限を提供し、さらにキャプチャされるスパンとイベントの数を制限する設定も提供します。
val otel: OpenTelemetry = createOpenTelemetry {
tracerProvider {
spanLimits = 200
eventCountLimit = 250
attributeCountPerEventLimit = 50
attributeCountPerLinkLimit = 20
attributeCountLimit = 200
attributeValueLengthLimit = 256
}
}
暗黙的コンテキストストレージ
暗黙的コンテキストの計装ガイドで説明されているように、暗黙的コンテキストを格納するデフォルトのメカニズムを変更できます。
デフォルトではグローバルなプロセス全体のメカニズムに格納されますが、storageMode でスレッドローカルに変更できます。
val otel: OpenTelemetry = createOpenTelemetry {
context {
storageMode = ImplicitContextStorageMode.THREAD_LOCAL
// storage { MyCustomStorage() }
}
}
カスタムストレージメカニズムを実装することもできます。 以下の例は、OpenTelemetry Kotlin のグローバルコンテキストストレージに対するデフォルトのアプローチと同じ動作を実装しています。
val otel: OpenTelemetry = createOpenTelemetry {
context {
storage { MyCustomStorage() }
}
}
class CustomStorage(private val default: Context): ImplicitContextStorage {
private var ref: Context = default
override fun setImplicitContext(context: Context) {
ref = context
}
override fun implicitContext(): Context = ref
}
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!