SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
SERVICE ORIENTEDSERVICE ORIENTED
ALERTINGALERTING
Vladimir Dobriakov Daniel Fuchs
1infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
HELLO #AWSUGCGN!HELLO #AWSUGCGN!
2infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
GETTING STARTEDGETTING STARTED
3infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
DEFINITION OF "DONE"DEFINITION OF "DONE"
So ware baut
Unit- und Integrationstest laufen
4infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
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
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
FEHLERSITUATIONENFEHLERSITUATIONEN
5infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
FEHLERKATEGORIENFEHLERKATEGORIEN
6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
FEHLERKATEGORIENFEHLERKATEGORIEN
Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt
6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
FEHLERKATEGORIENFEHLERKATEGORIEN
Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt
Unknown Knowns: Fehlersituation war anderen klar
6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
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
{UN}KNOWN {UN}KNOWNS{UN}KNOWN {UN}KNOWNS
Known
Knowns
Unknown
Knowns
Known
Unknowns
Unknown
Unknowns
Monitoring &
Alerting
Health Checks
Logging
ERROR/
WARN
Metriken Tracing
Logging
INFO/
DEBUG
7infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
. MONITORINGMONITORING
Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche
Metriken)
8infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
. 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
. 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
. 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
. 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
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
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
BEISPIEL 2. "DURCHSATZ"BEISPIEL 2. "DURCHSATZ"
SLI: Verarbeitete Requests pro Sekunde?
SLO: ???
SLA: ???
11infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
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
ANOMALY DETECTIONANOMALY DETECTION
"Uns geht es gut aber wir bekommen keine Daten"
14infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
ANOMALY DETECTION - F'ANOMALY DETECTION - F'
- record: find_coupon:persecond
expr: sum by(key) (rate(counter_find_coupon[1m]))
- record: find_coupon:decline
expr: ((find_coupon:persecond offset 5m) / (find_coupon:persecond +1))
- alert: sudden decline in transactions
expr: max_over_time(find_coupon:decline[2h]) > 10
AND find_coupon:persecond < 0.5
15infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
FEIERABEND IST SICHER…FEIERABEND IST SICHER…
16infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
…IN DER BADEWANNE…IN DER BADEWANNE
17infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
HANDS ON!HANDS ON!
18infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
ALERTING ARCHITEKTUR I.ALERTING ARCHITEKTUR I.
App
App
Datasource
Alertmanager
Alertmanager
OpsGenieApp
Prometheus
Prometheus
Grafana
19infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
ALERTING ARCHITEKTUR II.ALERTING ARCHITEKTUR II.
Eigene Metriken
3rd Party
Mircometer
Prometheus
Endpoint
Prometheus
App
Meter Registry
20infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
SPRING BOOT & MICROMETERSPRING BOOT & MICROMETER
pom.xml
application.properties
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
management.endpoints.web.exposure.include=…,prom
21infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
AUFBAU METRIKAUFBAU METRIK
metric_name{tag="tag value"} value
22infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
…/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
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
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
PROMETHEUSPROMETHEUS
App
App
Datasource
Alertmanager
Alertmanager
OpsGenieApp
Grafana
Prometheus
Prometheus
26infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
PROMETHEUS - SCRAPE CONFIGPROMETHEUS - SCRAPE CONFIG
prometheus.yml.j2
scrape_configs:
- job_name: 'myservice'
scheme: https
metrics_path: /actuator/prometheus
static_configs:
- targets:
{% for h in groups['myservice'] | current_stage(inventory_hostname) %}
- '{{ h }}:8443'
{% endfor %}
labels:
stage: "{{ inventory_hostname | stage }}"
27infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
PROMETHEUS - RULES CONFIGPROMETHEUS - RULES CONFIG
groups:
- name: errors
rules:
- record: service:requests:persecond
expr: sum by(key) (rate(http_server_requests_count{job="myservice"}[1m]))
- record: service:errors:persecond
expr: sum by(key) (rate(http_server_requests_count{job="myservice",event!="success
- record: service:error_ratio
expr: service:errors:persecond / service:requests:persecond
- alert: ErrorRatioTooHigh
…
28infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
PROMETHEUS - RULES CONFIGPROMETHEUS - RULES CONFIG
- alert: ErrorRatioTooHigh
expr: service:error_ratio > 0.01 AND service:errors:persecond > 10
for: 5m
labels:
priority: P1
annotations:
summary: "Error ratio on {{ $labels.key }} exceeds threshold and there is a sign
description: >
Error ratio on {{ $labels.key }} is at {{ $value }}.
http://prometheus…:9090{{ graphLink "service:error_ratio" }}
29infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
ALERTMANAGERALERTMANAGER
App
App
Datasource
Alertmanager
Alertmanager
OpsGenieApp
Grafana
Prometheus
Prometheus
30infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
ALERTMANAGERALERTMANAGER
route:
receiver: opsgenie-integration
group_wait: 1s # reduce delay for faster feedback
group_by: ['stage', 'alertname', 'job', 'priority']
receivers:
- name: opsgenie-integration
opsgenie_configs:
- api_key: "{{ opsgenie_prometheus_api_key }}"
# In the application specific rule definitions set `labels:` `priority:`
# to create OpsGenie alert with a desired priority.
# Default is `P3`.
{% if inventory_hostname | stage == 'lxprod' %}
priority: P1
{% else %}
priority: P5
{% endif %}
message: '[{{ inventory_hostname | stage }}] {{ '{{' }} template "message" . {{
tags: '{{ inventory_hostname | stage }}, {{ '{{' }} template "tags" . {{ '}}' }}
31infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
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
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
PROMETHEUS UNIT TESTINGPROMETHEUS UNIT TESTING
PROMQL EXPRESSION TESTINGPROMQL EXPRESSION TESTING
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: 'receipts_in_queue{job="prometheus", instance="localhost:9090"}'
values: '10+10x2 30+20x5' # 10 20 30 30 50 70 90 110 130
promql_expr_test:
- expr: receipts_in_queue > 5
eval_time: 4m
exp_samples:
- labels: 'receipts_in_queue{job="prometheus",instance="localhost:9090
value: 50
35infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
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
DANKE!DANKE!
Daniel Fuchs Vladimir Dobriakov
@honnel @enterprise_geek
synyx.de infrastructure-as-code.de
38infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
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
…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

Weitere ähnliche Inhalte

Ähnlich wie Service oriented alerting

Virtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated ExecutionVirtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated Execution
team-WIBU
 

Ähnlich wie Service oriented alerting (20)

TRANSCONNECT® als Rückgrat für die Industrie 4.0 (TRANSCONNECT®-ANWENDERTAG 2...
TRANSCONNECT® als Rückgrat für die Industrie 4.0 (TRANSCONNECT®-ANWENDERTAG 2...TRANSCONNECT® als Rückgrat für die Industrie 4.0 (TRANSCONNECT®-ANWENDERTAG 2...
TRANSCONNECT® als Rückgrat für die Industrie 4.0 (TRANSCONNECT®-ANWENDERTAG 2...
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
 
Condition Monitoring, Produktionseffizienz, Traceability.
Condition Monitoring, Produktionseffizienz, Traceability.Condition Monitoring, Produktionseffizienz, Traceability.
Condition Monitoring, Produktionseffizienz, Traceability.
 
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
 
UI Testautomation in der Praxis ... von Lokalisierung bis Nachhaltigkeit (Cod...
UI Testautomation in der Praxis ... von Lokalisierung bis Nachhaltigkeit (Cod...UI Testautomation in der Praxis ... von Lokalisierung bis Nachhaltigkeit (Cod...
UI Testautomation in der Praxis ... von Lokalisierung bis Nachhaltigkeit (Cod...
 
Continuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF ProjektenContinuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF Projekten
 
Augmented Reality Workshop
Augmented Reality WorkshopAugmented Reality Workshop
Augmented Reality Workshop
 
Eine Referenzarchitektur für das Digitale Produkt
Eine Referenzarchitektur für das Digitale ProduktEine Referenzarchitektur für das Digitale Produkt
Eine Referenzarchitektur für das Digitale Produkt
 
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisierenIPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
 
Splunk Webinar: Maschinendaten anreichern mit Informationen
Splunk Webinar: Maschinendaten anreichern mit InformationenSplunk Webinar: Maschinendaten anreichern mit Informationen
Splunk Webinar: Maschinendaten anreichern mit Informationen
 
Agile (Software-) Prozesse - Quo Vadis? [in German]
Agile (Software-) Prozesse - Quo Vadis? [in German]Agile (Software-) Prozesse - Quo Vadis? [in German]
Agile (Software-) Prozesse - Quo Vadis? [in German]
 
2010 09 29 12-30 michael haser
2010 09 29 12-30 michael haser2010 09 29 12-30 michael haser
2010 09 29 12-30 michael haser
 
Virtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated ExecutionVirtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated Execution
 
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature TogglesZeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
 
Entwicklung mit Volt MX und Co. | Teil 1
Entwicklung mit Volt MX und Co. | Teil 1Entwicklung mit Volt MX und Co. | Teil 1
Entwicklung mit Volt MX und Co. | Teil 1
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 

Service oriented alerting

  • 1. SERVICE ORIENTEDSERVICE ORIENTED ALERTINGALERTING Vladimir Dobriakov Daniel Fuchs 1infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 2. HELLO #AWSUGCGN!HELLO #AWSUGCGN! 2infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 3. GETTING STARTEDGETTING STARTED 3infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 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
  • 10. FEHLERKATEGORIENFEHLERKATEGORIEN Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt 6infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 11. FEHLERKATEGORIENFEHLERKATEGORIEN Known Knowns: Fehlersituation zum Entwicklungszeitpunkt bekannt Unknown Knowns: Fehlersituation war anderen klar 6infrastructure-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
  • 14. {UN}KNOWN {UN}KNOWNS{UN}KNOWN {UN}KNOWNS Known Knowns Unknown Knowns Known Unknowns Unknown Unknowns Monitoring & Alerting Health Checks Logging ERROR/ WARN Metriken Tracing Logging INFO/ DEBUG 7infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 15. . MONITORINGMONITORING Laufzeitmetriken werden erfasst (Antwortzeiten, Durchsatz, fachliche Metriken) 8infrastructure-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
  • 25. ANOMALY DETECTIONANOMALY DETECTION "Uns geht es gut aber wir bekommen keine Daten" 14infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 26. ANOMALY DETECTION - F'ANOMALY DETECTION - F' - record: find_coupon:persecond expr: sum by(key) (rate(counter_find_coupon[1m])) - record: find_coupon:decline expr: ((find_coupon:persecond offset 5m) / (find_coupon:persecond +1)) - alert: sudden decline in transactions expr: max_over_time(find_coupon:decline[2h]) > 10 AND find_coupon:persecond < 0.5 15infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 27. FEIERABEND IST SICHER…FEIERABEND IST SICHER… 16infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 28. …IN DER BADEWANNE…IN DER BADEWANNE 17infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 29. HANDS ON!HANDS ON! 18infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 30. ALERTING ARCHITEKTUR I.ALERTING ARCHITEKTUR I. App App Datasource Alertmanager Alertmanager OpsGenieApp Prometheus Prometheus Grafana 19infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 31. ALERTING ARCHITEKTUR II.ALERTING ARCHITEKTUR II. Eigene Metriken 3rd Party Mircometer Prometheus Endpoint Prometheus App Meter Registry 20infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 32. SPRING BOOT & MICROMETERSPRING BOOT & MICROMETER pom.xml application.properties <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> management.endpoints.web.exposure.include=…,prom 21infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 33. AUFBAU METRIKAUFBAU METRIK metric_name{tag="tag value"} value 22infrastructure-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
  • 38. PROMETHEUS - SCRAPE CONFIGPROMETHEUS - SCRAPE CONFIG prometheus.yml.j2 scrape_configs: - job_name: 'myservice' scheme: https metrics_path: /actuator/prometheus static_configs: - targets: {% for h in groups['myservice'] | current_stage(inventory_hostname) %} - '{{ h }}:8443' {% endfor %} labels: stage: "{{ inventory_hostname | stage }}" 27infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 39. PROMETHEUS - RULES CONFIGPROMETHEUS - RULES CONFIG groups: - name: errors rules: - record: service:requests:persecond expr: sum by(key) (rate(http_server_requests_count{job="myservice"}[1m])) - record: service:errors:persecond expr: sum by(key) (rate(http_server_requests_count{job="myservice",event!="success - record: service:error_ratio expr: service:errors:persecond / service:requests:persecond - alert: ErrorRatioTooHigh … 28infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 40. PROMETHEUS - RULES CONFIGPROMETHEUS - RULES CONFIG - alert: ErrorRatioTooHigh expr: service:error_ratio > 0.01 AND service:errors:persecond > 10 for: 5m labels: priority: P1 annotations: summary: "Error ratio on {{ $labels.key }} exceeds threshold and there is a sign description: > Error ratio on {{ $labels.key }} is at {{ $value }}. http://prometheus…:9090{{ graphLink "service:error_ratio" }} 29infrastructure-as-code.de @enterprise_geek // synyx.de @honnel
  • 42. ALERTMANAGERALERTMANAGER route: receiver: opsgenie-integration group_wait: 1s # reduce delay for faster feedback group_by: ['stage', 'alertname', 'job', 'priority'] receivers: - name: opsgenie-integration opsgenie_configs: - api_key: "{{ opsgenie_prometheus_api_key }}" # In the application specific rule definitions set `labels:` `priority:` # to create OpsGenie alert with a desired priority. # Default is `P3`. {% if inventory_hostname | stage == 'lxprod' %} priority: P1 {% else %} priority: P5 {% endif %} message: '[{{ inventory_hostname | stage }}] {{ '{{' }} template "message" . {{ tags: '{{ inventory_hostname | stage }}, {{ '{{' }} template "tags" . {{ '}}' }} 31infrastructure-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
  • 46. PROMETHEUS UNIT TESTINGPROMETHEUS UNIT TESTING PROMQL EXPRESSION TESTINGPROMQL EXPRESSION TESTING 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: 'receipts_in_queue{job="prometheus", instance="localhost:9090"}' values: '10+10x2 30+20x5' # 10 20 30 30 50 70 90 110 130 promql_expr_test: - expr: receipts_in_queue > 5 eval_time: 4m exp_samples: - labels: 'receipts_in_queue{job="prometheus",instance="localhost:9090 value: 50 35infrastructure-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