From 188d2c606749572de4e9b6c1649f41d2fbbfdc47 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Mon, 20 May 2024 09:20:51 +0000 Subject: [PATCH 1/8] adding instrumentation configuration --- CHANGELOG.md | 2 + examples/kitchen-sink.yaml | 34 +++++++++ schema/instrumentation.json | 92 +++++++++++++++++++++++++ schema/opentelemetry_configuration.json | 3 + 4 files changed, 131 insertions(+) create mode 100644 schema/instrumentation.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 473b7ee..5d0b464 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +* Adding Instrumentation configuration + ## v0.1.0 - 2023-10-05 Initial configuration schema release, including: diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index e9758ac..4532812 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -426,3 +426,37 @@ resource: - process.command_args # Configure the resource schema URL. schema_url: https://opentelemetry.io/schemas/1.16.0 +# Configure instrumentation +instrumentation: + # Configure options common to multiple languages + common: + peer-service-mapping: + - peer: foo + service: bar + - peer: bar + service: bat + http-capture-headers: + client: + request: + - X-Foo + response: + - X-Foo-* + server: + request: + - X-Bar-* + response: + - X-Bar + db-statement-sanitizer: + enabled: true + foo: bar + # Configure language-specific module options + java: + logback-appender: + experimental: + capture-mdc-attributes: + - attr_one + - attr_two + php: + example_instrumentation: + span_name: test123 + enabled: true diff --git a/schema/instrumentation.json b/schema/instrumentation.json new file mode 100644 index 0000000..668cb97 --- /dev/null +++ b/schema/instrumentation.json @@ -0,0 +1,92 @@ +{ + "$id": "https://opentelemetry.io/otelconfig/instrumentation.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Instrumentation", + "type": "object", + "additionalProperties": true, + "properties": { + "common": { + "type": "object", + "properties": { + "peer-service-mapping": { + "type": "array", + "items": { + "$ref": "#/$defs/PeerServiceMapping" + } + }, + "http-capture-headers": { + "type": "object", + "properties": { + "client": { + "$ref": "#/$defs/RequestResponseHeaders" + }, + "server": { + "$ref": "#/$defs/RequestResponseHeaders" + } + }, + "additionalProperties": false + }, + "db-statement-sanitizer": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + }, + "java": { + "$ref": "#/$defs/JavaModules" + }, + "js": { + "$ref": "#/$defs/JsModules" + }, + "php": { + "$ref": "#/$defs/PhpModules" + }, + "python": { + "$ref": "#/$defs/PythonModules" + } + }, + "$defs": { + "PeerServiceMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "peer": { + "type": "string" + }, + "service": { + "type": "string" + } + }, + "required": [ + "peer", + "service" + ] + }, + "ArrayOfHeaders": { + "type": "array", + "items": { + "type": "string" + } + }, + "RequestResponseHeaders": { + "type": "object", + "properties": { + "request": { + "$ref": "#/$defs/ArrayOfHeaders" + }, + "response": { + "$ref": "#/$defs/ArrayOfHeaders" + } + }, + "additionalProperties": false + }, + "JavaModules": {}, + "JsModules": {}, + "PhpModules": {}, + "PythonModules": {} + } +} \ No newline at end of file diff --git a/schema/opentelemetry_configuration.json b/schema/opentelemetry_configuration.json index d606299..5062ae0 100644 --- a/schema/opentelemetry_configuration.json +++ b/schema/opentelemetry_configuration.json @@ -28,6 +28,9 @@ }, "resource": { "$ref": "resource.json" + }, + "instrumentation": { + "$ref": "instrumentation.json" } }, "required": [ From 13e4b167be15142d99ea8fa69b17068d90ced964 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Tue, 21 May 2024 03:17:30 +0000 Subject: [PATCH 2/8] organise general instrumentation config by semconv --- examples/kitchen-sink.yaml | 37 +++++++++++++---------- schema/instrumentation.json | 60 +++++++++++++++++++++++++------------ 2 files changed, 62 insertions(+), 35 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 4532812..d27be55 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -428,28 +428,33 @@ resource: schema_url: https://opentelemetry.io/schemas/1.16.0 # Configure instrumentation instrumentation: - # Configure options common to multiple languages - common: - peer-service-mapping: - - peer: foo - service: bar - - peer: bar - service: bat - http-capture-headers: + # General SemConv options that may apply to multiple languages + general: + peer: + service-mapping: + - peer: foo + service: bar + - peer: bar + service: bat + http: client: request: - - X-Foo + capture-headers: + - X-Foo response: - - X-Foo-* + capture-headers: + - X-Foo server: request: - - X-Bar-* + capture-headers: + - X-Bar response: - - X-Bar - db-statement-sanitizer: - enabled: true - foo: bar - # Configure language-specific module options + capture-headers: + - X-Bar + db: + statement-sanitizer: + enabled: true + # Language-specific module options java: logback-appender: experimental: diff --git a/schema/instrumentation.json b/schema/instrumentation.json index 668cb97..b26f74b 100644 --- a/schema/instrumentation.json +++ b/schema/instrumentation.json @@ -3,34 +3,47 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Instrumentation", "type": "object", - "additionalProperties": true, + "additionalProperties": false, "properties": { - "common": { + "general": { "type": "object", + "additionalProperties": false, "properties": { - "peer-service-mapping": { - "type": "array", - "items": { - "$ref": "#/$defs/PeerServiceMapping" + "peer": { + "type": "object", + "properties": { + "service-mapping": { + "type": "array", + "items": { + "$ref": "#/$defs/PeerServiceMapping" + } + } } }, - "http-capture-headers": { + "http": { "type": "object", + "additionalProperties": false, "properties": { "client": { - "$ref": "#/$defs/RequestResponseHeaders" + "$ref": "#/$defs/RequestResponseCaptureHeaders" }, "server": { - "$ref": "#/$defs/RequestResponseHeaders" + "$ref": "#/$defs/RequestResponseCaptureHeaders" } - }, - "additionalProperties": false + } }, - "db-statement-sanitizer": { + "db": { "type": "object", + "additionalProperties": false, "properties": { - "enabled": { - "type": "boolean" + "statement-sanitizer": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + } } } } @@ -72,17 +85,26 @@ "type": "string" } }, - "RequestResponseHeaders": { + "CaptureHeaders": { "type": "object", + "additionalProperties": false, "properties": { - "request": { + "capture-headers": { "$ref": "#/$defs/ArrayOfHeaders" + } + } + }, + "RequestResponseCaptureHeaders": { + "type": "object", + "additionalProperties": false, + "properties": { + "request": { + "$ref": "#/$defs/CaptureHeaders" }, "response": { - "$ref": "#/$defs/ArrayOfHeaders" + "$ref": "#/$defs/CaptureHeaders" } - }, - "additionalProperties": false + } }, "JavaModules": {}, "JsModules": {}, From eedeed4422779897b644953b0720d4b57c823781 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Wed, 22 May 2024 01:52:56 +0000 Subject: [PATCH 3/8] update peer service mapping example --- examples/kitchen-sink.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index d27be55..a631c0e 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -432,10 +432,10 @@ instrumentation: general: peer: service-mapping: - - peer: foo - service: bar - - peer: bar - service: bat + - peer: 1.2.3.4 + service: FooService + - peer: 2.3.4.5 + service: BarService http: client: request: From 26ff69958ef787638d1f0431fe49279aafc773f4 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Thu, 23 May 2024 09:41:50 +1000 Subject: [PATCH 4/8] Apply suggestions from code review Co-authored-by: jack-berg <34418638+jack-berg@users.noreply.github.com> --- examples/kitchen-sink.yaml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index a631c0e..92ba0c1 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -426,17 +426,27 @@ resource: - process.command_args # Configure the resource schema URL. schema_url: https://opentelemetry.io/schemas/1.16.0 -# Configure instrumentation +# Configure instrumentation. instrumentation: - # General SemConv options that may apply to multiple languages + # Configure general SemConv options that may apply to multiple languages and instrumentations. general: + # Configure instrumentations following the peer semantic conventions. + # + # See peer semantic conventions: https://opentelemetry.io/docs/specs/semconv/attributes-registry/peer/ peer: + # Configure the service mapping for instrumentations following peer.service semantic conventions. + # + # See peer.service semantic conventions: https://opentelemetry.io/docs/specs/semconv/general/attributes/#general-remote-service-attributes service-mapping: - peer: 1.2.3.4 service: FooService - peer: 2.3.4.5 service: BarService + # Configure instrumentations following the http semantic conventions. + # + # See http semantic conventions: https://opentelemetry.io/docs/specs/semconv/http/ http: + # Configure instrumentations following the http client semantic conentions. client: request: capture-headers: From 92b40a675b740b6e0256e9e5bc12a86e047c21fd Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Thu, 23 May 2024 02:01:51 +0000 Subject: [PATCH 5/8] adding comments, sections for all languages --- examples/kitchen-sink.yaml | 9 ++++++++- schema/instrumentation.json | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 92ba0c1..4ed00ed 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -446,7 +446,7 @@ instrumentation: # # See http semantic conventions: https://opentelemetry.io/docs/specs/semconv/http/ http: - # Configure instrumentations following the http client semantic conentions. + # Configure instrumentations following the http client semantic conventions. client: request: capture-headers: @@ -454,6 +454,7 @@ instrumentation: response: capture-headers: - X-Foo + # Configure instrumentations following the http server semantic conventions. server: request: capture-headers: @@ -461,7 +462,13 @@ instrumentation: response: capture-headers: - X-Bar + # Configure instrumentations following the db semantic conventions. + # + # See db semantic conventions: https://opentelemetry.io/docs/specs/semconv/database/ db: + # Configure database statement sanitization. + # + # See https://opentelemetry.io/docs/specs/semconv/database/database-spans/#common-attributes statement-sanitizer: enabled: true # Language-specific module options diff --git a/schema/instrumentation.json b/schema/instrumentation.json index b26f74b..a190ae3 100644 --- a/schema/instrumentation.json +++ b/schema/instrumentation.json @@ -49,6 +49,21 @@ } } }, + "android": { + "$ref": "#/$defs/AndroidModules" + }, + "cpp": { + "$ref": "#/$defs/CppModules" + }, + "dotnet": { + "$ref": "#/$defs/DotnetModules" + }, + "erlang": { + "$ref": "#/$defs/ErlangModules" + }, + "go": { + "$ref": "#/$defs/GoModules" + }, "java": { "$ref": "#/$defs/JavaModules" }, @@ -60,6 +75,15 @@ }, "python": { "$ref": "#/$defs/PythonModules" + }, + "ruby": { + "$ref": "#/$defs/RubyModules" + }, + "rust": { + "$ref": "#/$defs/RustModules" + }, + "swift": { + "$ref": "#/$defs/SwiftModules" } }, "$defs": { @@ -106,9 +130,17 @@ } } }, + "AndroidModules": {}, + "CppModules": {}, + "DotnetModules": {}, + "ErlangModules": {}, + "GoModules": {}, "JavaModules": {}, "JsModules": {}, "PhpModules": {}, - "PythonModules": {} + "PythonModules": {}, + "RubyModules": {}, + "RustModules": {}, + "SwiftModules": {} } } \ No newline at end of file From e56291f7b4cf9c98ab038be48a1f3a3f86ee35a1 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Thu, 23 May 2024 02:24:10 +0000 Subject: [PATCH 6/8] expand logback example config, comments --- examples/kitchen-sink.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 4ed00ed..b9b2037 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -473,12 +473,21 @@ instrumentation: enabled: true # Language-specific module options java: + # Configure Java's Logback Appender instrumentation. + # + # See https://opentelemetry.io/docs/languages/java/automatic/spring-boot/#logback logback-appender: + experimental-log-attributes: true experimental: + capture-code-attributes: true + capture-marker-attribute: false + capture-key-value-pair-attributes: true + capture-logger-context-attributes: false capture-mdc-attributes: - attr_one - attr_two php: + # Configure PHP's example instrumentation. example_instrumentation: span_name: test123 enabled: true From b1a4e80f0506b96b97dda2ae494269196d94a9bf Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Wed, 29 May 2024 19:31:13 -0500 Subject: [PATCH 7/8] Add all surface area, docs to kitchen-sink.yaml, use consistent case for property keys, remove db semconv options. --- examples/kitchen-sink.yaml | 119 +++++++++++++++-------- schema/instrumentation.json | 188 +++++++++++++++++------------------- 2 files changed, 167 insertions(+), 140 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index d4d4d1c..c965e28 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -434,18 +434,23 @@ resource: - process.command_args # Configure the resource schema URL. schema_url: https://opentelemetry.io/schemas/1.16.0 + # Configure instrumentation. instrumentation: # Configure general SemConv options that may apply to multiple languages and instrumentations. + # + # Instrumenation may merge general config options with the language specific configuration at .instrumentation.. general: # Configure instrumentations following the peer semantic conventions. # # See peer semantic conventions: https://opentelemetry.io/docs/specs/semconv/attributes-registry/peer/ peer: # Configure the service mapping for instrumentations following peer.service semantic conventions. + # + # Each entry is a key value pair where "peer" defines the IP address and "service" defines the corresponding logical name of the service. # # See peer.service semantic conventions: https://opentelemetry.io/docs/specs/semconv/general/attributes/#general-remote-service-attributes - service-mapping: + service_mapping: - peer: 1.2.3.4 service: FooService - peer: 2.3.4.5 @@ -456,46 +461,80 @@ instrumentation: http: # Configure instrumentations following the http client semantic conventions. client: - request: - capture-headers: - - X-Foo - response: - capture-headers: - - X-Foo + # Configure headers to capture for outbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding # Configure instrumentations following the http server semantic conventions. server: - request: - capture-headers: - - X-Bar - response: - capture-headers: - - X-Bar - # Configure instrumentations following the db semantic conventions. - # - # See db semantic conventions: https://opentelemetry.io/docs/specs/semconv/database/ - db: - # Configure database statement sanitization. - # - # See https://opentelemetry.io/docs/specs/semconv/database/database-spans/#common-attributes - statement-sanitizer: - enabled: true - # Language-specific module options + # Configure headers to capture for inbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding + # Configure language-specific instrumentation libraries. + # + # Keys may refer to instrumentation libraries or collections of related configuration. Because there is no central schema defining the keys or their contents, instrumentation must carefully document their schema and avoid key collisions with other instrumentations. + # + # Configure C++ language-specific instrumentation libraries. + cpp: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure .NET language-specific instrumentation libraries. + dotnet: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Erlang language-specific instrumentation libraries. + erlang: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Go language-specific instrumentation libraries. + go: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Java language-specific instrumentation libraries. java: - # Configure Java's Logback Appender instrumentation. - # - # See https://opentelemetry.io/docs/languages/java/automatic/spring-boot/#logback - logback-appender: - experimental-log-attributes: true - experimental: - capture-code-attributes: true - capture-marker-attribute: false - capture-key-value-pair-attributes: true - capture-logger-context-attributes: false - capture-mdc-attributes: - - attr_one - - attr_two + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure JavaScript language-specific instrumentation libraries. + js: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure PHP language-specific instrumentation libraries. php: - # Configure PHP's example instrumentation. - example_instrumentation: - span_name: test123 - enabled: true + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Python language-specific instrumentation libraries. + python: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Ruby language-specific instrumentation libraries. + ruby: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Rust language-specific instrumentation libraries. + rust: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" + # Configure Swift language-specific instrumentation libraries. + swift: + # Configure the instrumentation corresponding to key "another_example_key". + example: + property: "value" diff --git a/schema/instrumentation.json b/schema/instrumentation.json index a190ae3..cf93ef6 100644 --- a/schema/instrumentation.json +++ b/schema/instrumentation.json @@ -6,141 +6,129 @@ "additionalProperties": false, "properties": { "general": { - "type": "object", - "additionalProperties": false, - "properties": { - "peer": { - "type": "object", - "properties": { - "service-mapping": { - "type": "array", - "items": { - "$ref": "#/$defs/PeerServiceMapping" - } - } - } - }, - "http": { - "type": "object", - "additionalProperties": false, - "properties": { - "client": { - "$ref": "#/$defs/RequestResponseCaptureHeaders" - }, - "server": { - "$ref": "#/$defs/RequestResponseCaptureHeaders" - } - } - }, - "db": { - "type": "object", - "additionalProperties": false, - "properties": { - "statement-sanitizer": { - "type": "object", - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "android": { - "$ref": "#/$defs/AndroidModules" + "$ref": "#/$defs/GeneralInstrumentation" }, "cpp": { - "$ref": "#/$defs/CppModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "dotnet": { - "$ref": "#/$defs/DotnetModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "erlang": { - "$ref": "#/$defs/ErlangModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "go": { - "$ref": "#/$defs/GoModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "java": { - "$ref": "#/$defs/JavaModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "js": { - "$ref": "#/$defs/JsModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "php": { - "$ref": "#/$defs/PhpModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "python": { - "$ref": "#/$defs/PythonModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "ruby": { - "$ref": "#/$defs/RubyModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "rust": { - "$ref": "#/$defs/RustModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" }, "swift": { - "$ref": "#/$defs/SwiftModules" + "$ref": "#/$defs/LanguageSpecificInstrumentation" + } + }, + "patternProperties": { + ".*": { + "$ref": "#/$defs/LanguageSpecificInstrumentation" } }, "$defs": { - "PeerServiceMapping": { + "GeneralInstrumentation": { "type": "object", "additionalProperties": false, "properties": { "peer": { - "type": "string" + "type": "object", + "additionalProperties": false, + "properties": { + "service_mapping": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "peer": { + "type": "string" + }, + "service": { + "type": "string" + } + }, + "required": [ + "peer", + "service" + ] + } + } + } }, - "service": { - "type": "string" - } - }, - "required": [ - "peer", - "service" - ] - }, - "ArrayOfHeaders": { - "type": "array", - "items": { - "type": "string" - } - }, - "CaptureHeaders": { - "type": "object", - "additionalProperties": false, - "properties": { - "capture-headers": { - "$ref": "#/$defs/ArrayOfHeaders" + "http": { + "type": "object", + "additionalProperties": false, + "properties": { + "client": { + "type": "object", + "additionalProperties": false, + "properties": { + "request_captured_headers": { + "type": "array", + "items": { + "type": "string" + } + }, + "response_captured_headers": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "server": { + "type": "object", + "additionalProperties": false, + "properties": { + "request_captured_headers": { + "type": "array", + "items": { + "type": "string" + } + }, + "response_captured_headers": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } } } }, - "RequestResponseCaptureHeaders": { + "LanguageSpecificInstrumentation": { "type": "object", - "additionalProperties": false, - "properties": { - "request": { - "$ref": "#/$defs/CaptureHeaders" - }, - "response": { - "$ref": "#/$defs/CaptureHeaders" + "additionalProperties": true, + "patternProperties": { + ".*": { + "type": "object" } } - }, - "AndroidModules": {}, - "CppModules": {}, - "DotnetModules": {}, - "ErlangModules": {}, - "GoModules": {}, - "JavaModules": {}, - "JsModules": {}, - "PhpModules": {}, - "PythonModules": {}, - "RubyModules": {}, - "RustModules": {}, - "SwiftModules": {} + } } } \ No newline at end of file From 7a409dfb5fd41f94c350f354be58699aca1741c8 Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Thu, 30 May 2024 08:39:26 -0500 Subject: [PATCH 8/8] Fix typo --- examples/kitchen-sink.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index c965e28..b7f1f99 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -485,56 +485,56 @@ instrumentation: # # Configure C++ language-specific instrumentation libraries. cpp: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure .NET language-specific instrumentation libraries. dotnet: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Erlang language-specific instrumentation libraries. erlang: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Go language-specific instrumentation libraries. go: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Java language-specific instrumentation libraries. java: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure JavaScript language-specific instrumentation libraries. js: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure PHP language-specific instrumentation libraries. php: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Python language-specific instrumentation libraries. python: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Ruby language-specific instrumentation libraries. ruby: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Rust language-specific instrumentation libraries. rust: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value" # Configure Swift language-specific instrumentation libraries. swift: - # Configure the instrumentation corresponding to key "another_example_key". + # Configure the instrumentation corresponding to key "example". example: property: "value"