# Prometheus (Software)

Prometheus ist eine freie Software zum Service-Monitoring und Echtzeit-Alerting von IT-Infrastrukturen. Prometheus fragt Echtzeitmetriken per HTTP von Anwendungen ab und zeichnet diese in einer Zeitreihendatenbank auf. Das Projekt ist in Go geschrieben, unter der Apache 2-Lizenz lizenziert und ist ein graduated project der Cloud Native Computing Foundation. Prometheus und Grafana gelten als de-facto Standard-Monitoringsystem für Kubernetes. Sowohl OpenShift als auch Rancher haben Prometheus als internes Monitoring integriert.

## Geschichte

Prometheus wurde ab 2012 von Matt Proud und Julius Volz bei SoundCloud entwickelt, da die vorhandenen Metriken und Überwachungslösungen (StatsD und Graphite) nicht für die Anforderungen ausreichten. Prometheus wurde entwickelt um ein mehrdimensionales Datenmodell, eine skalierbare Datenerfassung und eine leistungsstarke Abfragesprache in einem einzigen Tool zu vereinen. Das Projekt war von Anfang an Open Source und wurde auch von Boxever- und Docker-Benutzern genutzt. Prometheus wurde von dem bei Google genutzten Überwachungstool Borgmon inspiriert. Ab 2013 wurde Prometheus für die Produktionsüberwachung bei SoundCloud eingesetzt. Die offizielle Veröffentlichung erfolgte im Januar 2015.
Im Mai 2016 akzeptierte die Cloud Native Computing Foundation Prometheus als zweites Inkubator-Projekt nach Kubernetes. Prometheus wurde bereits in vielen Unternehmen verwendet, darunter Digital Ocean, Ericsson, Core OS, Weaveworks, Red Hat und Google.
Prometheus 1.0 wurde im Juli 2016 veröffentlicht. Im August 2018 gab die Cloud Native Computing Foundation bekannt, dass das Prometheus-Projekt mit "Graduated" als zweites Projekt den höchsten Status innerhalb der CNCF erreicht hat.

## Architektur

Prometheus besteht aus mehreren Tools:
* Mehrere Exporter, die normalerweise auf dem überwachten Host ausgeführt werden, um lokale Metriken zu exportieren.
* Prometheus zur Zentralisierung und Speicherung der Metriken.
* Alertmanager, der bei einer Schwellwertüberschreitung Benachrichtigungen verschicken kann.
* Grafana zum Erstellen von Dashboards.
* PromQL ist die Abfragesprache, die zum Erstellen von Dashboards und Warnungen verwendet wird.

### Datenerfassung

Prometheus gilt als White-Box-Monitoring. Die überwachten Anwendungen müssen deren interne Metriken als Exporter selbst bereitstellen, diese werden regelmäßig von Prometheus abgefragt. Prometheus fragt diese per HTTP, meist unter dem Standard URL Pfad /metrics ab. Bestimmten Standardexportern sind standardisierte Ports zugewiesen.
Es stehen unterschiedliche Metrik-Exporter Programmbibliotheken für verschiedene Softwareumgebungen zur Verfügung. Es können anwendungsspezifische Metriken als auch Standardwerte exportiert werden. Für Linux und Windows können Betriebssystem-Metriken wie die Auslastung des Arbeitsspeicher oder des Rechnernetz exportiert werden. Prometheus unterstützt einige Überwachungs- und Verwaltungsprotokolle, um die Interoperabilität für den Übergang zu ermöglichen: Graphite, StatsD, SNMP, JMX und CollectD.
Der Prometheus-Server fragt diese Exporter regelmäßig ab. Jede der Datenquellen liefert die aktuellen Werte der Metriken für diese Datenquelle an dem von Prometheus abgefragten Endpunkt. Der Prometheus-Server aggregiert dann Daten über die Datenquellen hinweg. Prometheus verfügt über eine automatische Service-Discovery, um Ressourcen, die als Datenquellen verwendet werden sollen, automatisch zu ermitteln.
Diese gesammelten Daten werden in einer Datenbank zur Zeitreihenanalyse gespeichert.

### Datenspeicherung

Prometheus-Daten werden in Form von Metriken gespeichert, wobei jede Metrik einen Namen hat, der zum Referenzieren und Abfragen verwendet wird. Jede Metrik kann durch eine beliebige Anzahl von Zuordnungstabellen (labels) aufgeschlüsselt werden. Labels können Informationen zur Datenquelle (von welchem Server die Daten stammen) und andere anwendungsspezifische Aufschlüsselungsinformationen wie den HTTP-Statuscode (für Metriken im Zusammenhang mit HTTP-Antworten), die Abfragemethode (GET versus POST), den Endpunkt usw. enthalten.
Das Datenmodell von Prometheus ist mehrdimensional, da eine beliebige Liste von Labels abgefragt werden kann.
Prometheus speichert seine Daten grundsätzlich lokal auf der Festplatte, um eine schnelle Datenspeicherung und Abfrage zu ermöglichen. Dort werden die Metriken normalerweise einen Monat lang gespeichert. Für die Langzeitspeicherung können Metriken in Netzwerkspeichern gespeichert werden., wie z. B. InfluxDB. Das von der Cloud Native Computing Foundation selbst als incubation project unterstützte Thanos ermöglicht eine hochverfügbare und skalierbare Langzeitspeicherung. Thanos selbst kann seine Daten in Object Storages wie Google Cloud Storage, Microsoft Azure, OpenStack Swift oder S3 kompatiblen Speichern (z. B. min.io) ablegen.

### PromQL

Prometheus bietet eine eigene Abfragesprache PromQL (Prometheus Query Language), mit der Daten ausgewählt und aggregiert werden können. PromQL wurde speziell an die Konvention mit einer Zeitreihendatenbank angepasst und bietet zeitbezogene Abfragefunktionen. Prometheus verfügt über vier definierte Metriktypen:

#### Counter

    ist ein monotones Zählwerk dessen Wert nur inkrementell hinzu addiert wird.

#### Gauge

    ist eine Anzahl die beliebig durch die Applikation verändert werden kann.

#### Histogramm

    sammelt die Häufigkeitsverteilung, um dann als Histogramm graphisch aufbereitet werden zu können.

#### Summary

    ähnlich wie der Typ Histogramm werden Häufigkeitsverteilung erfasst und auch die Anzahl und Summe aller beobachteten Werte erfasst. Es lässt sich so eine konfigurierbares empirische Quantile über ein gleitendes Zeitfenster abfragen.

### Alerting

Werden konfigurierbare Schwellwerte überschritten kann Prometheus Benachrichtigungen auslösen. Diese Benachrichtigungen werden an den Alertmanager-Dienst weitergeleitet. Der Alertmanager kann eine Logik enthalten, mit der Alerts stummgeschaltet und an E-Mail-, Slack- oder Benachrichtigungsdienste wie PagerDuty weitergeleitet werden können.

### Dashboards

Prometheus ist grundsätzlich nicht als Dashboarding-Lösung gedacht. Durch eine Integration von Grafana können bestimmte Abfragen grafisch dargestellt werden und zu Dashboards zusammengestellt werden. Dies wurde aufgrund der zusätzlichen Komplexität des Setups als Nachteil angeführt.

### Standardisierung als OpenMetrics

Es gibt Bestrebungen, das Prometheus-Expositionsformat in den Standard OpenMetrics zu überführen. Einige Produkte haben das Format von Prometheus bereits übernommen: InfluxDatas TICK-Suite, InfluxDB, Google Cloud Platform, und DataDog.

## Verwendung

Prometheus wurde bei SoundCloud entwickelt und hier auch erstmals verwendet. Die Cloud Native Computing Foundation veröffentlichte Fallstudien anderer Unternehmen, die Prometheus verwenden. Dazu gehören der digitale Hosting-Service Digital Ocean, digitales Festival DreamHack, und E-Mail- und Kontaktmigrationsdienst ShuttleCloud.
Einige Softwarelösungen wie Grafana selbst, Ansible Tower, die verteilte Speicherlösung Ceph, der Messagebroker RabbitMQ und GitLab bieten Prometheus Metriken als aktivierbare Funktion an, die dann durch eine Prometheus-Instanz weiter verarbeitet werden können.