Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

otelgrpc: Add Filter for stats handler #5196

Merged
merged 23 commits into from
May 9, 2024

Conversation

ymtdzzz
Copy link
Contributor

@ymtdzzz ymtdzzz commented Mar 3, 2024

Description

Add filter for stats handler and move interceptor filter to go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/filters/interceptor considering that it'll be deprecated.

Related Issue

Fixes #4575

Test

Unit tests added.
And I've tested on: https://github.com/grpc/grpc-go/tree/master/examples/route_guide

No filters

image

Method name filter

	opts = append(opts, grpc.StatsHandler(otelgrpc.NewServerHandler(
		otelgrpc.WithFilter(filters.MethodName("ListFeatures")),
	)))

image

@ymtdzzz ymtdzzz changed the title [WIP] otelgrpc: Add Filter for stats handler otelgrpc: Add Filter for stats handler Mar 3, 2024
@ymtdzzz ymtdzzz marked this pull request as ready for review March 3, 2024 08:13
@ymtdzzz ymtdzzz requested a review from a team March 3, 2024 08:13
CHANGELOG.md Outdated Show resolved Hide resolved
@dashpole
Copy link
Contributor

dashpole commented Mar 4, 2024

lgtm overall.

Copy link

codecov bot commented Mar 4, 2024

Codecov Report

Attention: Patch coverage is 88.42105% with 11 lines in your changes are missing coverage. Please review.

Project coverage is 62.7%. Comparing base (d6e2fc4) to head (95bca4e).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##            main   #5196     +/-   ##
=======================================
+ Coverage   62.5%   62.7%   +0.1%     
=======================================
  Files        191     192      +1     
  Lines      11727   11786     +59     
=======================================
+ Hits        7340    7399     +59     
  Misses      4170    4170             
  Partials     217     217             
Files Coverage Δ
...google.golang.org/grpc/otelgrpc/filters/filters.go 100.0% <100.0%> (+6.0%) ⬆️
...n/google.golang.org/grpc/otelgrpc/stats_handler.go 100.0% <100.0%> (ø)
...entation/google.golang.org/grpc/otelgrpc/config.go 89.0% <50.0%> (+0.6%) ⬆️
...g.org/grpc/otelgrpc/filters/interceptor/filters.go 93.9% <93.9%> (ø)
...ion/google.golang.org/grpc/otelgrpc/interceptor.go 89.4% <0.0%> (ø)

@pellared pellared requested a review from dashpole March 6, 2024 11:19
@jmjesperson
Copy link

Any update if this will be reviewed in order to be merged?

@ymtdzzz
Copy link
Contributor Author

ymtdzzz commented May 6, 2024

@dashpole @hanyuancheung
Please let me know if there is any additional work required for this PR to be merged :)

CHANGELOG.md Outdated Show resolved Hide resolved
pellared
pellared previously approved these changes May 6, 2024
@pellared pellared dismissed their stale review May 8, 2024 09:50

LGTM, but there are some comments that should be addressed.

@pellared
Copy link
Member

pellared commented May 8, 2024

@dashpole, can you please make another review and possibly merge if you find everything good?

@pellared pellared requested a review from dashpole May 8, 2024 12:55
@MrAlias MrAlias merged commit 0483033 into open-telemetry:main May 9, 2024
23 checks passed
@ymtdzzz ymtdzzz deleted the grpc-stats-filter branch May 9, 2024 15:12
@pgporada
Copy link

Hey thanks!

@pellared
Copy link
Member

@ymtdzzz thank you for your contribution 🥇

zailic pushed a commit to zailic/opentelemetry-go-contrib that referenced this pull request May 20, 2024
* otelgrpc: Add filter for stats handler

* Add entries to CHANGELOG

* fix CHANGELOG

* keep Deprecated comment of `WithInterceptorFilter`

* deprecate `InterceptorFilter` type

* change the location of `gctx.record` nil check location to reduce heap allocations

* add documentation for filters and interceptor packages

* fix the location of entries in CHANGELOG

* more reasonable doc comment for interceptor package

Co-authored-by: Robert Pająk <pellared@hotmail.com>

* more reasonable doc comment for interceptor package

Co-authored-by: Robert Pająk <pellared@hotmail.com>

* Use more appropriate word in the comment of InterceptorFilter

Co-authored-by: Robert Pająk <pellared@hotmail.com>

* more reasonable doc comment for filters package

Co-authored-by: Robert Pająk <pellared@hotmail.com>

* fix the comment of `Filter`

* Clearly describe the effects of the change

* add tests for `stats_handler.go`

---------

Co-authored-by: David Ashpole <dashpole@google.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
MrAlias added a commit that referenced this pull request May 21, 2024
### Added

