====== 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}}