Esc
↑↓ to move↵ to openEsc to close

DocsOperations

Observability

The metrics and logs that tell you Riffle is healthy.

Every metric is prefixed riffle_ and always carries a tenant label. Every log line is structured JSON and always carries delivery_id, which traces one pull request across all four services.

Metrics

MetricMeaningWatch for
riffle_intake_latency_secondsWebhook received to 200 returnedAnything near GitHub's 10 s budget
riffle_scoring_duration_secondsEvent received to result writtenSustained growth: the queue is backing up
riffle_explainer_timeouts_totalExplanations degraded to the templateA step change: the explainer is slow or down
riffle_queue_depthEvents waiting to be scoredDrives KEDA autoscaling
riffle_tenant_model_aucPer-tenant ranking quality over timeA tenant falling below the global model
riffle_drift_scoreFeature distribution shift per tenantA tenant whose code has moved away from its training window

Following one pull request

Filter every service's logs on one delivery ID to see its whole journey:

json
{"level":"info","service":"intake","delivery_id":"8f2c…a91","tenant":"4192","msg":"published pr_event","latency_ms":41}
{"level":"info","service":"scorer","delivery_id":"8f2c…a91","tenant":"4192","msg":"scored","risk_score":0.81,"rank_band":"senior_recommended","model_version":"v7"}
{"level":"warn","service":"explainer","delivery_id":"8f2c…a91","tenant":"4192","msg":"timeout, template fallback","elapsed_ms":900}

Health signals

SignalHealthyMeaning when it is not
Intake latency, p99well under 10 sGitHub will retry, and duplicates rise
Holdout liftranked queue beats FIFOThe ranking is not helping; check drift and layer weights
Explainer timeoutsrare and flatQuality is degraded; ranks are still valid