Title: Improve Feature Server Observability · Issue #5920 · feast-dev/feast · GitHub
Open Graph Title: Improve Feature Server Observability · Issue #5920 · feast-dev/feast
X Title: Improve Feature Server Observability · Issue #5920 · feast-dev/feast
Description: Is your feature request related to a problem? Please describe. The Feature Server currently has limited built-in observability. While there is initial OpenTelemetry (OTEL) support, it does not expose standard service-level RED metrics (R...
Open Graph Description: Is your feature request related to a problem? Please describe. The Feature Server currently has limited built-in observability. While there is initial OpenTelemetry (OTEL) support, it does not expo...
X Description: Is your feature request related to a problem? Please describe. The Feature Server currently has limited built-in observability. While there is initial OpenTelemetry (OTEL) support, it does not expo...
Opengraph URL: https://github.com/feast-dev/feast/issues/5920
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Improve Feature Server Observability","articleBody":"**Is your feature request related to a problem? Please describe.**\n\nThe Feature Server currently has limited built-in observability. While there is initial OpenTelemetry (OTEL) support, it does not expose standard service-level RED metrics (Rate, Errors, Duration) needed to operate the server in production.\n\nUsers need visibility into throughput, error rates, and latency for the core APIs:\n\n- `/get-online-features`\n- `/retrieve-online-documents`\n- `/push`\n- `/write-to-online-store`\n- `/materialize`\n- `/materialize-incremental`\n\nToday this often requires custom middleware or external tooling.\n\n**Describe the solution you'd like**\n\nExtend Feature Server’s OTEL integration to emit standard RED metrics out of the box, with useful Feast-specific breakdowns.\n\nMetrics per endpoint should include:\n\n- **Request rate/count**\n- **Error count/rate** (by HTTP status class, optionally basic error categories)\n- **Latency histograms** (supporting p50/p95/p99)\n\nAdditional breakdowns:\n\n- Break out metrics by **Feature Service name** (and **Feature View name** where applicable/available), with safeguards to limit label cardinality (e.g., allowlist and/or config flags; default off if needed).\n- Segment latency by **number of features requested** using configurable bins (e.g., `1–10`, `11–50`, `51–200`, `201+`).\n\nImplementation note (based on current `feature_server.py` structure):\n- Add a FastAPI middleware to record RED metrics for every request (keyed by `endpoint` + `status_class`).\n- Populate Feast-specific labels (feature_service / feature_view / feature_count_bin, etc.) inside the request handlers (since they come from the parsed request body) and attach them via `request.state` for the middleware to include.\n- For long-running endpoints (`/materialize*`), ensure duration histograms support multi-second/minute latencies.\n\nOptionally expose basic internal timings via tracing spans and/or additional histograms:\n- online store read/write duration\n- on-demand transformation execution duration\n- materialization step duration\n\nMetrics should use native OpenTelemetry APIs and work with common OTEL collectors/exporters (e.g., Prometheus, OpenTelemetry Collector, Grafana).\n\n**Describe alternatives you've considered**\n\n- Custom HTTP middleware\n- Service mesh / proxy metrics (miss Feast-specific context like FS/FV/feature_count)\n- Manual instrumentation\n\n**Additional context**\n\nStandard RED metrics with Feast-aware labels would significantly improve Feature Server operability and align Feast with common production observability practices, while keeping label cardinality under control.\n","author":{"url":"https://github.com/franciscojavierarceo","@type":"Person","name":"franciscojavierarceo"},"datePublished":"2026-01-28T19:23:07.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/5920/feast/issues/5920"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:5830065a-4aca-772f-ae9e-64343fe11b51 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BFD2:1A1F1B:802F9CE:B3330E5:6A505280 |
| html-safe-nonce | b808cd4176ff4091b40cbec4711acf4be8a219dfc051d79d772a7e116d9696c0 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRkQyOjFBMUYxQjo4MDJGOUNFOkIzMzMwRTU6NkE1MDUyODAiLCJ2aXNpdG9yX2lkIjoiNTg5NzA4NTEwODE2MzIwMzcxMiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e62ccb3a913493018311052b9094ed818b6d7c6c58b62bea4c87a2255eaac67f |
| hovercard-subject-tag | issue:3866997834 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/feast-dev/feast/5920/issue_layout |
| twitter:image | https://opengraph.githubassets.com/c259482c4a2eb6ca535b80c6ae612b6bfae5fa92f609d5d52ae53a1aed40d106/feast-dev/feast/issues/5920 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/c259482c4a2eb6ca535b80c6ae612b6bfae5fa92f609d5d52ae53a1aed40d106/feast-dev/feast/issues/5920 |
| og:image:alt | Is your feature request related to a problem? Please describe. The Feature Server currently has limited built-in observability. While there is initial OpenTelemetry (OTEL) support, it does not expo... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | franciscojavierarceo |
| hostname | github.com |
| expected-hostname | github.com |
| None | d6dc8294eb500fa36bbc57472d61fe87c522f9c3c1d64f70f4926f66a66a7efb |
| turbo-cache-control | no-preview |
| go-import | github.com/feast-dev/feast git https://github.com/feast-dev/feast.git |
| octolytics-dimension-user_id | 57027613 |
| octolytics-dimension-user_login | feast-dev |
| octolytics-dimension-repository_id | 161133770 |
| octolytics-dimension-repository_nwo | feast-dev/feast |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 161133770 |
| octolytics-dimension-repository_network_root_nwo | feast-dev/feast |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 5741a45fe07e5f377d0d4c524a92e3056acc51bb |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width