From 5c0b2758debf84f1a6f00cc004a30c60cee5968f Mon Sep 17 00:00:00 2001
From: Jitendra Yejare <11752425+jyejare@users.noreply.github.com>
Date: Tue, 9 Jun 2026 18:11:53 +0530
Subject: [PATCH] docs: Operational Metrics for offline store retrieval and SOX
Complaince metrics
Signed-off-by: Jitendra Yejare <11752425+jyejare@users.noreply.github.com>
---
.../blog/feast-offline-store-sox-metrics.md | 386 ++++++++++++++++++
.../offline_store_operational_metrics.png | Bin 0 -> 651807 bytes
.../images/blog/sox_compliance_and_access.png | Bin 0 -> 367567 bytes
.../blog/sox_offline_store_audit_logs.png | Bin 0 -> 201400 bytes
4 files changed, 386 insertions(+)
create mode 100644 infra/website/docs/blog/feast-offline-store-sox-metrics.md
create mode 100644 infra/website/public/images/blog/offline_store_operational_metrics.png
create mode 100644 infra/website/public/images/blog/sox_compliance_and_access.png
create mode 100644 infra/website/public/images/blog/sox_offline_store_audit_logs.png
diff --git a/infra/website/docs/blog/feast-offline-store-sox-metrics.md b/infra/website/docs/blog/feast-offline-store-sox-metrics.md
new file mode 100644
index 00000000000..a41f951f604
--- /dev/null
+++ b/infra/website/docs/blog/feast-offline-store-sox-metrics.md
@@ -0,0 +1,386 @@
+---
+title: "Extending Feast Observability: Offline Store Metrics and SOX Audit Logging"
+description: "Feast now captures RED metrics for offline store retrievals and emits structured SOX audit logs for both online and offline feature access — closing the observability gap between serving and training paths."
+date: 2026-06-09
+authors: ["Jitendra Yejare"]
+---
+
+
+

