Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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.

Alexander Schwartz

October 17, 2019
Tweet

More Decks by Alexander Schwartz

Other Decks in Programming

Transcript

  1. .consulting .solutions .partnership
    Anwendungsmetriken
    sammeln und auswerten mit Micrometer
    Alexander Schwartz, Principal IT Consultant
    BaselOne (Basel, CH), 2019-10-17

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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();

    View full-size slide

  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!

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  18. © msg | Oktober 2019 | Anwendungsmetriken sammeln und auswerten mit Micrometer | Alexander Schwartz 20

    View full-size slide

  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

    View full-size slide

  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/)
    # 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",
    ...

    View full-size slide

  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
    ...

    View full-size slide

  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]))

    View full-size slide

  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() {
    /* ... */
    }

    View full-size slide

  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() {
    /* ... */
    }
    }

    View full-size slide

  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();
    /* ... */
    }
    }

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  29. .consulting .solutions .partnership
    Alexander Schwartz
    Principal IT Consultant
    +49 171 5625767
    [email protected]
    @ahus1de
    msg systems ag (Headquarters)
    Robert-Buerkle-Str. 1, 85737 Ismaning
    Germany
    www.msg.group

    View full-size slide