4. DEFINITION OF "DONE"DEFINITION OF "DONE"
So ware baut
Unit- und Integrationstest laufen
4infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
5. DEFINITION OF "DONE"DEFINITION OF "DONE"
So ware baut
Unit- und Integrationstest laufen
Akzeptanztests für den fachlichen Usecase
Tests für Performance
4infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
6. DEFINITION OF "DONE"DEFINITION OF "DONE"
So ware baut
Unit- und Integrationstest laufen
Akzeptanztests für den fachlichen Usecase
Tests für Performance
Die So ware wird verwendet ;-)
4infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
7. DEFINITION OF "DONE"DEFINITION OF "DONE"
So ware baut
Unit- und Integrationstest laufen
Akzeptanztests für den fachlichen Usecase
Tests für Performance
Die So ware wird verwendet ;-)
Usecase & Performance werden in Produktion laufend überwacht
4infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
12. FEHLERKATEGORIENFEHLERKATEGORIEN
Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt
Unknown Knowns: Fehlersituation war anderen klar
Known Unknowns: Mögliche Fehlersituation, Schwellwerte unklar
6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
13. FEHLERKATEGORIENFEHLERKATEGORIEN
Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt
Unknown Knowns: Fehlersituation war anderen klar
Known Unknowns: Mögliche Fehlersituation, Schwellwerte unklar
Unknown Unknowns: Unbekannte Fehlersituation
6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
16. . MONITORINGMONITORING
Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche
Metriken)
Beobachtung durch einen geübten Metriken-Interpretierer, der bei
Bedarf Alarm schlägt
8infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
17. . MONITORINGMONITORING
Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche
Metriken)
Beobachtung durch einen geübten Metriken-Interpretierer, der bei
Bedarf Alarm schlägt
8infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
18. . MONITORINGMONITORING
Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche
Metriken)
Beobachtung durch einen geübten Metriken-Interpretierer, der bei
Bedarf Alarm schlägt
8infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
19. . MONITORINGMONITORING
Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche
Metriken)
Beobachtung durch einen geübten Metriken-Interpretierer, der bei
Bedarf Alarm schlägt
ALTERNATIVE: IN SOFTWARE ABGEBILDETALTERNATIVE: IN SOFTWARE ABGEBILDET
8infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
20. SLI SLO SLASLI SLO SLA
SLI: Service Level Indicator
SLO: Service Level Objectives*
SLA: Service Level Agreement*
*hier PO/fachlicher Ansprechpartner involviert
9infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
21. BEISPIEL 1. "COUPON EINLÖSEN"BEISPIEL 1. "COUPON EINLÖSEN"
SLI: Antwortszeiten für HTTP Requests
SLO: Antwortszeiten liegen unter 100ms
SLA: Dieses Ziel ist erfüllt für 99,5% der Requests
10infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
22. BEISPIEL 2. "DURCHSATZ"BEISPIEL 2. "DURCHSATZ"
SLI: Verarbeitete Requests pro Sekunde?
SLO: ???
SLA: ???
11infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
23. BEISPIEL 2. "DURCHSATZ"BEISPIEL 2. "DURCHSATZ"
- record: service:requests:persecond
expr: sum (rate(http_server_requests_count{method="POST", url="/receipts"}[1m]))
- record: expected_wait:seconds
expr: (service:requests:persecond / (receipts_in_queue +1)) # +1 prevent div-by-zero
- alert: Waiting too long
expr: expected_wait > 1800
12infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
24. BEISPIEL 3. KEINE KUNDEN AN DER KASSEBEISPIEL 3. KEINE KUNDEN AN DER KASSE
max(queueLength): 0
max(requestTime): 0
13infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
34. …/ACTUATOR/PROMETHEUS…/ACTUATOR/PROMETHEUS
# HELP http_server_requests_max
# TYPE http_server_requests_max gauge
http_server_requests_max{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/prom
http_server_requests_max{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/heal
# HELP http_server_requests
# TYPE http_server_requests summary
http_server_requests_count{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/pr
http_server_requests_count{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/he
http_server_requests_count{exception="None",method="GET",outcome="CLIENT_ERROR",status="401",uri="root",}
23infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
35. BEISPIEL: EIGENE METRIKBEISPIEL: EIGENE METRIK
Gauge.builder("receipts_in_queue",
someRepository,
SomeRepository::count)
.description("Number of unprocessed receipts in queue")
.tag("key", "value")
.register(meterRegistry);
24infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
36. METRIK ALA CARTEMETRIK ALA CARTE
Counter: Zähler, wird nur inkrementiert
Gauge: Messwert welcher hoch- und runtergezählt werden kann
Timer: Dauer von Aufrufen
DistributionSummary: Verteilung von Ereignissen
Percentile: Vorberechnet, z. Bsp. 99,5% der Requests sind schneller als
100 ms
Histogramm: Buckets die Aufschluss über die Verteilung im nachhinein
liefern
25infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
43. PROMETHEUS TOOLINGPROMETHEUS TOOLING
Validierung von Prometheus Config, Rules lokal möglich
Metric Endpoints können ebenfalls validiert werden
Unit-Test Support
32infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
44. PROMETHEUS UNIT TESTINGPROMETHEUS UNIT TESTING
RULERULE
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: P1
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down fo
33infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
45. PROMETHEUS UNIT TESTINGPROMETHEUS UNIT TESTING
RULE TESTINGRULE TESTING
rule_files:
- alerts.yml
tests:
- interval: 1m
# Series data.
# This uses expanding notation:
# 'a+bxc' becomes 'a a+b a+(2*b) a+(3*b) … a+(c*b)'
# 'a-bxc' becomes 'a a-b a-(2*b) a-(3*b) … a-(c*b)'
input_series:
- series: 'up{job="prometheus", instance="localhost:9090"}'
values: '1+0x6 0+0x7' # 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
# Unit test for alerting rules.
alert_rule_test:
- eval_time: 12m
alertname: InstanceDown
exp_alerts:
- exp_labels:
severity: P1
instance: localhost:9090
job: prometheus
exp_annotations:
summary: "Instance localhost:9090 down"
description: "localhost:9090 of job prometheus has been down for
34infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
47. PROMETHEUS UNIT TESTINGPROMETHEUS UNIT TESTING
Möglichkeit Alerts zu testen
Input Serien können definiert werden
Sowohl PromQL als auch Alert testbar
Records helfen beim mocken
36infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
48. FAZITFAZIT
Was zählt: Wie verhält sich die So ware für den Kunden.
Denkt zuerst an Alerting! Instrumentation und Monitoring sind nur Mittel
zum Zweck.
Code-basierter Ansatz von Prometheus und Alertmanager ermöglichen
viele Vorteile.
37infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
49. DANKE!DANKE!
Daniel Fuchs Vladimir Dobriakov
@honnel @enterprise_geek
synyx.de infrastructure-as-code.de
38infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
50. BILDERBILDER
Credits:
"Beigel Bake at Brick Lane" von
,
"Empty Seasonal Area", von ,
von
von
von ,
von ,
von ,
https://www.flickr.com/photos/madmetal/ CC License
https://www.flickr.com/photos/walmart3/
CC License
"Donald Rumsfeld Unknown Unknowns !" Ali
Dashboard, gauge, meter, speed icon Malik Abimanyu
Heartbeat icon Dave Gandy SIL Open Font License
Map icon Ionicons MIT
Notes, record, stationery, taking, writing icon Eucalyp Studio
Creative Commons (Attribution 3.0 Unported)
39infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
51. …UND IN DER PRAXIS?…UND IN DER PRAXIS?
Bekommen wir etwas rein?
Haben wir einen Stausituation?
Wird zu viel abgelehnt?
Wann war der letzte Import?
Antwortzeiten niedrig genug?
40infrastructure-as-code.de @enterprise_geek // synyx.de @honnel