מדדים (Metrics)

נקודת קצה

נקודת הקצה ל-Prometheus: /metrics

מטריקות קיימות

  • Counters: errors_total{code}, telegram_updates_total{type,status}

  • Histograms: operation_latency_seconds{operation}

  • Gauges: active_indexes

מדדי CodeBot ייעודיים (Handlers/Commands/DB)

מטריקות ברירת מחדל ל־Handlers (ווב), Commands (בוט טלגרם) ו־DB. שמות ולייבלים:

  • codebot_handler_requests_total{handler,status,cache_hit} – Counter

  • codebot_handler_latency_seconds_bucket{handler,status,cache_hit,le} – Histogram

  • codebot_command_requests_total{command,status,cache_hit} – Counter

  • codebot_command_latency_seconds_bucket{command,status,cache_hit,le} – Histogram

  • codebot_db_requests_total{operation,status} – Counter

  • codebot_db_latency_seconds_bucket{operation,status,le} – Histogram

הערות לייבלים:

  • status: 2xx/3xx/4xx/5xx או ערך לוגי שהוזן ידנית (למשל cancelled/error).

  • cache_hit: hit/miss/unknown (או ערכי ביניים כמו warm/cold אם סופקו).

  • handler/command/operation: שמות מנורמלים (ללא רווחים, עד 120 תווים).

דוגמאות PromQL:

# קצב בקשות לפי Handler (1m)
sum by (handler) (rate(codebot_handler_requests_total[1m]))

# P95 לזמן Handler (5m)
histogram_quantile(0.95, sum by (handler, le) (rate(codebot_handler_latency_seconds_bucket[5m])))

# קצב פקודות טלגרם לפי Command (5m)
sum by (command) (rate(codebot_command_requests_total[5m]))

# P95 לזמן פקודות (5m)
histogram_quantile(0.95, sum by (command, le) (rate(codebot_command_latency_seconds_bucket[5m])))

# קצב אופרטציות DB לפי operation (5m)
sum by (operation) (rate(codebot_db_requests_total[5m]))

# P95 לזמן DB (5m)
histogram_quantile(0.95, sum by (operation, le) (rate(codebot_db_latency_seconds_bucket[5m])))

מטריקות OpenTelemetry (אם זמינות)

בעת שימוש ב־observability_instrumentation.@traced נרשמות המטריקות הבאות:

  • request.duration (Histogram) — משך פעולה בשניות

  • errors.total (Counter) — ספירת שגיאות

  • requests.active (UpDownCounter) — מספר בקשות פעילות

דוגמאות PromQL

# שיעור שגיאות
rate(errors_total[5m])

# P95 לזמן פעולה
histogram_quantile(0.95, rate(operation_latency_seconds_bucket[5m]))

# שיעור שגיאות לבקשות HTTP
sum by (status) (rate(http_requests_total{job="webapp"}[5m]))

# P90 למשכי פעולות ידניות דרך OTel
histogram_quantile(0.90, sum by (le) (rate(request_duration_bucket{job="webapp"}[10m])))

Tracing ב-Grafana

  • הוגדר datasource מסוג Jaeger תחת docker/grafana/provisioning/datasources/prometheus.yml (URL: http://jaeger:16686).

  • ניתן לחפש שירותים code-keeper-webapp/code-keeper-bot ולצלול ל-spans שנרשמים דרך @traced.

SLO/SLI לדוגמה

  • זמינות שירות API: 99.9% חודשית

  • זמן תגובה P95 לחיפוש: ≤ 1.5s

  • שיעור שגיאות חיפוש: ≤ 1%

התראות (Prometheus alerting rules)

ניתן להוסיף כללים לקובץ הכללים של Prometheus:

groups:
- name: codebot-webapp
  rules:
  - alert: HighErrorRate
    expr: sum(rate(errors_total[5m])) / sum(rate(http_requests_total[5m])) > 0.05
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "שיעור שגיאות גבוה"
      description: ">5% שגיאות ב־10 הדקות האחרונות"

  - alert: SlowSearchP95
    expr: histogram_quantile(0.95, rate(search_duration_seconds_bucket[5m])) > 1.5
    for: 15m
    labels:
      severity: warning
    annotations:
      summary: "חיפוש איטי (P95)"
      description: "P95 לזמן חיפוש גבוה מ־1.5s"