Ontwikkel een Prometheus-dashboard voor realtime incidentanalyse
description
Maakt het mogelijk dashboards te ontwerpen die directe operationele inzichten bieden, waardoor reactietijden bij incidenten worden verkort en de effectiviteit van monitoring wordt verbeterd, verder dan alleen basisalerts en metriekoptimalisatie.
prompt
Help me een Prometheus-dashboard te maken dat zich richt op het visualiseren van realtime incidentgegevens voor het volgende systeem of de volgende dienst: <Systeem of Dienst Naam ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze handleiding om een Prometheus-dashboard te maken voor jouw Backend Webapplicatie, gericht op realtime incidentgegevens en belangrijke statistieken:
1. **Verzamel de benodigde metriekgegevens**
- Zorg dat je de juiste metrics hebt geconfigureerd in je systeem:
- CPU-gebruik: bijvoorbeeld `node_cpu_seconds_total`
- Geheugengebruik: bijvoorbeeld `node_memory_Active_bytes`
- Responstijd: bijvoorbeeld een custom metric zoals `http_request_duration_seconds`
2. **Maak een Prometheus-gegevensbron en configureer je metriek**
- Controleer dat je Prometheus deze metrics correct scrapt en dat ze in de Prometheus UI zichtbaar zijn.
3. **Maak een nieuw Grafana-dashboard**
- Open Grafana en voeg een nieuw dashboard toe.
- Voeg nieuwe panels toe voor elke belangrijke statistiek.
4. **Visualisatie van CPU-gebruik**
- **Panel Type:** Graph / Tijdlijn
- **Query voorbeeld:**
```promql
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
```
- Dit toont het gemiddeld CPU-gebruik per instantie.
- **Instellingen:**
- Voeg waarschuwingen toe voor bijvoorbeeld CPU-gebruik boven 80%.
5. **Visualisatie van geheugengebruik**
- **Panel Type:** Graph
- **Query voorbeeld:**
```promql
node_memory_Active_bytes / node_memory_MemTotal_bytes * 100
```
- Toont het percentage actief geheugen.
- **Waarschuwingen:** bij bijvoorbeeld > 90% gebruik.
6. **Visualisatie van responstijd**
- **Panel Type:** Histogram of tijdlijn
- **Query voorbeeld:**
```promql
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
```
- Dit toont de 95e percentiel responstijd.
- **Waarschuwingen:** bij responstijden boven een drempelwaarde, bijvoorbeeld 500ms.
7. **Afwijkingen en incidenttrends**
- Maak een grafiek die de frequentie van incidenten toont (bijvoorbeeld foutcodes of timeouts).
- Voeg een panel toe met een trendanalyse:
- Bijvoorbeeld, het aantal foutieve requests per 5 minuten.
- Query:
```promql
sum(rate(http_requests_total{status=~"5.."}[5m]))
```
- Gebruik kleurcodes of alerts om afwijkingen te markeren.
8. **Hersteltijden**
- Bepaal hersteltijd door de tijd tussen een incident en het moment dat de situatie weer normaliseert.
- Maak een panel dat het aantal incidenten over tijd toont en markeert wanneer het aantal weer afneemt.
- Gebruik bijvoorbeeld:
```promql
sum(rate(incident_start[1h])) - sum(rate(incident_end[1h]))
```
(als je deze metrics hebt ingesteld)
9. **Waarschuwings- en alertingregels**
- Configureer alerts in Prometheus of Grafana om je te waarschuwen bij kritieke afwijkingen.
- Bijvoorbeeld, bij CPU-gebruik > 90% voor meer dan 5 minuten.
10. **Dashboard optimaliseren**
- Gebruik kleuren, annotaties en duidelijke labels.
- Voeg filters toe (bijvoorbeeld per instance of regio).
**Tip:** Test je dashboard door opzettelijk de metrics te verhogen en te zien of de waarschuwingen en visualisaties correct reageren.
Wil je dat ik een voorbeeld JSON-export voor het Grafana-dashboard aanlever?
provider: deepseek
model: deepseek-chat
Zeker, ik help je graag een effectief Prometheus-dashboard op te zetten voor je backend webapplicatie. Hier is een complete handleiding in het Nederlands:
### Stap 1: Vereiste Metrics Uitlezen via Exporters
Installeer en configureer eerst de benodigde exporters:
**Node Exporter** voor systeemmetrics:
```yaml
# node_exporter installatie
wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
./node_exporter
```
**Blackbox Exporter** voor responstijd:
```yaml
modules:
http_2xx:
prober: http
http:
preferred_ip_protocol: "ip4"
```
### Stap 2: Prometheus Configuratie
Voeg toe aan `prometheus.yml`:
```yaml
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://jouw-applicatie.nl
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
```
### Stap 3: Grafana Dashboard JSON Configuratie
Maak een nieuw dashboard en gebruik deze JSON-structuur:
```json
{
"dashboard": {
"title": "Backend Webapplicatie Monitoring",
"panels": [
{
"title": "CPU Gebruik Trend",
"type": "graph",
"targets": [{
"expr": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)",
"legendFormat": "{{instance}}"
}],
"alert": {
"conditions": [{
"evaluator": { "params": [80], "type": "gt" }
}]
}
},
{
"title": "Geheugengebruik Real-time",
"type": "graph",
"targets": [{
"expr": "node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes",
"legendFormat": "Gebruikt geheugen"
}]
},
{
"title": "Responsetijd (P95)",
"type": "graph",
"targets": [{
"expr": "histogram_quantile(0.95, rate(probe_duration_seconds_bucket[5m]))",
"legendFormat": "95e percentiel"
}]
},
{
"title": "Incident Detection - Afwijkingen",
"type": "stat",
"targets": [{
"expr": "abs(deriv(node_memory_MemTotal_bytes[5m])) > 1e9",
"legendFormat": "Geheugen Spike Gedetecteerd"
}]
}
]
}
}
```
### Stap 4: Alerting Regels voor Incidenten
Voeg toe aan `prometheus.rules.yml`:
```yaml
groups:
- name: backend-alerts
rules:
- alert: HogeCPU
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode='idle'}[5m])) * 100) > 85
for: 5m
annotations:
description: 'CPU usage boven 85% voor {{ $labels.instance }}'
- alert: GeheugenIncident
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 3m
annotations:
description: 'Geheugengebruik kritiek hoog op {{ $labels.instance }}'
```
### Stap 5: Hersteltijd Monitoring
Voeg deze query toe voor hersteltijd tracking:
```sql
time() - timestamp(up{job="backend"} == 1 unless up{job="backend"} offset 5m == 0)
```
### Aanbevolen Dashboard Layout:
1. **Bovenste rij**: Real-time statussen (CPU, Geheugen, Response)
2. **Midden**: Trendgrafieken met 7-dagen history
3. **Onder**: Incident log en hersteltijd metrics
4. **Rechterzijde**: Alert panel met actieve incidenten
### Tips voor Effectieve Visualisatie:
- Gebruik rode/oranje kleuren voor drempelwaarden
- Stel annotaties in voor incident markers
- Configureer moving averages voor trendherkenning
- Gebruik heatmaps voor patroonherkenning
Je kunt het dashboard verder aanpassen met extra panels voor:
- Request rates
- Error percentages
- Database connection pools
- Cache hit ratios
Moet ik specifieke onderdelen verder uitwerken of heb je vragen over bepaalde configuraties?