SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
qaware.de
Cloud Observability mit Loki,
Prometheus, Tempo und Grafana
Franz Wimmer
franz.wimmer@qaware.de
@zalintyre @zalintyre.chaos.social
Franz Wimmer
Senior Software Engineer @ QAware GmbH
Seit 4 Jahren bei QAware
Studium Informatik an der TH Rosenheim
Vorlesung “Cloud Computing” @ TH Rosenheim
Entwicklung von Cloud Native Applications
DevOps Engineer
Public Speaking *
QAware | 2
* https://codefoundry.de/talks.html
Was ist eigentlich Observability?
Wie gut weiß ich über den internen Zustand meines Systems Bescheid, wenn
ich mir seine Ausgaben ansehe? (vgl. [Kal])
Was hat so ein modernes System als Ausgabe?
■ Eine Webseite?
■ Eine REST-API?
■ E-Mails an den Admin?
■ Ein spärlich gepflegtes Logfile?
Was ist, wenn das System aus vielen Microservices besteht?
QAware | 3
Was ist eigentlich Observability?
“Observability” meint heute typischerweise drei Themen:
■ Logs
■ Metriken
■ Traces
Alles zusammen ermöglicht einen Einblick auch in verteilte Microservices.
QAware | 4
Warum Observability?
Damals
Der Monolith
QAware | 6
Heute
Die Microservices
QAware | 7
[ ]
Der (Open-Source-)Stack
QAware | 8
Metriken:
Prometheus
Prometheus
QAware | 10
Zeitreihendatenbank für Echtzeitmetriken
PromQL für mächtige Queries
Alerting inklusive!
Seit: 2012
Lizenz: Apache 2.0
Metriken: Grundlagen
QAware | 11
Metriken sind Messwerte, die den aktuellen Zustand des Systems abbilden.
Beispiele:
■ CPU-Auslastung
■ Größe des JVM-Heaps
■ Anzahl der Aufrufe einer Schnittstelle
Die Metriken werden vom zu überwachenden System bereitgestellt.
Metriken können auch Metadaten haben.
Metriken: Grundlagen
QAware | 12
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 8
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 2.326528e+07
# HELP process_start_time_seconds Start time of the process since unix epoch
in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.65566242485e+09
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 1.782685696e+09
Im Grafana-Universum ist Prometheus
für die Metriken zuständig.
Prometheus zieht alle 15s Metriken von
allen konfigurierten Zielen.
Der Transport erfolgt meist über
HTTP: GET /metrics
Hier passiert noch keine Aggregation.
Dafür ist der Konsument zuständig.
Metric Types
QAware | 13
Metriken haben verschiedene Typen, um Daten abzubilden:
■ Counter
Eine Zahl, die entweder inkrementiert oder zurückgesetzt werden kann.
■ Gauge
Eine Metrik, die sich beliebig nach oben oder unten verändern kann.
■ Histogram
Werte in “Buckets” - z.B. die Dauer von Requests
■ Summary
Ähnlich zum Histogram, fasst Werte zusammen
PromQL
QAware | 14
PromQL ist eine mächtige Query Language, um die gewünschten Metriken zu filtern / aggregieren.
Die ganze Zeitreihe:
http_requests_total
Filter nach Labels:
http_requests_total{job="apiserver", handler="/api/comments"}
Rate berechnen:
rate(http_requests_total[5m])[30m:1m]
Prometheus: Architektur
QAware | 15
Bild: https://prometheus.io/docs/introduction/overview/
Konfiguration (Anwendung)
Beispiel: Quarkus & Micrometer
QAware | 16
# Gradle:
implementation("io.quarkus:quarkus-micrometer-registry-prometheus")
# Maven:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
Konfiguration (Anwendung)
Beispiel: microprofile-metrics
QAware | 17
@Gauge(unit = MetricUnits.NONE, name = "queueSize")
public int getQueueSize() {
return queue.size;
}
# Gradle
implementation("io.quarkus:quarkus-smallrye-metrics")
# Maven
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>
Konfiguration (Prometheus)
Die Metriken einsammeln
QAware | 18
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "Saturn node exporter"
scheme: https
static_configs:
- targets: ["saturn.qaware.de"]
basic_auth:
username: "*******************"
password: "*******************"
Logs:
Loki
Loki
QAware | 20
Jedes System hat Logs. Aber immer in einem anderen Format.
Loki ist der Log-Aggregator im Grafana-Ökosystem.
Passiver Log-Speicher - Logs müssen anders beschafft werden.
Promtail wird möglichst lokal installiert und schiebt die Logs zu Loki.
Seit: 2018
Lizenz: AGPL 3.0
Architektur
QAware | 21
Bild: https://grafana.com/oss/loki/
Promtail-Deployment: Helm
QAware | 22
apiVersion: v2
name: promtail
version: 1.0.0-SNAPSHOT
description: Chart to deploy grafana promtail
dependencies:
# https://github.com/grafana/helm-charts/blob/main/charts/promtail/Chart.yaml
- name: promtail
version: 3.11.0
repository: https://grafana.github.io/helm-charts
promtail:
# https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml
config:
snippets:
pipelineStages:
# not cri, because we're running in minikube with docker runtime
- docker: {}
lokiAddress: http://loki.loki:3100/loki/api/v1/push
Promtail-Deployment: Classic
QAware | 23
clients:
- url: "https://loki.qaware.de/loki/api/v1/push"
basic_auth:
username: loki
password: ****************
scrape_configs:
- job_name: journal
journal:
json: true
max_age: 12h
labels:
host: saturn
job: systemd-journal
relabel_configs:
- source_labels: ['__journal__systemd_unit']
target_label: 'unit'
Vorsicht: Labels nicht zu dynamisch verteilen!
https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/
LogQL
QAware | 24
Auch Loki hat eine eigene Query Language.
count_over_time({foo="bar"}[1m]) > 10
{host="$host", job="systemd-journal"}
| json
| line_format "{{ .unit }}: {{ .MESSAGE }}"
|= "$search"
Traces:
Tempo
Tempo
QAware | 26
Traces im Grafana-Ökosystem!
SDKs für verschiedene Plattformen
Kompatibel zu verschiedenen Tracing Agents:
■ Jaeger
■ Zipkin
■ Opentracing
■ Opentelemetry
Seit: 2020
Lizenz: AGPL 3.0
Architektur
QAware | 27
Bild: https://grafana.com/docs/tempo/latest/getting-started/
Traces: Grundlagen
QAware | 28
Traces visualisieren, welche Wege ein Request durch die Microservices genommen hat…
… und wo vielleicht ein Fehler passiert ist!
Traces: Grundlagen
QAware | 29
Bild: https://grafana.com/blog/2021/09/23/intro-to-distributed-tracing-with-tempo-opentelemetry-and-grafana-cloud/
Metriken und Traces verbinden?
Exemplars!
QAware | 30
Unterstützt z.B. in Micrometer 1.9
Bild: https://grafana.com/blog/2021/03/31/intro-to-exemplars-which-enable-grafana-tempos-distributed-tracing-at-massive-scale/
Visualisierung:
Grafana
Grafana
QAware | 32
Visualisierung für viele verschiedene Datenquellen:
■ Prometheus
■ Loki
■ Tempo
■ InfluxDB
■ ...
Seit: 2014
Lizenz: AGPL 3.0
Dashboards
QAware | 33
Daten aller Art werden in Dashboards visualisiert.
Grafana - Dashboards
QAware | 34
Keine Angst: Man muss Dashboards nicht mühsam selbst zusammenklicken.
https://grafana.com/grafana/dashboards/
Showcase
Mehr aus dem Grafana-Universum
k6
QAware | 37
Lasttests? k6!
Gebaut mit Go - die Tests werden in JavaScript geschrieben.
Testergebnisse landen in einer InfluxDB - visualisiert wird mit Grafana.
Further reading
QAware | 38
Blog: https://blog.qaware.de/posts/cloud-observability-grafana-spring-boot/
Showcase: https://github.com/zalintyre/cloud-observability-grafana-spring-boot
Grafana: https://grafana.com/
Prometheus: https://prometheus.io/
Loki: https://grafana.com/oss/loki/
Tempo: https://grafana.com/oss/tempo/
k6: https://github.com/grafana/k6
Quellen
QAware | 39
[Kal] R.E. Kalman,
On the general theory of control systems,
IFAC Proceedings Volumes,
Volume 1, Issue 1,
1960,
Pages 491-502,
ISSN 1474-6670,
https://doi.org/10.1016/S1474-6670(17)70094-8.
(https://www.sciencedirect.com/science/article/pii/S1474667017700948)
qaware.de
QAware GmbH
Aschauer Straße 32
81549 München
Tel. +49 89 232315-0
info@qaware.de
twitter.com/qaware
linkedin.com/company/qaware-gmbh
xing.com/companies/qawaregmbh
slideshare.net/qaware
github.com/qaware

Contenu connexe

Tendances

Tendances (20)

Docker Swarm for Beginner
Docker Swarm for BeginnerDocker Swarm for Beginner
Docker Swarm for Beginner
 
Getting Started Monitoring with Prometheus and Grafana
Getting Started Monitoring with Prometheus and GrafanaGetting Started Monitoring with Prometheus and Grafana
Getting Started Monitoring with Prometheus and Grafana
 
Gateway/APIC security
Gateway/APIC securityGateway/APIC security
Gateway/APIC security
 
Monitoring with Prometheus
Monitoring with PrometheusMonitoring with Prometheus
Monitoring with Prometheus
 
Observability, Distributed Tracing, and Open Source: The Missing Primer
Observability, Distributed Tracing, and Open Source: The Missing PrimerObservability, Distributed Tracing, and Open Source: The Missing Primer
Observability, Distributed Tracing, and Open Source: The Missing Primer
 
OpenTelemetry For Operators
OpenTelemetry For OperatorsOpenTelemetry For Operators
OpenTelemetry For Operators
 
Coffee Break NeuVector
Coffee Break NeuVectorCoffee Break NeuVector
Coffee Break NeuVector
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
 
MuleSoft Online Meetup a Guide to RTF application deployment - October 2020
MuleSoft Online Meetup   a Guide to RTF application deployment  - October 2020MuleSoft Online Meetup   a Guide to RTF application deployment  - October 2020
MuleSoft Online Meetup a Guide to RTF application deployment - October 2020
 
Google Cloud Networking Deep Dive
Google Cloud Networking Deep DiveGoogle Cloud Networking Deep Dive
Google Cloud Networking Deep Dive
 
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
 
Monitoring Kubernetes with Prometheus
Monitoring Kubernetes with PrometheusMonitoring Kubernetes with Prometheus
Monitoring Kubernetes with Prometheus
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Understanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManagerUnderstanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManager
 
Azure Functions Real World Examples
Azure Functions Real World Examples Azure Functions Real World Examples
Azure Functions Real World Examples
 
Prometheus – a next-gen Monitoring System
Prometheus – a next-gen Monitoring SystemPrometheus – a next-gen Monitoring System
Prometheus – a next-gen Monitoring System
 
OpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleOpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image Lifecycle
 
Prometheus and Docker (Docker Galway, November 2015)
Prometheus and Docker (Docker Galway, November 2015)Prometheus and Docker (Docker Galway, November 2015)
Prometheus and Docker (Docker Galway, November 2015)
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 

Similaire à Cloud Observability mit Loki, Prometheus, Tempo und Grafana

Similaire à Cloud Observability mit Loki, Prometheus, Tempo und Grafana (20)

Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
DACHNUG50 CNX3 Monitoring.pdf
DACHNUG50 CNX3 Monitoring.pdfDACHNUG50 CNX3 Monitoring.pdf
DACHNUG50 CNX3 Monitoring.pdf
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererKubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container Orchestrierer
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous Integration
 
Service Mesh - Kilometer 30 im Microservices-Marathon
Service Mesh - Kilometer 30 im Microservices-MarathonService Mesh - Kilometer 30 im Microservices-Marathon
Service Mesh - Kilometer 30 im Microservices-Marathon
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
 
Pink Monitoring oder wie Prometheus Licht ins Dunkel der Container bringt 
Pink Monitoring oder wie Prometheus Licht ins Dunkel der Container bringt Pink Monitoring oder wie Prometheus Licht ins Dunkel der Container bringt 
Pink Monitoring oder wie Prometheus Licht ins Dunkel der Container bringt 
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
 
Go on a Bughunt in production, but without a map! @ JavaLand 2023
Go on a Bughunt in production, but without a map! @ JavaLand 2023Go on a Bughunt in production, but without a map! @ JavaLand 2023
Go on a Bughunt in production, but without a map! @ JavaLand 2023
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 
Cloud Native Computing & DevOps
Cloud Native Computing & DevOpsCloud Native Computing & DevOps
Cloud Native Computing & DevOps
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009
 
Steinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen EvolutionSteinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen Evolution
 
Augmented Reality Workshop
Augmented Reality WorkshopAugmented Reality Workshop
Augmented Reality Workshop
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
 

Plus de QAware GmbH

"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
QAware GmbH
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
QAware GmbH
 

Plus de QAware GmbH (20)

50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile Architecture
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API Gateways
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
How to speed up Spring Integration Tests
How to speed up Spring Integration TestsHow to speed up Spring Integration Tests
How to speed up Spring Integration Tests
 

Cloud Observability mit Loki, Prometheus, Tempo und Grafana

  • 1. qaware.de Cloud Observability mit Loki, Prometheus, Tempo und Grafana Franz Wimmer franz.wimmer@qaware.de @zalintyre @zalintyre.chaos.social
  • 2. Franz Wimmer Senior Software Engineer @ QAware GmbH Seit 4 Jahren bei QAware Studium Informatik an der TH Rosenheim Vorlesung “Cloud Computing” @ TH Rosenheim Entwicklung von Cloud Native Applications DevOps Engineer Public Speaking * QAware | 2 * https://codefoundry.de/talks.html
  • 3. Was ist eigentlich Observability? Wie gut weiß ich über den internen Zustand meines Systems Bescheid, wenn ich mir seine Ausgaben ansehe? (vgl. [Kal]) Was hat so ein modernes System als Ausgabe? ■ Eine Webseite? ■ Eine REST-API? ■ E-Mails an den Admin? ■ Ein spärlich gepflegtes Logfile? Was ist, wenn das System aus vielen Microservices besteht? QAware | 3
  • 4. Was ist eigentlich Observability? “Observability” meint heute typischerweise drei Themen: ■ Logs ■ Metriken ■ Traces Alles zusammen ermöglicht einen Einblick auch in verteilte Microservices. QAware | 4
  • 10. Prometheus QAware | 10 Zeitreihendatenbank für Echtzeitmetriken PromQL für mächtige Queries Alerting inklusive! Seit: 2012 Lizenz: Apache 2.0
  • 11. Metriken: Grundlagen QAware | 11 Metriken sind Messwerte, die den aktuellen Zustand des Systems abbilden. Beispiele: ■ CPU-Auslastung ■ Größe des JVM-Heaps ■ Anzahl der Aufrufe einer Schnittstelle Die Metriken werden vom zu überwachenden System bereitgestellt. Metriken können auch Metadaten haben.
  • 12. Metriken: Grundlagen QAware | 12 # HELP process_open_fds Number of open file descriptors. # TYPE process_open_fds gauge process_open_fds 8 # HELP process_resident_memory_bytes Resident memory size in bytes. # TYPE process_resident_memory_bytes gauge process_resident_memory_bytes 2.326528e+07 # HELP process_start_time_seconds Start time of the process since unix epoch in seconds. # TYPE process_start_time_seconds gauge process_start_time_seconds 1.65566242485e+09 # HELP process_virtual_memory_bytes Virtual memory size in bytes. # TYPE process_virtual_memory_bytes gauge process_virtual_memory_bytes 1.782685696e+09 Im Grafana-Universum ist Prometheus für die Metriken zuständig. Prometheus zieht alle 15s Metriken von allen konfigurierten Zielen. Der Transport erfolgt meist über HTTP: GET /metrics Hier passiert noch keine Aggregation. Dafür ist der Konsument zuständig.
  • 13. Metric Types QAware | 13 Metriken haben verschiedene Typen, um Daten abzubilden: ■ Counter Eine Zahl, die entweder inkrementiert oder zurückgesetzt werden kann. ■ Gauge Eine Metrik, die sich beliebig nach oben oder unten verändern kann. ■ Histogram Werte in “Buckets” - z.B. die Dauer von Requests ■ Summary Ähnlich zum Histogram, fasst Werte zusammen
  • 14. PromQL QAware | 14 PromQL ist eine mächtige Query Language, um die gewünschten Metriken zu filtern / aggregieren. Die ganze Zeitreihe: http_requests_total Filter nach Labels: http_requests_total{job="apiserver", handler="/api/comments"} Rate berechnen: rate(http_requests_total[5m])[30m:1m]
  • 15. Prometheus: Architektur QAware | 15 Bild: https://prometheus.io/docs/introduction/overview/
  • 16. Konfiguration (Anwendung) Beispiel: Quarkus & Micrometer QAware | 16 # Gradle: implementation("io.quarkus:quarkus-micrometer-registry-prometheus") # Maven: <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer-registry-prometheus</artifactId> </dependency>
  • 17. Konfiguration (Anwendung) Beispiel: microprofile-metrics QAware | 17 @Gauge(unit = MetricUnits.NONE, name = "queueSize") public int getQueueSize() { return queue.size; } # Gradle implementation("io.quarkus:quarkus-smallrye-metrics") # Maven <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-metrics</artifactId> </dependency>
  • 18. Konfiguration (Prometheus) Die Metriken einsammeln QAware | 18 global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "Saturn node exporter" scheme: https static_configs: - targets: ["saturn.qaware.de"] basic_auth: username: "*******************" password: "*******************"
  • 20. Loki QAware | 20 Jedes System hat Logs. Aber immer in einem anderen Format. Loki ist der Log-Aggregator im Grafana-Ökosystem. Passiver Log-Speicher - Logs müssen anders beschafft werden. Promtail wird möglichst lokal installiert und schiebt die Logs zu Loki. Seit: 2018 Lizenz: AGPL 3.0
  • 21. Architektur QAware | 21 Bild: https://grafana.com/oss/loki/
  • 22. Promtail-Deployment: Helm QAware | 22 apiVersion: v2 name: promtail version: 1.0.0-SNAPSHOT description: Chart to deploy grafana promtail dependencies: # https://github.com/grafana/helm-charts/blob/main/charts/promtail/Chart.yaml - name: promtail version: 3.11.0 repository: https://grafana.github.io/helm-charts promtail: # https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml config: snippets: pipelineStages: # not cri, because we're running in minikube with docker runtime - docker: {} lokiAddress: http://loki.loki:3100/loki/api/v1/push
  • 23. Promtail-Deployment: Classic QAware | 23 clients: - url: "https://loki.qaware.de/loki/api/v1/push" basic_auth: username: loki password: **************** scrape_configs: - job_name: journal journal: json: true max_age: 12h labels: host: saturn job: systemd-journal relabel_configs: - source_labels: ['__journal__systemd_unit'] target_label: 'unit' Vorsicht: Labels nicht zu dynamisch verteilen! https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/
  • 24. LogQL QAware | 24 Auch Loki hat eine eigene Query Language. count_over_time({foo="bar"}[1m]) > 10 {host="$host", job="systemd-journal"} | json | line_format "{{ .unit }}: {{ .MESSAGE }}" |= "$search"
  • 26. Tempo QAware | 26 Traces im Grafana-Ökosystem! SDKs für verschiedene Plattformen Kompatibel zu verschiedenen Tracing Agents: ■ Jaeger ■ Zipkin ■ Opentracing ■ Opentelemetry Seit: 2020 Lizenz: AGPL 3.0
  • 27. Architektur QAware | 27 Bild: https://grafana.com/docs/tempo/latest/getting-started/
  • 28. Traces: Grundlagen QAware | 28 Traces visualisieren, welche Wege ein Request durch die Microservices genommen hat… … und wo vielleicht ein Fehler passiert ist!
  • 29. Traces: Grundlagen QAware | 29 Bild: https://grafana.com/blog/2021/09/23/intro-to-distributed-tracing-with-tempo-opentelemetry-and-grafana-cloud/
  • 30. Metriken und Traces verbinden? Exemplars! QAware | 30 Unterstützt z.B. in Micrometer 1.9 Bild: https://grafana.com/blog/2021/03/31/intro-to-exemplars-which-enable-grafana-tempos-distributed-tracing-at-massive-scale/
  • 32. Grafana QAware | 32 Visualisierung für viele verschiedene Datenquellen: ■ Prometheus ■ Loki ■ Tempo ■ InfluxDB ■ ... Seit: 2014 Lizenz: AGPL 3.0
  • 33. Dashboards QAware | 33 Daten aller Art werden in Dashboards visualisiert.
  • 34. Grafana - Dashboards QAware | 34 Keine Angst: Man muss Dashboards nicht mühsam selbst zusammenklicken. https://grafana.com/grafana/dashboards/
  • 36. Mehr aus dem Grafana-Universum
  • 37. k6 QAware | 37 Lasttests? k6! Gebaut mit Go - die Tests werden in JavaScript geschrieben. Testergebnisse landen in einer InfluxDB - visualisiert wird mit Grafana.
  • 38. Further reading QAware | 38 Blog: https://blog.qaware.de/posts/cloud-observability-grafana-spring-boot/ Showcase: https://github.com/zalintyre/cloud-observability-grafana-spring-boot Grafana: https://grafana.com/ Prometheus: https://prometheus.io/ Loki: https://grafana.com/oss/loki/ Tempo: https://grafana.com/oss/tempo/ k6: https://github.com/grafana/k6
  • 39. Quellen QAware | 39 [Kal] R.E. Kalman, On the general theory of control systems, IFAC Proceedings Volumes, Volume 1, Issue 1, 1960, Pages 491-502, ISSN 1474-6670, https://doi.org/10.1016/S1474-6670(17)70094-8. (https://www.sciencedirect.com/science/article/pii/S1474667017700948)
  • 40. qaware.de QAware GmbH Aschauer Straße 32 81549 München Tel. +49 89 232315-0 info@qaware.de twitter.com/qaware linkedin.com/company/qaware-gmbh xing.com/companies/qawaregmbh slideshare.net/qaware github.com/qaware