How to Monitor Seldon Core with Vigilmon (Inference Health, Latency & Replica Alerts)
Seldon Core is the most widely deployed open-source platform for serving machine learning models at scale on Kubernetes. It handles inference routing, canary deployments, A/B tests, and drift detection — but with that power comes complexity. When a model deployment is unhealthy, the failure modes can be subtle: one replica accepting traffic while others silently return errors, drift detection models running out of sync, or a canary receiving 100% of traffic after a misconfigured rollout.
In this tutorial you'll set up production monitoring for your Seldon Core deployments using Vigilmon, covering inference health, latency thresholds, and replica-level alerting.
Why Seldon Core deployments need external monitoring
Seldon Core runs inside Kubernetes, which means Kubernetes-internal health signals are available — but they don't tell the full story:
- Inference server error rate — a model container returns 200 to Kubernetes health probes but returns prediction errors to inference requests; the Kubernetes scheduler thinks everything is healthy
- Replica skew — one of three replicas is loading a stale model version after a failed rollout; 33% of requests get wrong predictions, but pod status shows
Runningfor all replicas - Canary routing stuck — a Seldon SeldonDeployment
canaryTrafficPercentwas set to 10% but a config drift caused it to serve 100%; no Kubernetes alarm fires - Pre/post processors failing — your transformer component (feature engineering or post-processing) silently returns errors while the predictor itself is healthy
- Explainer endpoint degraded — the explainability endpoint for regulatory compliance returns 503, which internal probes don't check
- External load balancer issue — Seldon's Istio ingress or the Ambassador gateway routing to your model is broken; pods are healthy but client requests fail
External monitoring from Vigilmon catches all of these because it probes the inference endpoint from outside the cluster, exactly as client applications do.
What you'll need
- A Kubernetes cluster with Seldon Core installed
- At least one
SeldonDeploymentrunning and serving predictions - A free Vigilmon account (sign up takes 30 seconds)
Step 1: Understand the Seldon Core endpoint structure
Seldon Core generates inference endpoints in a predictable pattern. For a deployment named my-classifier in namespace production:
# REST prediction endpoint
POST http://<ingress>/seldon/production/my-classifier/api/v1.0/predictions
# Health endpoint
GET http://<ingress>/seldon/production/my-classifier/api/v1.0/health/ping
# Ready endpoint
GET http://<ingress>/seldon/production/my-classifier/api/v1.0/health/ready
# Status endpoint (deployment-level health)
GET http://<ingress>/seldon/production/my-classifier/api/v1.0/status
Get your ingress address:
kubectl get svc -n istio-system istio-ingressgateway
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
# istio-ingressgateway LoadBalancer 10.96.0.100 203.0.113.50 80:31380/TCP,443:31390/TCP
# Or for Ambassador:
kubectl get svc -n default ambassador
Test the health ping:
curl http://203.0.113.50/seldon/production/my-classifier/api/v1.0/health/ping
# {"status":"ok"}
Test a prediction:
curl -X POST http://203.0.113.50/seldon/production/my-classifier/api/v1.0/predictions \
-H "Content-Type: application/json" \
-d '{"data": {"ndarray": [[1.0, 2.0, 3.0, 4.0]]}}'
# {"data":{"ndarray":[[0.97,0.03]]},"meta":{}}
Step 2: Add a custom health endpoint with model metadata
Seldon's built-in /health/ping is minimal. For richer monitoring, add a health endpoint to your model server that returns model version and replica information:
# MyModel.py (Seldon microservice format)
import os
import joblib
import numpy as np
class MyModel:
def __init__(self):
self.model = joblib.load("/app/model.pkl")
self.model_version = os.getenv("MODEL_VERSION", "unknown")
self.ready = True
def predict(self, X, features_names=None):
return self.model.predict_proba(X)
def health_status(self):
"""Custom health check — exposed at /health/status by Seldon."""
return {
"status": "ok",
"model_version": self.model_version,
"model_loaded": self.ready
}
Seldon automatically exposes the health_status method at a custom path. Alternatively, use a Kubernetes sidecar to expose a richer health endpoint:
# seldon-deployment.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: my-classifier
namespace: production
spec:
predictors:
- name: default
graph:
name: classifier
type: MODEL
implementation: SKLEARN_SERVER
modelUri: gs://your-bucket/models/classifier/v3
envSecretRefName: seldon-gcs-secret
componentSpecs:
- spec:
containers:
- name: classifier
env:
- name: MODEL_VERSION
value: "v3"
readinessProbe:
httpGet:
path: /api/v1.0/health/ready
port: 9000
initialDelaySeconds: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /api/v1.0/health/ping
port: 9000
initialDelaySeconds: 60
periodSeconds: 30
replicas: 3
traffic: 100
Apply it:
kubectl apply -f seldon-deployment.yaml
# Watch it come up
kubectl rollout status deployment/my-classifier-default-0-classifier -n production
Step 3: Set up HTTP monitoring in Vigilmon
With your deployment running, add Vigilmon monitors:
Monitor 1: Inference health ping
- Log in to vigilmon.online → Monitors → New Monitor
- Type: HTTP / HTTPS
- URL:
http://203.0.113.50/seldon/production/my-classifier/api/v1.0/health/ping - Check interval: 1 minute
- Expected response: status code
200, body contains"status":"ok" - Save
Monitor 2: Readiness check (all replicas serving)
- Monitors → New Monitor → HTTP / HTTPS
- URL:
http://203.0.113.50/seldon/production/my-classifier/api/v1.0/health/ready - Check interval: 2 minutes
- Expected response: status code
200 - Save
The readiness endpoint returns 200 only when all replicas are ready, so a partial replica failure causes this check to fail — giving you replica-level alerting without querying the Kubernetes API.
Step 4: Add inference smoke-test monitoring
Health pings tell you the server is alive. To verify that the actual prediction path works, set up a lightweight inference probe.
Vigilmon supports HTTP monitors with POST method and custom bodies. Create a monitor that sends a real inference request:
- Monitors → New Monitor → HTTP / HTTPS
- URL:
http://203.0.113.50/seldon/production/my-classifier/api/v1.0/predictions - Method: POST
- Request headers:
Content-Type: application/json - Request body:
{"data": {"ndarray": [[1.0, 2.0, 3.0, 4.0]]}} - Check interval: 5 minutes
- Expected response: status code
200, body contains"ndarray" - Save
This confirms the entire inference path — model loading, preprocessing, prediction, postprocessing — is working correctly, not just the HTTP layer.
Step 5: Monitor inference latency
Model inference latency is a critical SLO metric. A spike usually indicates:
- Model reload after an eviction
- Increased input complexity or batch size
- GPU contention from other workloads
- Network slowdown to a remote model registry
Set response time thresholds on your inference smoke-test monitor:
- Open the inference smoke-test monitor → Alerts → Response Time
- Set: Alert if response time exceeds 500ms (adjust to your p95 baseline)
- Save
For latency-sensitive deployments, consider setting multiple thresholds:
- Warning at 300ms — Slack notification
- Critical at 1000ms — PagerDuty page
Step 6: Monitor drift detection endpoints
If you've deployed a Seldon drift detector (e.g., using Alibi Detect), monitor it separately:
# Typical drift detector endpoint pattern
curl -X POST http://203.0.113.50/seldon/production/my-classifier-drift/api/v1.0/predictions \
-H "Content-Type: application/json" \
-d '{"data": {"ndarray": [[1.0, 2.0, 3.0, 4.0]]}}'
Add a monitor for the drift detector:
- Monitors → New Monitor → HTTP / HTTPS
- URL: your drift detector endpoint
- Check interval: 5 minutes
- Expected response:
200 - Save
Drift detectors are easy to overlook — they don't directly serve predictions, but a dead drift detector means you lose your early warning system for model degradation in production.
Step 7: Configure alerts
Slack — immediate notification:
- Settings → Notifications → Add Channel → Slack
- Paste your webhook URL
- Assign to health and readiness monitors
Email escalation:
- Settings → Notifications → Add Channel → Email
- Add your ML engineering team's email
- Set delay: 5 minutes (avoid noise from transient probe failures during rollouts)
Tip for canary deployments: During a canary rollout, Seldon briefly has mixed traffic between model versions. Add a temporary 10-minute alert delay on the inference smoke-test monitor during planned rollouts to suppress false positives from in-flight version transitions.
Step 8: Status page for model consumers
Data science teams, product managers, and downstream services all need visibility into model health:
- Status Pages → New Status Page
- Add all monitors: health ping, readiness, inference smoke test, drift detector
- Name it "ML Inference Platform"
- Share the URL in your ML platform documentation
Use Maintenance Windows during model retraining and deployment cycles (typically 2–5 minutes of downtime during a blue/green switch) to suppress alerts and show a maintenance notice on the status page.
Monitoring coverage matrix
| Failure type | Vigilmon monitor | How detected |
|---|---|---|
| Seldon process crash | HTTP /health/ping | Connection refused or non-200 |
| Replica not ready | HTTP /health/ready | Returns 503 when replicas < desired |
| Prediction path broken | POST inference probe | Non-200 or missing response body |
| Inference latency spike | Response time threshold | Exceeds configured ms threshold |
| Ingress/LB routing failure | Any external HTTP monitor | Connection error or wrong status |
| Drift detector down | HTTP drift endpoint | Non-200 response |
Conclusion
Seldon Core manages complex model serving workflows — replicas, canaries, shadow deployments, drift detectors — and a failure in any layer can silently degrade prediction quality or throughput. With Vigilmon you get:
- Multi-layer health monitoring that distinguishes HTTP server liveness from replica readiness from inference correctness
- Response time thresholds tuned to your model's latency SLO
- Drift detector monitoring so your data quality watchdog is itself watched
- Status pages for ML platform visibility across your organization
Create your free Vigilmon account and have your first Seldon deployment monitored in under 10 minutes.