Added export of connection advanced metrics#3910
Merged
vladvildanov merged 5 commits intofeat/observabilityfrom Jan 19, 2026
Merged
Added export of connection advanced metrics#3910vladvildanov merged 5 commits intofeat/observabilityfrom
vladvildanov merged 5 commits intofeat/observabilityfrom
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This pull request adds support for exporting connection advanced metrics in the Redis Python client's observability system. The PR introduces structured close reasons via a CloseReason enum and adds new connection lifecycle events for tracking connection acquisition and closure.
Changes:
- Introduces
CloseReasonenum with three values:APPLICATION_CLOSE,ERROR, andHEALTHCHECK_FAILEDto provide structured close reason tracking - Adds
AfterConnectionAcquiredEventandAfterConnectionClosedEventto the event system for tracking connection lifecycle - Modifies
record_connection_closedto use the CloseReason enum instead of string-based reasons, removing the pool_name parameter - Updates default metric groups to exclude
COMMANDmetrics (nowCONNECTION_BASIC | RESILIENCY) - Adds comprehensive test coverage for new connection events
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| redis/observability/metrics.py | Introduces CloseReason enum and updates record_connection_closed to use it, removing pool_name parameter from the method |
| redis/observability/recorder.py | Updates record_connection_closed signature to accept CloseReason enum instead of string, removes pool_name parameter |
| redis/event.py | Adds AfterConnectionAcquiredEvent, AfterConnectionClosedEvent, and corresponding metric export listeners |
| redis/connection.py | Dispatches new connection events during connect, disconnect, and error scenarios with appropriate CloseReason values |
| tests/test_observability/test_recorder.py | Updates tests to use CloseReason enum, removes pool_name from test calls |
| tests/test_observability/test_config.py | Updates default metric groups test to reflect removal of COMMAND from defaults |
| tests/test_connection_pool.py | Adds comprehensive test coverage for new connection acquired, released, closed, and error events |
Comments suppressed due to low confidence (1)
redis/observability/metrics.py:433
- The pool_name parameter has been removed from record_connection_closed, which means the metric will no longer include the pool name attribute. This significantly reduces the observability value of this metric since users won't be able to identify which connection pool had connections closed. This is especially important for applications with multiple connection pools.
def record_connection_closed(
self,
close_reason: Optional[CloseReason] = None,
error_type: Optional[Exception] = None,
) -> None:
"""
Record a connection closed event.
Args:
close_reason: Reason for closing (e.g., 'error', 'application_close')
error_type: Error type if closed due to error
"""
if not hasattr(self, "connection_closed"):
return
attrs = self.attr_builder.build_connection_attributes()
if close_reason:
attrs[REDIS_CLIENT_CONNECTION_CLOSE_REASON] = close_reason.value
attrs.update(
self.attr_builder.build_error_attributes(
error_type=error_type,
)
)
self.connection_closed.add(1, attributes=attrs)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… into vv-connection-adv-metrics
vladvildanov
added a commit
that referenced
this pull request
Feb 16, 2026
* Added intrastructure and integration point with OTel (#3864) * Added intrastructure and integration point with OTel * Added check for enabled metric groups * Applied comments * Added export of operation duration metric (#3881) * Added stadalone client metrics export * Added support for cluster client * Removed unused dispatchers and test * Added export of resiliency metrics (#3888) * Added stadalone client metrics export * Added support for cluster client * Added error metric export on fail commands for standalone client * Removed unused dispatchers and test * Added on error metrics export for cluster * Added export of maint notification count metric * Apply comments * Remove redundant Union * Added export of connection basic metrics (#3891) * Added export of connection basic metrics * Added new error category attribute * Update tests/test_observability/test_recorder.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tests/test_observability/test_recorder.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply comments * Applied comments --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added pub/sub and stream lag metrics export (#3898) * Added export of connection basic metrics * Added new error category attribute * Added pub/sub and stream lag metrics export * Added metric export form XREAD * Update redis/client.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update redis/event.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Applied comments --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added OTel benchmark test (#3903) * Added export of connection basic metrics * Added new error category attribute * Added pub/sub and stream lag metrics export * Added metric export form XREAD * Added benchmark tests * Added error output * Added env variable for otel host * Fixed endpoint * Added iterations and results averaging * Use unsecured gRPC * Added --with-command-metrics argument * Removed incorrect identation * Update benchmarks/otel_benchmark.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update benchmarks/otel_benchmark.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update benchmarks/otel_benchmark.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update benchmarks/otel_benchmark.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update benchmarks/otel_benchmark.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added export of connection advanced metrics (#3910) * Added export of connection advanced metrics * Update tests/test_connection_pool.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update redis/observability/metrics.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactored kwargs instead of args --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added CSC metrics export (#3911) * Added export of connection advanced metrics * Added CSC metrics export * Revert changes * Added observable gauge registry and refactored observables metric export * Fixed case with trackin non-cachable cache tracking * Added memory and CPU usage (#3933) * Added full benchmark tests + fixes * Added Memory and CPU usage calculation * Removed events dispatching overhead, refactored metrics attributes (#3934) * Removed events dispatching overhead, refactored metrics attributes * Fixed incorrect retry attempts, changed indexes to named parameters * Fixed issue with connection attribute and metric recording * Added async recorders and registry (#3950) * Added async recorders and registry * Removed async registry * Added more coverage * Added bucket override configuration (#3952) * Added async recorders and registry * Added bucket override configuration * Removed async registry * Added more coverage * Fixed version constraints, removed ubused imports * Moved module desription on top of file * Remove async instrumentations (#3953) * Fix tests and codestyle * Fixed missing parameters * Fixed tests * Fixed tests * Fixed tests * Marked argument as unused * Fixed tests * Added missing metric export * Fixes units and pool name attribute Signed-off-by: Elena Kolevska <elena@kolevska.com> * Updated test for pool name attribute Signed-off-by: Elena Kolevska <elena@kolevska.com> * Updates more tests Signed-off-by: Elena Kolevska <elena@kolevska.com> * Linter Signed-off-by: Elena Kolevska <elena@kolevska.com> * Added try...except blocks for recorder functions * Added documentation * Updated wordlist * Update redis/cluster.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update redis/connection.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update redis/connection.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update pyproject.toml Co-authored-by: Elena Kolevska <elena-kolevska@users.noreply.github.com> * Codestyle fixes * Fixed metric export * Fixed assertions * Added geo failover metric export * Codestyle fixes --------- Signed-off-by: Elena Kolevska <elena@kolevska.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Elena Kolevska <elena@kolevska.com> Co-authored-by: Elena Kolevska <elena-kolevska@users.noreply.github.com>
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.
Description of change
Please provide a description of the change here.
Pull Request check-list
Please make sure to review and check all of these items:
NOTE: these things are not required to open a PR and can be done
afterwards / while the PR is open.