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

Application Observability

Application Observability

Daniel Heinrich

February 04, 2022
Tweet

More Decks by Daniel Heinrich

Other Decks in Programming

Transcript

  1. Problem • Micro-Services • Umgebungen • Infrastruktur • Loadbalancer •

    Umsysteme • Kubernetes • Datenbanken • Kommunikation • REST • Online • Externe Systeme • Datei Transfer
  2. Wat? Observability => Die Fähigkeit unsere laufende Software zu beobachten

    Unsere Fragen: • Was macht unsere Anwendung (Auslastung) • Wie ist es zu einen Zustand gekommen • Was ist seit wann kaputt • Korrelationen? (Mehr CPU-Verbrauch mit neuer Version) • Trends (Lastspitzen, Memoryleaks)
  3. Wat? • Logs: (un)struckturierte Anwendung-Events • Startup Nachricht, Exceptions, Fachliche

    Events • Metriken: aggregierte Zahlenreihen / Messwerte • CPU/Memory Verbrauch, Antwortzeiten • Alerts • Trace: Repräsentation von kausal zusammenhängenden verteilten Events A log is an event that happened and a metric is a measurement of the health of a system. [Sridharan]
  4. Wat? Verwirrend, da; • Logs gleichgesetzt mit Technik (z.B. StdOut,

    /var/log/*) • Metrikwerte & CorrelationIds in Logeinträge Traces and metrics are an abstraction built on top of logs that pre- process and encode information along two orthogonal axes, one being request-centric (trace), the other being system-centric (metric). [Sridharan]
  5. Wat? Warum nicht nur Log-Aggregierung? • unstrukturiert & uneinheitlich •

    Ad-Hoc Abfragen stark beschränkt • Nicht alle Metriken aus Events ableitbar (periodic, system-level measurements) • Skaliert nicht • Reaggregationen oft nicht Sinnvoll (p99 mehrerer Instanzen) Text Logs: eingesammelt => aggregiert Messwerte: aggregiert => eingesammelt
  6. Prometheus • Pull-Basierter Metrik-Collector • Einzel-Instanz TSDB (Timeseries Database) •

    Ausgelegt für Mio. Datenreihen • ~1.x Byte pro Datenpunkt • Beispiel Anwendung: 6 Wochen, ~1E10 Datenpunkte, 5GB, 20K Datenreihen • Querysprache • Alerting System • Differenzieren zwischen API / Anwendung • OpenTelemetry • Alternative Backends (z.B. Cortex, Thanos), Caches usw.
  7. Prometheus • de facto Metrikformat => Framework/Library/Tool support • Multidimensional

    (z.B. HTTP Method, Service, Datacenter) • Aggregierungen über Dimensionen/Zeitfenster beim Abfragezeitpunkt • Advanced Alerting System • Alerts filtern • Child/Parent beziehungen • Silence • Unterschiedliche Notification Möglichkeiten (Email, SMS, Telegram, Rocketchat, …)
  8. Jaeger • Verteilt globale Trace-Ids (vgl. Correlation ID) und sammelt

    erzeugte Traces • Agent, Collector, Query, Graph + Datenbank • OpenTelemetry • Funktioniert über weiterreichen von Header (HTTP, Kafka, …) • Sampling der Traces • Integriert in Service Meshes wie Istio • Basiert auf instrumentierung von Anwendungs Libraries (z.B. Proxy JdbcConnection)
  9. Was muss man aufsetzten • Prometheus • Exporter (z.B. für

    Elastic, Kafka) • Einsatz von Micrometer • wie Slf4J für Logs • default vieler Frameworks, z.B. Spring Boot • Prometheus Instanz betreiben Konfigurieren • Jaeger • Header weiterreichen • Libraries Instrumentieren (ggf. mit Java Agent) • Jaeger + Datenbank betreiben Beides wird von Rancher bereitgestellt