+
+
+# Extending Feast Observability: Offline Store Metrics and SOX Audit Logging
+
+In [our previous post](/blog/feast-feature-server-monitoring), we introduced built-in Prometheus metrics for the Feast feature server — covering the full online serving lifecycle from HTTP request handling through online store reads, on-demand feature transformations, materialization pipelines, and feature freshness tracking.
+
+That covered the **online** path. But production ML systems don't just serve features in real time — they also build training datasets through offline store retrievals. And for teams operating in regulated environments (financial services, healthcare, government), observability isn't enough. You need an **auditable record** of who accessed what data, when, and how much.
+
+This post covers two new capabilities added to Feast:
+
+1. **Offline Store RED Metrics** — Prometheus counters and histograms for offline store retrieval operations (request rate, error rate, latency, row counts)
+2. **SOX Audit Logging** — Structured JSON audit log entries for both online and offline feature retrieval paths, routed to a dedicated `feast.audit` logger
+
+Together, these close the observability gap between online and offline operations and give compliance teams the structured audit trail they need.
+
+## Offline Store Metrics: Closing the Observability Gap
+
+The online feature server already had comprehensive metrics, but the offline store — where `get_historical_features` queries execute against your data warehouse to build training datasets — had zero instrumentation. This matters because training-serving skew, stalled pipelines, and data volume anomalies all originate in the offline path.
+
+### The Problem
+
+Without offline store metrics, teams faced three blind spots:
+
+- **Silent training failures** — An offline retrieval that returns incomplete data (or errors out) produces a corrupted training dataset. Models trained on bad data degrade in production, and without metrics, there's no signal until prediction quality drops.
+- **Invisible pipeline stalls** — A `get_historical_features` call that normally takes 30 seconds but suddenly takes 10 minutes looks like a "hang" from the orchestrator's perspective. No latency metrics means no alerting until the pipeline times out.
+- **Data volume anomalies** — If a typical training query returns 500K rows but suddenly returns 50K, something changed upstream. Without row count tracking, this silently propagates into model training.
+
+### How Feast Solves It
+
+Feast now automatically captures RED metrics (Rate, Errors, Duration) for every offline store retrieval — regardless of the backend. Whether you're running against BigQuery, Redshift, Snowflake, DuckDB, or local files, you get the same three Prometheus metrics out of the box:
+
+- **`feast_offline_store_request_total`** — Counts every retrieval, labeled by success/error. Set an alert and know immediately when training pipelines start failing.
+- **`feast_offline_store_request_latency_seconds`** — Latency histogram with buckets tuned for offline workloads (`0.1s` to `10min`). Set SLOs and catch slow queries before pipelines time out.
+- **`feast_offline_store_row_count`** — Row count histogram covering `100` to `5M` rows. Detect data volume anomalies before they reach model training.
+
+Metrics collection never interferes with your queries — if the metrics path fails for any reason, your offline retrieval completes normally.
+
+```
+# Alert when offline retrievals start failing
+- alert: FeastOfflineStoreErrors
+ expr: rate(feast_offline_store_request_total{status="error"}[15m]) > 0
+ for: 5m
+ labels:
+ severity: critical
+ annotations:
+ summary: >
+ Offline store retrievals are failing ({{ $value }} errors/sec).
+ Training pipelines may be producing incomplete datasets.
+```
+
+## Why SOX Audit Logging Matters
+
+For organizations subject to SOX (Sarbanes-Oxley), GDPR, HIPAA, or other regulatory frameworks, you need to answer questions like:
+
+- *Who accessed customer features at 3:47 PM on March 15th?*
+- *Which feature views were involved in the training dataset built yesterday?*
+- *How many rows of PII-adjacent data were retrieved by the batch scoring pipeline?*
+
+Before this change, answering these questions required parsing unstructured application logs and correlating timestamps across services. Feature stores sit at the intersection of data access and ML model behavior — yet most have no structured audit trail.
+
+Feast now emits **structured JSON audit entries** for both online and offline retrieval paths, routed to a dedicated `feast.audit` logger that can be independently sent to your SIEM, log aggregator, or compliance sink — without touching your operational log pipeline.
+
+What makes this production-ready:
+
+- **PII-minimized by design.** Entity key *names* are logged, not *values*. A compliance auditor sees "the ML pipeline accessed `user_id` features from `transaction_features` at 3:47 PM" without the log itself containing PII.
+- **Dedicated logger.** Audit entries go to `feast.audit`, separate from the application logger. Route them to a SOX-compliant sink (Splunk, ELK with retention policies, S3 with WORM locks) independently.
+- **Never breaks your serving path.** Audit logging is best-effort — a broken audit sink never affects feature serving latency or availability.
+- **Zero overhead when disabled.** `audit_logging` defaults to `false`. Enable it only when you need it.
+
+## The New Metrics
+
+### Offline Store RED Metrics
+
+| Metric | Type | Labels | What It Answers |
+|--------|------|--------|-----------------|
+| `feast_offline_store_request_total` | Counter | `method`, `status` | What is my offline retrieval throughput and error rate? |
+| `feast_offline_store_request_latency_seconds` | Histogram | `method` | How long are my training data queries taking? |
+| `feast_offline_store_row_count` | Histogram | `method` | How much data are my offline retrievals returning? |
+
+The `method` label captures the retrieval type (`to_arrow`), and `status` is `success` or `error`. The latency histogram uses wide buckets tuned for offline workloads: `0.1s, 0.5s, 1s, 5s, 10s, 30s, 60s, 2min, 5min, 10min` — because offline queries can range from sub-second (small entity sets against local files) to minutes (large point-in-time joins against BigQuery or Redshift).
+
+The row count histogram uses exponential buckets: `100, 1K, 10K, 100K, 500K, 1M, 5M` — covering the range from small test retrievals to production training datasets.
+
+### SOX Audit Log Entries
+
+**Online feature request audit entry:**
+
+```json
+{
+ "event": "online_feature_request",
+ "timestamp": "2026-06-07T14:42:29.739Z",
+ "requestor_id": "service-account:ml-pipeline",
+ "entity_keys": ["driver_id"],
+ "entity_count": 5,
+ "feature_views": ["driver_hourly_stats"],
+ "feature_count": 3,
+ "status": "success",
+ "latency_ms": 12.45
+}
+```
+
+**Offline feature retrieval audit entry:**
+
+```json
+{
+ "event": "offline_feature_retrieval",
+ "timestamp": "2026-06-07T14:42:29.739Z",
+ "method": "to_arrow",
+ "start_time": "2026-06-07T14:42:29.697Z",
+ "end_time": "2026-06-07T14:42:29.739Z",
+ "feature_views": ["driver_hourly_stats"],
+ "feature_count": 3,
+ "row_count": 150000,
+ "status": "success",
+ "duration_ms": 42.39
+}
+```
+
+Each entry is a single JSON line, making it trivial to parse with `jq`, ingest into Elasticsearch, or stream to a Kafka topic for compliance processing.
+
+**Note on accessor identity:** Online audit entries include `requestor_id`, extracted from the Feast authentication layer (SecurityManager). Offline retrievals run as direct SDK calls in the user's own process (a notebook, Airflow task, or training script) — there is no server in the middle to extract auth context. In production SOX environments, offline accessor identity is typically established at the infrastructure level: the Kubernetes service account running the job, the IAM role accessing the data warehouse, or the CI/CD pipeline identity. A future enhancement could optionally capture identity from `os.getenv("USER")` or an explicit SDK parameter.
+
+## Enabling the New Metrics
+
+### YAML Configuration
+
+Add `offline_features` and `audit_logging` to your `feature_store.yaml`:
+
+```yaml
+feature_server:
+ metrics:
+ enabled: true
+ resource: true
+ request: true
+ online_features: true
+ push: true
+ materialization: true
+ freshness: true
+ offline_features: true # NEW: Offline store RED metrics
+ audit_logging: true # NEW: SOX audit log entries
+```
+
+`offline_features` defaults to `true` when metrics are enabled (consistent with other categories). `audit_logging` defaults to `false` — it's opt-in because audit entries have a non-trivial cost (JSON serialization + I/O per request) and are only needed in regulated environments.
+
+### CLI
+
+When using `feast serve --metrics`, offline store metrics are enabled by default. Audit logging still requires the YAML toggle since it's opt-in.
+
+### Routing Audit Logs
+
+The `feast.audit` logger is a standard Python logger. Configure it like any other:
+
+```python
+import logging
+
+audit_logger = logging.getLogger("feast.audit")
+audit_logger.setLevel(logging.INFO)
+audit_logger.propagate = False
+
+handler = logging.FileHandler("/var/log/feast/audit.log")
+handler.setFormatter(logging.Formatter("%(message)s"))
+audit_logger.addHandler(handler)
+```
+
+Or route to a JSON-aware sink in production:
+
+```yaml
+# logging.yaml for production
+loggers:
+ feast.audit:
+ level: INFO
+ propagate: false
+ handlers: [audit_file, splunk_forwarder]
+```
+
+## Key PromQL Queries for Offline Store
+
+**Throughput and errors:**
+
+```promql
+# Offline retrieval rate
+rate(feast_offline_store_request_total[5m])
+
+# Offline error rate
+sum(rate(feast_offline_store_request_total{status="error"}[5m]))
+ / sum(rate(feast_offline_store_request_total[5m]))
+```
+
+**Latency percentiles:**
+
+```promql
+# Offline retrieval p95 latency
+histogram_quantile(0.95,
+ sum(rate(feast_offline_store_request_latency_seconds_bucket[5m])) by (le))
+
+# Average offline retrieval duration
+rate(feast_offline_store_request_latency_seconds_sum[5m])
+ / rate(feast_offline_store_request_latency_seconds_count[5m])
+```
+
+**Row count analysis:**
+
+```promql
+# Average rows per retrieval
+feast_offline_store_row_count_sum / feast_offline_store_row_count_count
+
+# p95 row count (detect large retrievals)
+histogram_quantile(0.95,
+ sum(rate(feast_offline_store_row_count_bucket[5m])) by (le))
+```
+
+## Building Alerts for Offline Store
+
+### Offline Retrieval Failures
+
+```yaml
+- alert: FeastOfflineStoreErrors
+ expr: rate(feast_offline_store_request_total{status="error"}[15m]) > 0
+ for: 5m
+ labels:
+ severity: critical
+ annotations:
+ summary: >
+ Offline store retrievals are failing.
+ Training pipelines may be producing incomplete datasets.
+```
+
+### Slow Offline Queries
+
+```yaml
+- alert: FeastOfflineStoreSlowQuery
+ expr: |
+ histogram_quantile(0.95,
+ sum(rate(feast_offline_store_request_latency_seconds_bucket[5m])) by (le)
+ ) > 300
+ for: 5m
+ labels:
+ severity: warning
+ annotations:
+ summary: >
+ Offline store p95 latency is {{ $value | humanizeDuration }}.
+ Training pipelines may be stalling.
+```
+
+### Row Count Anomaly
+
+```yaml
+- alert: FeastOfflineStoreRowCountDrop
+ expr: |
+ feast_offline_store_row_count_sum / feast_offline_store_row_count_count
+ < 0.5 * avg_over_time(
+ (feast_offline_store_row_count_sum / feast_offline_store_row_count_count)[1d:1h])
+ for: 10m
+ labels:
+ severity: warning
+ annotations:
+ summary: >
+ Average rows per offline retrieval dropped by >50%.
+ Possible upstream data issue.
+```
+
+## The Extended Grafana Dashboard
+
+We've extended the existing Feast Grafana dashboard with a dedicated **Offline Store** section containing six new panels:
+
+- **Offline Store Request Rate** — Rate of offline retrievals by method and status
+- **Offline Store Total Requests** — Cumulative request counts (stat panel)
+- **Offline Store Retrieval Latency (p50/p95/p99)** — Latency percentile time series
+- **Offline Store Row Count Distribution** — Row count percentiles over time
+- **Avg Offline Retrieval Duration** — Average duration per method
+- **Offline Store Error Rate** — Gauge showing current error percentage with threshold coloring
+
+
+

