Repository navigation
feat(storage): add OpenTelemetry standard metrics for HTTP JSON transport - #18940
Draft
shradhakatyal wants to merge 7 commits into
Draft
shradhakatyal wants to merge 7 commits into
shradhakatyal wants to merge 7 commits into
Conversation
…d helpers Implement core OpenTelemetry standard metrics infrastructure for GCS: - Add _MetricsRecorder with the 9 standard metric instruments - Add custom latency (165 buckets) and byte-size (45 buckets) histogram views - Add classify_error_type for low-cardinality error.type mapping - Add normalize_url_template for bounded HTTP url.template routing - Add start_operation ContextVar for outermost logical operation tracking and nested call suppression [Generated-by: AI]
…branch coverage [Generated-by: AI]
…ncellations [Generated-by: AI]
- Add gcp.storage.client.retries counter and rename TTFB metric to gcp.storage.client.ttfb - Remove gcp.client.repo from _COMMON_ATTRIBUTES - Update _build_size_buckets to generate 48 buckets matching Go and Java SDKs - Align per-metric attributes across logical operation, RPC/HTTP attempt, error, retry, and TTFB recorders [Generated-by: AI]
…fy CONNECTION_ERROR - Scope histogram View registrations to meter_name="google.cloud.storage" - Guard normalize_url_template and _extract_server_address against malformed URIs and gRPC authority schemes - Consolidate CONNECTION_REFUSED, CONNECTION_RESET, and CONNECTIVITY error labels into CONNECTION_ERROR [Generated-by: AI]
…port - Wire _MetricsRecorder lifecycle, enable_metrics, and meter_provider into Client - Instrument Connection.api_request for per-attempt HTTP duration, TTFB, retries, and errors - Add _start_storage_operation, _PropertyMixin, and lazy HTTPIterator page metrics helpers - Skip per-attempt HTTP metrics while queuing sub-requests into Batch - Suppress internal background BucketMetadataCache lookups from emitting user-facing metrics
This was referenced Nov 1, 2026
Draft
Contributor
There was a problem hiding this comment.
Code Review
This pull request implements comprehensive OpenTelemetry metrics support for the Google Cloud Storage Python client. It introduces a _MetricsRecorder to track standard GCS metrics such as logical operations, transport attempts, retries, TTFB, request/response body sizes, and errors. Additionally, it adds context managers for suppressing metrics during internal background tasks, route normalization to prevent cardinality explosion, and canonical error classification, along with comprehensive unit tests. There are no review comments, so I have no feedback to provide.
This branch has not been deployed
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.
Summary
Adds OpenTelemetry standard metrics support for the core HTTP JSON transport and client lifecycle in
google-cloud-storage.Key Changes
client.py): Addsenable_metrics,enable_debug_metrics, andmeter_providerparameters toClient.__init__, initializes_MetricsRecorder, and calls_metrics_recorder.shutdown()inClient.close()._http.py): InstrumentsConnection.api_requestfor per-attempthttp.client.request.duration,gcp.storage.client.attempts,gcp.storage.client.ttfb,gcp.storage.client.retries, andgcp.storage.client.errorswith boundedurl.templatenormalization._helpers.py): Adds_start_storage_operation,_PropertyMixinmetrics hooks, and_InstrumentedHTTPIteratorfor lazy per-page pagination metrics.batch.py,_bucket_metadata_cache.py): MarksBatch._IS_BATCH = Trueto skip per-attempt metrics on in-memory queued futures and suppresses internal backgroundBucketMetadataCachelookups from emitting user-facing metrics.