add self observability for stdout exporter#8263
Open
yumosx wants to merge 20 commits into
Open
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #8263 +/- ##
=====================================
Coverage 82.9% 82.9%
=====================================
Files 314 315 +1
Lines 25093 25109 +16
=====================================
+ Hits 20809 20826 +17
Misses 3910 3910
+ Partials 374 373 -1
🚀 New features to boost your workflow:
|
Contributor
There was a problem hiding this comment.
Pull request overview
Adds experimental self-observability (SDK exporter metrics) to the stdoutlog exporter, gated behind the OTEL_GO_X_OBSERVABILITY feature flag, following the project’s exporter-observability direction from issue #7020.
Changes:
- Generate and add an internal
counterpackage to provide unique exporter IDs (and allow deterministic resets in tests). - Wire
stdoutlog.Exporterto initialize observability instrumentation and record inflight/exported/duration metrics duringExport. - Add observability-focused tests and a benchmark for enabled vs disabled overhead.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| exporters/stdout/stdoutlog/internal/gen.go | Adds go:generate rules to generate the internal counter package. |
| exporters/stdout/stdoutlog/internal/counter/counter.go | Generated atomic counter used to assign unique exporter IDs. |
| exporters/stdout/stdoutlog/internal/counter/counter_test.go | Generated tests validating counter behavior and concurrency-safety. |
| exporters/stdout/stdoutlog/exporter.go | Initializes instrumentation and records observability metrics around Export. |
| exporters/stdout/stdoutlog/exporter_test.go | Adds tests/benchmarks validating emitted metrics when observability is enabled. |
Member
Author
|
I missed the changelog. I will add it later |
… for scopeMetrics
…stdout exporter instrumentation
…is true Previously, the error.type attribute was only added when exportedLogsEnable was true. If opDurationEnable was true but exportedLogsEnable was false, the error attribute was never recorded. Now the condition is expanded to (exportedLogsEnable || opDurationEnable), while still only calling e.inst.exported.Add when exportedLogsEnable is true.
…at/yumosx/inst-stdlog
Previously, stdoutlog.New returned (nil, err) when self-observability setup failed, making the exporter unusable. This differed from stdouttrace.New and stdoutmetric.New, which return the exporter alongside the error, allowing core export functionality to continue even when experimental observability fails. Change stdoutlog.New to return the exporter with inst=nil and the instrumentation error separately, matching the behavior of the other stdout exporters. The Export method already guards against nil inst, so this is safe. Fixes the inconsistency where enabling observability could prevent stdout log export from working.
Member
Author
Vulnerability #1: GO-2026-4971
Panic in Dial and LookupPort when handling NUL byte on Windows in net
More info: https://pkg.go.dev/vuln/GO-2026-4971
Standard library
Found in: net@go1.26.2
Fixed in: net@go1.26.3
Example traces found:
Error: #1: client.go:151:2: otlploggrpc.client.UploadLogs calls context.WithCancel, which eventually calls net.Dialer.DialContext
Your code is affected by 1 vulnerability from the Go standard library.
This scan also found 5 vulnerabilities in packages you import and 2
vulnerabilities in modules you require, but your code doesn't appear to call
these vulnerabilities.
Use '-show verbose' for more details.
make: *** [Makefile:235: govulncheck/./exporters/otlp/otlplog/otlploggrpc] Error 3
Error: Process completed with exit code 2.The CI failure doesn't seem to be caused by this PR. |
dashpole
approved these changes
May 8, 2026
Member
Author
|
@flc1125 can you help review it? |
The observ package uses semconv v1.41.0, but the test was importing v1.40.0, causing SchemaURL mismatch failures in TestObservability. Updates the test imports to match the actual package version.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ref: #7020
goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/exporters/stdout/stdoutlog │ bench_observability_disabled_6x.txt │ bench_observability_upload_6x.txt │ │ sec/op │ sec/op vs base │ ExporterObservability/Disabled-8 3.968µ ± 1% ExporterObservability/UploadSuccess-8 4.236µ ± 2% geomean 3.967µ 4.235µ ? ¹ ² ¹ benchmark set differs from baseline; geomeans may not be comparable ² ratios must be >0 to compute geomean │ bench_observability_disabled_6x.txt │ bench_observability_upload_6x.txt │ │ B/op │ B/op vs base │ ExporterObservability/Disabled-8 1.419Ki ± 0% ExporterObservability/UploadSuccess-8 1.420Ki ± 0% geomean 1.419Ki 1.420Ki ? ¹ ² ¹ benchmark set differs from baseline; geomeans may not be comparable ² ratios must be >0 to compute geomean │ bench_observability_disabled_6x.txt │ bench_observability_upload_6x.txt │ │ allocs/op │ allocs/op vs base │ ExporterObservability/Disabled-8 33.00 ± 0% ExporterObservability/UploadSuccess-8 33.00 ± 0% geomean 33.00 33.00 ? ¹ ² ¹ benchmark set differs from baseline; geomeans may not be comparable ² ratios must be >0 to compute geomean