+
+
+These panels sit alongside the existing online store panels, giving you a single dashboard that covers both serving paths.
+
+For SOX compliance, a separate **Audit Trail** dashboard powered by Loki visualizes:
+
+- **Total Audited Events** — Count of all audited access events
+- **Online vs Offline Access Timeline** — Stacked time series showing access patterns
+- **Offline Data Volume** — Total rows retrieved over time, flagging bulk data exports
+- **Anomaly Detection** — Large row counts and slow queries that may need compliance review
+
+
+

+
+
+- **Live Audit Log Stream** — Raw structured audit entries, expandable for investigation
+
+
+

+
+
+
+## Updated Metrics Summary
+
+| Category | Metric | What It Answers |
+|----------|--------|-----------------|
+| **Online** Request | `feast_feature_server_request_total` | What is my online throughput and error rate? |
+| **Online** Request | `feast_feature_server_request_latency_seconds` | What are my online p50/p99 latencies? |
+| **Online** Features | `feast_online_features_entity_count` | What is my online traffic shape? |
+| **Online** Store Read | `feast_feature_server_online_store_read_duration_seconds` | Is my online store the bottleneck? |
+| ODFV Transform | `feast_feature_server_transformation_duration_seconds` | How expensive are my read-path transforms? |
+| ODFV Transform | `feast_feature_server_write_transformation_duration_seconds` | How expensive are my write-path transforms? |
+| Push | `feast_push_request_total` | Is my ingestion pipeline sending data? |
+| Materialization | `feast_materialization_total` | Are my pipelines succeeding? |
+| Materialization | `feast_materialization_duration_seconds` | How long do my pipelines take? |
+| Freshness | `feast_feature_freshness_seconds` | How stale is the data my models are using? |
+| Resource | `feast_feature_server_cpu_usage / memory_usage` | Is my server healthy? |
+| **Offline** Request | `feast_offline_store_request_total` | What is my offline retrieval throughput? |
+| **Offline** Latency | `feast_offline_store_request_latency_seconds` | How long are my training queries taking? |
+| **Offline** Row Count | `feast_offline_store_row_count` | How much data are retrievals returning? |
+| **Audit** | `feast.audit` logger (online) | Who requested which features, when? |
+| **Audit** | `feast.audit` logger (offline) | Which training datasets were built, with how much data? |
+
+## How to Try It
+
+### Automated Demo
+
+We've extended the [feast-prometheus-metrics](https://github.com/ntkathole/feast-automated-setups/tree/main/feast-prometheus-metrics) automated demo to include offline store metrics and SOX audit logging. The extended traffic generator exercises both online and offline paths:
+
+```bash
+# Clone and run
+git clone https://github.com/ntkathole/feast-automated-setups.git
+cd feast-automated-setups/feast-prometheus-metrics
+
+# Run setup (uses feast from your environment)
+./setup.sh
+
+# Generate extended traffic including offline retrievals
+python3 generate_traffic_extended.py \
+ --url http://localhost:6566 \
+ --duration 120 \
+ --repo-path workspace/feast_demo/feature_repo \
+ --log-dir workspace/logs
+```
+
+After traffic generation, check the audit log:
+
+```bash
+# View structured audit entries
+cat workspace/logs/feast_audit.log | python3 -m json.tool
+
+# Count by event type
+cat workspace/logs/feast_audit.log | \
+ python3 -c "import sys,json; events=[json.loads(l)['event'] for l in sys.stdin]; print({e:events.count(e) for e in set(events)})"
+```
+
+### Manual Verification
+
+Verify offline store metrics are being emitted:
+
+```bash
+# Check the Prometheus metrics endpoint for offline store metrics
+curl -s http://localhost:8000 | grep feast_offline
+
+# Query Prometheus directly
+curl -s 'http://localhost:9090/api/v1/query?query=feast_offline_store_request_total'
+```
+
+### Enable in Your Deployment
+
+1. **Update `feature_store.yaml`** — Add `offline_features: true` and `audit_logging: true` to the metrics block
+2. **Configure audit log routing** — Set up a handler for the `feast.audit` logger in your logging config
+3. **Import the updated Grafana dashboard** — Add the offline store panels to your existing dashboard
+4. **Set up alerts** — Start with offline retrieval failures and row count anomalies
+
+
+We're excited to bring full-lifecycle observability to Feast — covering both the real-time serving path and the batch training path — and welcome feedback from the community!
+
+---
+
+*References:*
+- *[Existing blog: Monitoring Your Feast Feature Server with Prometheus and Grafana](https://feast.dev/blog/feast-feature-server-monitoring/)*
+- *[Feast Prometheus Metrics Demo](https://github.com/ntkathole/feast-automated-setups/tree/main/feast-prometheus-metrics)*
diff --git a/infra/website/public/images/blog/offline_store_operational_metrics.png b/infra/website/public/images/blog/offline_store_operational_metrics.png
new file mode 100644
index 0000000000000000000000000000000000000000..12006128d819077cbc4f3966d441757e2723b898
GIT binary patch
literal 651807
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