MLOps Path

5.2.1 · блок 5

Логи в Kubernetes

Логи в Kubernetes

Зачем это нужно

Метрики сказали «error rate вырос». Логи говорят *почему*: stack trace, invalid feature payload, timeout к Feature API. В Kubernetes логи ephemeral: pod перезапустился — stdout исчез без централизованного сбора.

Для ML-сервисов логи особенно ценны: validation errors на входе, model version at startup, sample prediction debug (без PII leak).

Основные идеи

Container logs model.

Структурированные логи (JSON).


{"level":"error","msg":"predict failed","model_version":"1.3.0","error":"feature tenure missing","request_id":"abc"}

Поля для ML: model_version, clearml_task_id, inference_ms, batch_size. Не логировать raw PII и полные feature vectors в prod без policy.

Log levels.

Kubernetes metadata enrichment. Collector добавляет: namespace, pod, container, node, labels (app, version). Correlation с metrics via request_id.

Multi-container pods.

Rotation and size. Without limit, disk fill on node. Cluster logging agent ships and optionally truncates local.

What to log in incidents.

1. Stack traces (once per error type, not spam).

2. Upstream dependency errors (Feature API 503).

3. Model artifact path/hash at startup.

4. Request validation summary (count rejected, not each row in prod).

Anti-patterns.

Как это выглядит на практике

FastAPI inference (pattern):


import logging, json
logger = logging.getLogger("churn")
# JSON formatter in production

@app.post("/predict")
async def predict(req: Request):
    req_id = req.headers.get("x-request-id", "unknown")
    try:
        ...
    except ValidationError as e:
        logger.warning(json.dumps({"event": "validation_error", "request_id": req_id, "detail": str(e)}))
        raise

During incident:


kubectl logs -l app=churn-serving -n ml-prod --since=15m | jq 'select(.level=="error")'

Without Loki this breaks at scale — next lesson Grafana Alloy → Loki.

Runbook: «CrashLoopBackOff» → kubectl logs --previous for model import error; compare sklearn version in log vs MMS record.

Istio access log (JSON) complements app logs for RED errors at gateway.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию