$30 off During Our Annual Pro Sale. View Details »

Praxiseinstieg in Prometheus

Praxiseinstieg in Prometheus

Prometheus ist ein Monitoring-System, welches zur Realzeit Metriken von Systemen und Software erfasst und in einer Time-Series Database abspeichert. Dazu werden Key-Value Paare, bestehend aus einem Metrik-Namen sowie dem dazugehörigen Wert zu dem Zeitstempel abgespeichert.

Basierend auf diesen Daten lassen sich so Systeme über einen Zeitraum überwachen und Alarme generieren. Dazu existiert die Query-Language PromQL, die eigens für Prometheus entwickelt wurde.

Dieser Vortrag gibt einen Praxiseinstieg in Prometheus. Zunächst erfolgt eine grundsätzliche Erklärung wie Prometheus funktioniert und wie man erste Systeme zum Erfassen der Metriken hinzufügen kann. Danach folgt auch direkt ein Einstieg in das Schreiben von eigenen Queries in PromQL und die Einbindung von Graphen in Grafana. Anschließend wird auch noch erläutert, wie man Skripte schreibt, um eigene Metriken zu exportieren, die von Prometheus erfasst werden.

Sujeevan Vijayakumaran

August 11, 2019
Tweet

More Decks by Sujeevan Vijayakumaran

Other Decks in Programming

Transcript

  1. Praxiseinstieg in Prometheus
    Sujeevan Vijayakumaran
    @svijee svij.org
    11. August 2019

    View Slide

  2. $ whoami
    Sujeevan Vijayakumaran
    Castrop-Rauxel, Ruhrpott
    @svijee
    svij.org
    [email protected]
    Consultant
    „Versionskontrolle mit Git“ (2019)
    – – –
    / 2

    View Slide

  3. Prometheus
    Worum geht es hier eigentlich?
    • Prometheus, Science-Fiction-Film (2012)
    • Prometheus, Gestalt der griechischen Mythologie
    • Prometheus, Monitoring
    @svijee Praxiseinstieg in Prometheus 2

    View Slide

  4. Worum geht es in diesen Talk
    Praxiseinstieg für Einsteiger
    • Grundlagen
    • Instrumentation
    • Architektur
    • PromQL
    Disclaimer: Ich bin kein Experte!
    @svijee Praxiseinstieg in Prometheus 3

    View Slide

  5. Grundlagen
    @svijee Praxiseinstieg in Prometheus 3

    View Slide

  6. Merkmale
    • initial bei SoundCloud entwickelt (2012)
    • stabile Version im Juli 2016
    • geschrieben in Go
    • Graduated Cloud Native Computing Foundation (CNCF) Project
    • Time-Series Database
    • Monitoring und Alerting mittels Metriken
    @svijee Praxiseinstieg in Prometheus 4

    View Slide

  7. Grundlagen
    Prometheus ist recht einfach gehalten:
    • keine Hochverfügbarkeit
    • keine Cluster-Fähigkeit per se
    • keine Langzeitspeicherung
    • Storage auf lokalen Filesystem
    @svijee Praxiseinstieg in Prometheus 5

    View Slide

  8. Installation
    Diverse Installationsmöglichkeiten sind vorhanden:
    • Binary mit Config und systemd Unit-File ausrollen
    • prometheus-server aus den Paketquellen installieren (Ubuntu, Debian, ...)
    • Docker Container
    @svijee Praxiseinstieg in Prometheus 6

    View Slide

  9. Prometheus Web Interface
    @svijee Praxiseinstieg in Prometheus 7

    View Slide

  10. Infrastruktur
    @svijee Praxiseinstieg in Prometheus 8

    View Slide

  11. Instrumentation
    @svijee Praxiseinstieg in Prometheus 8

    View Slide

  12. Instrumentation
    • Erfassung und Bereistellung von Metriken
    • durch Exporter
    • inkludiert in Software
    @svijee Praxiseinstieg in Prometheus 9

    View Slide

  13. Wir fangen klein an...
    Der Prometheus Server ist bereits installiert.
    Es fehlt:
    • Prometheus Node Exporter
    @svijee Praxiseinstieg in Prometheus 10

    View Slide

  14. Prometheus Node Exporter
    Was macht der Prometheus Node Exporter?
    • ein Dienst
    • ermittelt Daten des Nodes (Host)
    • REST-Schnittstelle
    @svijee Praxiseinstieg in Prometheus 11

    View Slide

  15. Infrastruktur
    @svijee Praxiseinstieg in Prometheus 12

    View Slide

  16. Prometheus Node Exporter
    Was für Daten stehen da so drin?
    • CPU-Auslastung
    • RAM-Nutzung
    • Disk-IO, Disk-Füllstand, ...
    • Netzwerk
    @svijee Praxiseinstieg in Prometheus 13

    View Slide

  17. Infrastruktur
    @svijee Praxiseinstieg in Prometheus 14

    View Slide

  18. Wie sammelt der Prometheus-Server die Daten?
    Pull statt Push!
    Prometheus Server scrapet Targets
    @svijee Praxiseinstieg in Prometheus 15

    View Slide

  19. /etc/prometheus.yml
    @svijee Praxiseinstieg in Prometheus 16

    View Slide

  20. Prometheus scrapt Targets
    $ curl localhost:9100/metrics
    @svijee Praxiseinstieg in Prometheus 17

    View Slide

  21. Metriken
    node_disk_written_bytes_total{device="dm-0"} 2.1890244608e+10
    node_disk_written_bytes_total{device="nvme0n1"} 2.1928897536e+10
    • Metrik-Name: node_disk_written_bytes_total
    • Label: device='dm-0'
    • Value: 2.1890244608e+10
    Mehrere Dimensionen durch mehrere Labels ist Standard.
    @svijee Praxiseinstieg in Prometheus 18

    View Slide

  22. Instrumentation-Label vs. Target-Label
    Zwei Arten von Label:
    • Instrumentation-Label: An der Metrik
    • Target-Label: Konfigurierbar über Prometheus-Server Konfiguration
    @svijee Praxiseinstieg in Prometheus 19

    View Slide

  23. Target-Labels
    Wofür Target-Labels einsetzen?
    Informationen ergänzen zu:
    • Stage
    • Cluster
    • etc.
    Einfacheres Filtern von Daten mittels (zusätzlichen) Target-Labels möglich!
    @svijee Praxiseinstieg in Prometheus 20

    View Slide

  24. Weitere Exporter
    Offizielle:
    • MySQL
    • HAProxy
    • Consul
    • Memcached
    • etc.
    Inoffizielle:
    • PostgreSQL
    • Nginx
    • Apache
    • uvm.
    @svijee Praxiseinstieg in Prometheus 21

    View Slide

  25. Infrastruktur
    @svijee Praxiseinstieg in Prometheus 22

    View Slide

  26. Eigenen Exporter schreiben
    • in allen möglichen Programmiersprachen
    • offizielle Client-Libraries für:
    • Go
    • Java
    • Python
    • Ruby
    • inoffizielle Client-Libraries für:
    • Bash
    • C++
    • Perl
    • PHP
    • ...
    @svijee Praxiseinstieg in Prometheus 23

    View Slide

  27. Eigenen Exporter schreiben
    Benötigt:
    • REST-Service
    • Metriken mit Daten
    @svijee Praxiseinstieg in Prometheus 24

    View Slide

  28. Textfile Collector mit Node Exporter
    • Node Exporter muss laufen
    • Script schreibt Text-File auf das Dateisystem
    • Node Exporter liefert Daten des Textfiles aus
    @svijee Praxiseinstieg in Prometheus 25

    View Slide

  29. Architektur
    @svijee Praxiseinstieg in Prometheus 25

    View Slide

  30. Gesamtarchitektur
    @svijee Praxiseinstieg in Prometheus 26

    View Slide

  31. Service-Discovery
    • ständiges Hinzufügen von Target-Endpoints ist aufwändig
    • Automatisierung durch Service-Discovery
    • Consul, File, kubernetes, etc.
    @svijee Praxiseinstieg in Prometheus 27

    View Slide

  32. Service-Discovery mit Consul
    • Consul Agent läuft auf jedem Host
    • Consul Agents sprechen untereinander (Port: 8301, 8302)
    • Consul Agents sprechen mit Consul Server (Port: 8300)
    • Konfiguration von Services für Consul
    @svijee Praxiseinstieg in Prometheus 28

    View Slide

  33. Service-Discovery mit Consul
    • prometheus.yml: Einbindung von Consul
    • Endpoints werden automatisch gescrapet
    • Vorteil: keine manuelle List von zahlreichen Hosts notwendig
    • Nachteil: Netzwerkfreigaben zwischen den Netzen müssen existieren, Ausrollen
    des Consul Agents
    @svijee Praxiseinstieg in Prometheus 29

    View Slide

  34. PromQL
    @svijee Praxiseinstieg in Prometheus 29

    View Slide

  35. Prometheus Query Language (PromQL)
    • Abfragesprache
    • Zeichnen von Graphen
    • keine Ähnlichkeiten zu SQL
    @svijee Praxiseinstieg in Prometheus 30

    View Slide

  36. Prometheus Query Language (PromQL)
    Vier Typen:
    • Instant Vector - Time Series mit einem einzelnen Wert für jede Time Series mit
    gleichen Zeitstempel
    • Range Vector - Time Series mit einem Wert zu mehreren Zeiten
    • Scalar - numerische Gleitkommazahl
    • String - ungenutzt
    @svijee Praxiseinstieg in Prometheus 31

    View Slide

  37. Instant Vector
    node_cpu_seconds_total{cpu="0",instance="localhost:9100",
    job="prometheus",mode=ïdle"}
    -> 224519.85
    @svijee Praxiseinstieg in Prometheus 32

    View Slide

  38. Range Vector
    node_cpu_seconds_total{cpu="0",instance="localhost:9100",
    job="prometheus",mode=ïdle"}[1m]
    -> 224660.36 @1565264793.404
    224673.44 @1565264808.404
    224686.15 @1565264823.404
    224698.37 @1565264838.404
    @svijee Praxiseinstieg in Prometheus 33

    View Slide

  39. Funktionen
    Akzeptieren Instant Vector oder Range Vector als Argument
    Beispiel:
    • avg()
    • avg_over_time()
    @svijee Praxiseinstieg in Prometheus 34

    View Slide

  40. Funktionen
    • rate()
    • irate()
    @svijee Praxiseinstieg in Prometheus 35

    View Slide

  41. Funktionen – Beispiele
    Zählen von CPU Cores:
    count(count(node_cpu_seconds_total{instance= ”$node”,job= ”$job”}) by (cpu))
    @svijee Praxiseinstieg in Prometheus 36

    View Slide

  42. Grafana
    @svijee Praxiseinstieg in Prometheus 36

    View Slide

  43. Prometheus-basierte Projekte
    Prometheus hat einige Schwächen.
    • Cortex: horizontally scalable, highly available, multi-tenant, long term storage for
    Prometheus.
    • Thanos: Highly available Prometheus setup with long term storage capabilities.
    @svijee Praxiseinstieg in Prometheus 37

    View Slide

  44. Fragen?
    Vielen Dank für die Aufmerksamkeit!
    Folien in Kürze auf https://svij.org/talks
    @svijee Praxiseinstieg in Prometheus 37

    View Slide