Anwendungsmetriken sammeln und auswerten mit Micrometer

Anwendungsmetriken sammeln und auswerten mit Micrometer

Metriken sind neben Logging und Tracing ein wichtiger Pfeiler zur Überwachung der Anwendung. Mit Metriken können Probleme erkannt und Ressourcen-Engpässe identifiziert werden.
Das Projekt Micrometer bietet für Java-Anwendungen eine Fassade, mit der Metriken herstellerneutral in verschiedene Monitoring-Systeme geliefert werden können. Parallel zu Spring Boot Version 2.0 wurde Micrometer Version 1.0 veröffentlicht, welches nun die Standard-Bibliothek für Metriken in Spring Boot ist.
Damit versetzt es Teams in die Lage, Metriken effizient zu sammeln und für eigene Auswertungen einzusetzen.
Der Vortrag stellt die Verwendung von Micrometer in Spring Boot vor und zeigt die Auswertung von Metriken mit Prometheus und Grafana.

5f528a3f6814d28b583f31842e3e8d9e?s=128

Alexander Schwartz

October 17, 2019
Tweet

Transcript

  1. 1.

    .consulting .solutions .partnership Anwendungsmetriken sammeln und auswerten mit Micrometer Alexander

    Schwartz, Principal IT Consultant BaselOne (Basel, CH), 2019-10-17
  2. 2.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 3 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  3. 3.

    Über mich – Principal IT Consultant @ msg Travel &

    Logistics © msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 5 15+ Jahre Java 7 Jahre PL/SQL 7 Jahre Absatzfinanzierung 3,5 Jahre Online-Banking 7 Jahre IT-Consulting 600+ Geocaches @ahus1de
  4. 4.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 6 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  5. 5.

    Metriken als Teil der Observability Überblick Observability © msg |

    Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 7 Known Knowns Known Unknowns Unknown Unknowns Monitoring sagt mir, dass etwas kaputt ist (Symptom). Es ist Basis für eine Alarmierung, wenn es eine sofortige manuelle Reaktion erfordert. Observability ist der ganze Rest den ich brauche um herauszufinden, warum etwas nicht funktioniert. Situation war zum Entwicklungszeitpunkt bekannt Potentielle Problemstelle, Grenzwerte unklar Unerwartete Situation, zusätzliche Daten für Analyse notwendig Unknown Knowns Situation war Drittanbieter bekannt
  6. 6.

    Metriken als Teil der Observability Einbinden in das Monitoring ©

    msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 8 Situation war zum Entwicklungszeitpunkt bekannt Unerwartete Situation, zusätzliche Daten für Analyse notwendig Status Informationen (Health Check) Logs (Events) der Kategorie ERROR/WARN Tracing (Abhängigkeiten, Fehlerquellen, Latenzen) Metriken (Zähler, Füllstände, Fehlerraten, Ausführungszeiten) Logs (Events) der Kategorie INFO/DEBUG Monitoring & Alerting ? Analyse von Ursachen Situation war Drittanbieter bekannt + Potentielle Problemstelle, Grenzwerte unklar
  7. 7.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 9 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  8. 8.

    Micrometer hilft Metriken zu sammeln Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 10 Micrometer [maɪˈkrɒm.ɪ.tər] ist einer Fassade (API), mit dem in JVM-Anwendungen herstellerunabhängig Metriken gesammelt werden können („SLF4J, but for metrics“). • Multidimensionale Metriken • Bestehende Integrationen für Bibliotheken und Backends (z. B. Prometheus, Datadog, Ganglia, Graphite, JMX, New Relic) • Fertig integriert in Spring Boot 1.x und 2.x • Kann auch unabhängig verwendet werden Homepage: https://micrometer.io/ Lizenz: Apache 2.0
  9. 9.

    Micrometer hilft Metriken zu sammeln Micrometer API © msg |

    Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 11 Basis für alle Metriken: Name, optional: Tags und Beschreibung Ausgewählte Metrik-Typen: • Counter: Zähler, z. B. Anzahl von erfolgreichen und nicht erfolgreichen Aufrufen • Gauge: Messwert, z. B. Anzahl der aktiven Datenbank-Verbindungen • Timer: Stoppuhr, z. B. Dauer von Aufrufen Counter myOperationSuccess = Counter .builder("myOperation") .description("a description for humans") .tags("result", "success") .register(registry); myOperationSuccess.increment();
  10. 10.

    Micrometer hilft Metriken zu sammeln Micrometer API © msg |

    Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 12 Abgeleitete Metriken: • Rate: z. B. Aufrufe pro Sekunde • Percentile: z. B. 90% aller Aufrufe sind schneller als X ms • Histogram: z. B. X Aufrufe im Intervall von 50 bis 100 ms Histogramme können über mehrere Instanzen aggregiert werden, Perzentile nicht!
  11. 11.

    Micrometer hilft Metriken zu sammeln 1. https://twitter.com/rakyll/status/1045075510538035200 A better way

    to explain why tail latency matters © msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 13 Jaana B. Dogan (@rakyll) number of requests
  12. 12.

    Micrometer hilft Metriken zu sammeln Richtung des Pfeils: Datenfluss Micrometer

    Architektur © msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 14 Metrik Backend Meter Registry Micrometer Core 3rd Party Libraries Adapter Eigener Code Anwendung
  13. 13.

    Micrometer hilft Metriken zu sammeln Micrometer Architektur © msg |

    Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 15 Micrometer Core: • Keine Abhängigkeiten zu anderen Bibliotheken, enthält nur die API Meter Registry: • Stellt die Anbindung an ein Backend zum Speichern von Metriken her. Nur abhängig von Core und dem spezifischen Backend (Beispiel: micrometer-registry-prometheus) Adapter zum Abgreifen von Metriken: • spring-boot-actuator-autoconfigure: Stellt Prometheus-Endpunkt bereit, holt Metiken aus Caches, AMQP, Web • sping-cloud-netflix-core: Holt Metriken aus Circuit-Breaker-Library Hystrix
  14. 14.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 16 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  15. 15.

    Setup der Beispiel-Infrastruktur Richtung des Pfeils: Datenfluss Beispiel Infrastruktur ©

    msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 17 Grafana Prometheus Anwendung Alert Manager Metrik Backend Anwendung Anwendung
  16. 16.

    Setup der Beispiel-Infrastruktur Prometheus ist ein Monitoring System und eine

    Time Series Datenbank © msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 18 Aufgaben: Sammeln und Speichern von Metriken, Abfragen z. B. für Dashboards, Alarmierung, Trendberechnung Homepage: https://prometheus.io Lizenz: Apache 2.0
  17. 17.

    Setup der Beispiel-Infrastruktur Grafana stellt interaktive Dashboards bereit © msg

    | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 19 Aufgaben: Abfrage von Daten aus verschiedenen Quellen, Anzeigen als interactive Dashboards Homepage: https://grafana.com Lizenz: Apache 2.0
  18. 18.
  19. 19.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 21 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  20. 20.

    Metriken sammeln Metriken mit Prometheus einsammeln © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 22 Prometheus fragt bei der Anwendung die aktuellen Metriken ab (Pull-Prinzip) 1. Spring Boot konfigurieren 2. Anwendung stellt eine URL für Metriken bereit (/actuator/metrics bzw. /actuator/metrics/<name>) # for testing purposes make it available publicly management.endpoints.enabled-by-default=true management.endpoints.web.exposure.include=health,info,metrics,prometheus { "name": "hikaricp.connections.active", "description": "Active connections", ...
  21. 21.

    Metriken sammeln Metriken mit Prometheus einsammeln © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 23 3. Anwendung stellt eine URL für Prometheus bereit (/actuator/prometheus) 4. In Prometheus ist ein Target definiert (alternative via Service-Discovery) - job_name: 'springboot' scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['127.0.0.1:8080'] # HELP hikaricp_connections_active Active connections # TYPE hikaricp_connections_active gauge hikaricp_connections_active{pool="HikariPool-1",} 0.0 ...
  22. 22.

    Metriken sammeln und anzeigen Daten in Grafana anzeigen © msg

    | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 24 • Metriken direkt anzeigen http_server_requests_seconds_count • Filtern nach einem Label http_server_requests_seconds_count{status!='200'} • Aufrufrate ermitteln im 5-Minuten-Intervall rate (http_server_requests_seconds_count [5m]) • Verhältnis der Fehler ermitteln als gleitender Durchschnitt sum by (uri) (rate (http_server_requests_seconds_count {status!='200'} [5m])) / sum by (uri) (rate (http_server_requests_seconds_count [5m]))
  23. 23.

    Metriken sammeln und anzeigen Metriken in der Applikation sammeln ©

    msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 25 REST-Endpunkte zusätzlich zum Zähler mit Histogramm ausstatten Abfrage über: histogram_quantile(0.95, sum (rate(http_server_requests_seconds_bucket[5m])) by (le,uri)) @GetMapping("/countedCall") @Timed(histogram = true) public String countedCall() { /* ... */ }
  24. 24.

    Metriken sammeln und anzeigen Metriken in der Applikation sammeln ©

    msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 26 Aufrufe von beliebigen Spring-Bean-Methoden messen @Configuration public class MetricsApplicationConfig { // as of now, this aspect needs to be created manually, see // https://github.com/micrometer-metrics/micrometer/issues/361 @Bean public TimedAspect timedAspect(MeterRegistry registry) { return new TimedAspect(registry); } } @Component public class ServiceClass { @Timed(value = "doSomething", description = "desc") public int doSomething() { /* ... */ } }
  25. 25.

    Metriken sammeln und anzeigen Metriken in der Applikation sammeln ©

    msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 27 Eigene Metriken erzeugen @Component public class Service { private final Counter myOperationCounterSuccess; public Service(MeterRegistry registry) { myOperationCounterSuccess = Counter .builder("myOperation") .description("a description for humans") .tags("result", "success") .register(registry); } public void myOperation() { myOperationCounterSuccess.increment(); /* ... */ } }
  26. 26.

    Anwendungsmetriken sammeln und auswerten mit Micrometer © msg | Oktober

    2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 28 Metriken als Teil der Observability 1 Micrometer hilft Metriken zu sammeln 2 Setup der Beispiel-Infrastruktur 3 Metriken sammeln und anzeigen 4 Erfahrungen und Ausblick 5
  27. 27.

    Erfahrungen und Ausblick Metriken so einfach wie Logs © msg

    | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 29 • Integriert in Spring Boot und viele 3rd-Party-Bibliotheken • Auch unabhängig (ohne Spring Boot) verwendbar • Deutliche Verbesserung von Dimensionalität und Beschreibungen gegenüber z. B. Dropwizard Metrics • Zusätzliche Metriken werden automatisch gespeichert und können später ausgewertet werden • Metriken sind effizienter als Log-Ausgaben • Metriken können in Unit-Tests getestet werden • Micrometer liefert JVM, Framework und Domain Metrics – kombiniert mit Infrastruktur-Metriken im gleichen Backend können Metriken in Relation gesetzt werden
  28. 28.

    Links © msg | Oktober 2019 | Anwendungsmetriken sammeln und

    auswerten mit Micrometer | Alexander Schwartz 30 Micrometer.io https://micrometer.io Prometheus: https://prometheus.io Grafana https://grafana.com Prometheus Chrome Plugin https://github.com/fhemberger/chrome-prometheus-formatter @ahus1de Google SRE Book (Kapitel “Monitoring Distributed Systems”) https://landing.google.com/sre/ Beispielprojekt https://github.com/ahus1/prometheusspringbootminimal Folien https://www.ahus1.de/post/micrometer
  29. 29.

    .consulting .solutions .partnership Alexander Schwartz Principal IT Consultant +49 171

    5625767 alexander.schwartz@msg.group @ahus1de msg systems ag (Headquarters) Robert-Buerkle-Str. 1, 85737 Ismaning Germany www.msg.group