- Add the new `go.opentelemetry.io/contrib/instrgen` package to provide
auto-generated source code instrumentation. (#3068, #3108)
- Add an experimental `OTEL_METRICS_PRODUCERS` environment variable to
`go.opentelemetry.io/contrib/autoexport` to be set metrics producers.
(#5281)
- `prometheus` and `none` are supported values. You can specify multiple
producers separated by a comma.
- Add `WithFallbackMetricProducer` option that adds a fallback if the
`OTEL_METRICS_PRODUCERS` is not set or empty.
- The `go.opentelemetry.io/contrib/processors/baggage/baggagetrace`
module. This module provides a Baggage Span Processor. (#5404)
- Add gRPC trace `Filter` for stats handler to
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`.
(#5196)
- Add a repository Code Ownership Policy. (#5555)
- The `go.opentelemetry.io/contrib/bridges/otellogrus` module. This
module provides an OpenTelemetry logging bridge for
`github.com/sirupsen/logrus`. (#5355)
- The `WithVersion` option function in
`go.opentelemetry.io/contrib/bridges/otelslog`. This option function is
used as a replacement of `WithInstrumentationScope` to specify the
logged package version. (#5588)
- The `WithSchemaURL` option function in
`go.opentelemetry.io/contrib/bridges/otelslog`. This option function is
used as a replacement of `WithInstrumentationScope` to specify the
semantic convention schema URL for the logged records. (#5588)
- Add support for Cloud Run jobs in
`go.opentelemetry.io/contrib/detectors/gcp`. (#5559)

### Changed

- The gRPC trace `Filter` for interceptor is renamed to
`InterceptorFilter`. (#5196)
- The gRPC trace filter functions `Any`, `All`, `None`, `Not`,
`MethodName`, `MethodPrefix`, `FullMethodName`, `ServiceName`,
`ServicePrefix` and `HealthCheck` for interceptor are moved to
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/filters/interceptor`.
With this change, the filters in
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`
are now working for stats handler. (#5196)

- `NewLogger` now accepts a `name` `string` as the first argument. This
parameter is used as a replacement of `WithInstrumentationScope` to
specify the name of the logger backing the underlying `Handler`. (#5588)
- `NewHandler` now accepts a `name` `string` as the first argument. This
parameter is used as a replacement of `WithInstrumentationScope` to
specify the name of the logger backing the returned `Handler`. (#5588)
- Upgrade all dependencies of `go.opentelemetry.io/otel/semconv/v1.24.0`
to `go.opentelemetry.io/otel/semconv/v1.25.0`. (#5605)

### Removed

- The `WithInstrumentationScope` option function in
`go.opentelemetry.io/contrib/bridges/otelslog` is removed. Use the
`name` parameter added to `NewHandler` and `NewLogger` as well as
`WithVersion` and `WithSchema` as replacements. (#5588)

### Deprecated

- The `InterceptorFilter` type in
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`
is deprecated. (#5196)
khushijain21 pushed a commit to khushijain21/opentelemetry-go-contrib that referenced this pull request May 22, 2024
### Added

- Add the new `go.opentelemetry.io/contrib/instrgen` package to provide
auto-generated source code instrumentation. (open-telemetry#3068, open-telemetry#3108)
- Add an experimental `OTEL_METRICS_PRODUCERS` environment variable to
`go.opentelemetry.io/contrib/autoexport` to be set metrics producers.
(open-telemetry#5281)
- `prometheus` and `none` are supported values. You can specify multiple
producers separated by a comma.
- Add `WithFallbackMetricProducer` option that adds a fallback if the
`OTEL_METRICS_PRODUCERS` is not set or empty.
- The `go.opentelemetry.io/contrib/processors/baggage/baggagetrace`
module. This module provides a Baggage Span Processor. (open-telemetry#5404)
- Add gRPC trace `Filter` for stats handler to
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`.
(open-telemetry#5196)
- Add a repository Code Ownership Policy. (open-telemetry#5555)
- The `go.opentelemetry.io/contrib/bridges/otellogrus` module. This
module provides an OpenTelemetry logging bridge for
`github.com/sirupsen/logrus`. (open-telemetry#5355)
- The `WithVersion` option function in
`go.opentelemetry.io/contrib/bridges/otelslog`. This option function is
used as a replacement of `WithInstrumentationScope` to specify the
logged package version. (open-telemetry#5588)
- The `WithSchemaURL` option function in
`go.opentelemetry.io/contrib/bridges/otelslog`. This option function is
used as a replacement of `WithInstrumentationScope` to specify the
semantic convention schema URL for the logged records. (open-telemetry#5588)
- Add support for Cloud Run jobs in
`go.opentelemetry.io/contrib/detectors/gcp`. (open-telemetry#5559)

### Changed

- The gRPC trace `Filter` for interceptor is renamed to
`InterceptorFilter`. (open-telemetry#5196)
- The gRPC trace filter functions `Any`, `All`, `None`, `Not`,
`MethodName`, `MethodPrefix`, `FullMethodName`, `ServiceName`,
`ServicePrefix` and `HealthCheck` for interceptor are moved to
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/filters/interceptor`.
With this change, the filters in
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`
are now working for stats handler. (open-telemetry#5196)

- `NewLogger` now accepts a `name` `string` as the first argument. This
parameter is used as a replacement of `WithInstrumentationScope` to
specify the name of the logger backing the underlying `Handler`. (open-telemetry#5588)
- `NewHandler` now accepts a `name` `string` as the first argument. This
parameter is used as a replacement of `WithInstrumentationScope` to
specify the name of the logger backing the returned `Handler`. (open-telemetry#5588)
- Upgrade all dependencies of `go.opentelemetry.io/otel/semconv/v1.24.0`
to `go.opentelemetry.io/otel/semconv/v1.25.0`. (open-telemetry#5605)

### Removed

- The `WithInstrumentationScope` option function in
`go.opentelemetry.io/contrib/bridges/otelslog` is removed. Use the
`name` parameter added to `NewHandler` and `NewLogger` as well as
`WithVersion` and `WithSchema` as replacements. (open-telemetry#5588)

### Deprecated

- The `InterceptorFilter` type in
`go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`
is deprecated. (open-telemetry#5196)
@pellared pellared added this to the untracked milestone Nov 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

otelgrpc: stats handler doesn't seem to have an option for filtering
7 participants