====== Runbook: Prometheus ====== **Trajanje:** ~15 minut \\ **Vloga:** DevOps, SRE \\ **Predpogoj:** Prometheus strežnik, Gateway deluje Zbiranje metrik iz Data Gateway s Prometheus. ---- ===== Potek dela ===== flowchart TD A[Začetek] --> B[Aktiviraj metrike] B --> C[Prometheus konfiguracija] C --> D[Dodaj Scrape-Job] D --> E[Prometheus reload] E --> F[Preveri cilje] F --> G{Aktiven?} G -->|Da| H[Končano] G -->|Ne| I[Preveri požarni zid/končno točko] style H fill:#e8f5e9 style I fill:#ffebee ---- ===== 1. Aktiviranje metrik v Gateway ===== **appsettings.json:** { "Metrics": { "Enabled": true, "Endpoint": "/metrics" } } **Ali prek NuGet (če ni vgrajeno):** # prometheus-net.AspNetCore dotnet add package prometheus-net.AspNetCore **Program.cs:** // Metrics Middleware app.UseHttpMetrics(); app.MapMetrics(); // /metrics končna točka ---- ===== 2. Testiranje končne točke metrik ===== curl http://localhost:5000/metrics # Pričakovan izpis (Prometheus oblika): # HELP http_requests_total Total HTTP requests # TYPE http_requests_total counter # http_requests_total{method="GET",endpoint="/api/v1/dsn/demo/tables",status="200"} 42 ---- ===== 3. Konfiguracija Prometheus ===== **/etc/prometheus/prometheus.yml:** global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: # Data Gateway - job_name: 'data-gateway' static_configs: - targets: ['gateway.example.com:5000'] metrics_path: /metrics scheme: http # ali https # Več instanc - job_name: 'data-gateway-cluster' static_configs: - targets: - 'gateway-1.example.com:5000' - 'gateway-2.example.com:5000' - 'gateway-3.example.com:5000' ---- ===== 4. Ponovno nalaganje Prometheus ===== # Config-Reload (brez ponovnega zagona) curl -X POST http://localhost:9090/-/reload # Ali ponovni zagon sudo systemctl restart prometheus ---- ===== 5. Preverjanje ciljev ===== **Spletni vmesnik:** ''http://prometheus:9090/targets'' Ali prek API: curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}' **Pričakovan izpis:** { "job": "data-gateway", "health": "up" } ---- ===== 6. Pomembne poizvedbe ===== **PromQL primeri:** # Stopnja zahtev (na sekundo) rate(http_requests_total{job="data-gateway"}[5m]) # Povprečni odzivni čas rate(http_request_duration_seconds_sum{job="data-gateway"}[5m]) / rate(http_request_duration_seconds_count{job="data-gateway"}[5m]) # Stopnja napak (5xx) sum(rate(http_requests_total{job="data-gateway",status=~"5.."}[5m])) / sum(rate(http_requests_total{job="data-gateway"}[5m])) # Poraba pomnilnika process_resident_memory_bytes{job="data-gateway"} # Aktivne povezave http_requests_in_progress{job="data-gateway"} ---- ===== 7. Kontrolni seznam ===== | # | Točka preverjanja | V | |---|-----------|---| | 1 | Končna točka metrik aktivirana | | | 2 | /metrics dosegljiv | | | 3 | Prometheus konfiguracija posodobljena | | | 4 | Prometheus ponovno naložen | | | 5 | Cilj "up" v Prometheus | | | 6 | Metrike vidne v Grafana | | ---- ===== Odpravljanje težav ===== | Težava | Vzrok | Rešitev | |---------|---------|--------| | Cilj "down" | Končna točka ni dosegljiva | Požarni zid, URL preveri | | ''connection refused'' | Gateway ne deluje | Zaženi Gateway | | ''404 Not Found'' | Metrike niso aktivirane | Preveri appsettings.json | | Brez metrik | Napačna pot | Preveri ''metrics_path'' | ---- ===== Kubernetes ServiceMonitor ===== Za Prometheus Operator: apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: data-gateway namespace: monitoring labels: release: prometheus spec: selector: matchLabels: app: data-gateway namespaceSelector: matchNames: - data-gateway endpoints: - port: http path: /metrics interval: 15s ---- ===== Povezani Runbooks ===== * [[.:grafana-dashboard|Grafana nadzorna plošča]] - Vizualizacija * [[.:alerting|Opozarjanje]] - Obvestila * [[..:automatisierung:kubernetes|Kubernetes]] - K8s namestitev ---- << [[.:start|<- Nadzor]] | [[.:grafana-dashboard|-> Grafana nadzorna plošča]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook prometheus metrics monitoring}}