Die Überwachung von Diensten ist häufig fest in der Hand von Icinga oder Nagios. Aber neben dieser Überwachung ist es oft praktisch auch historische Daten zur Auslastung von Ressourcen zu haben, z.B. um neue Anschaffungen anschaulich rechtfertigen zu können. Aber auch bei der Fehlersuche sind solche Daten mitunter hilfreich. Warum ist der Datenbankserver immer Freitags zwischen 10:00 und 11:00 Uhr so langsam? Wieviel Speicherplatz wird im Schnitt pro Woche zusätzlich belegt und wann sind die Laufwerke voll? Wieviel Traffic verursachen wir eigentlich im Monat? Wieviele Datenbankabfragen verarbeiten wir eigentlich täglich?

Wenn es um die grafische Auswertung solcher Daten geht, ist Grafana deutlich leistungsfähiger als reine Überwachungsssysteme. Die Graphen werden on demand im Browser erzeugt, was gegenüber anderer Lösungen wie z.B. munin einige Rechenzeit auf dem Monitoring-Server einspart. Die auszuwertenden Daten können über verschiedene Quellen bereitgestellt werden. In dieser Anleitung übernimmt diese Aufgabe Prometheus. Andere Tools hierfür wären z.B. collectd als Datensammler und influxdb als Datenbank. Grafana kann auch mehrere Datenquellen miteinander kombinieren.

Grafana

Die Installation ist sehr einfach, da entsprechende Pakete für Debian bereitstehen.

echo “deb https://packagecloud.io/grafana/stable/debian/ jessie main” >> /etc/apt/sources.list.d/grafana.list
curl https://packagecloud.io/gpg.key | sudo apt-key add –
apt-get install -y apt-transport-https
apt-get update
apt-get install grafana

systemctl daemon-reload
systemctl start grafana-server
systemctl status grafana-server
systemctl enable grafana-server.service

Anschließend ist Grafana auf dem Port 3000 per Browser erreichbar. Die Logindaten lauten admin:admin. Die weitere Konfiguration z.B. das Anbinden von Datenquellen kann über das Webinterface von Grafana erfolgen. Über verschiedene Dashboards können dann die gewünschten Graphen erzeugt werden, die Dashboards dienen einer thematischen Unterteilung. Der Zugriff auf die Dashboards kann für einzelne Benutzer erlaubt oder verboten werden.

Prometheus

Die Installation von Prometheus ist ebenfalls unkompliziert. Es stehen fertige Docker-Buildfiles zur Verfügung, alternativ Dateien für Verwaltungstools wie Ansible, SaltStack und Chef: https://prometheus.io/docs/introduction/install/

Natürlich kann man die Installation auch manuell durchführen:

cd /opt/
wget https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5.2.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*

Die Konfiguration erfolgt über die Datei prometheus.yml:

global:
  scrape_interval: 15s # By default, scrape targets every 15 seconds.

# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
  monitor: ‘codelab-monitor’

# A scrape configuration containing exactly one endpoint to scrape:
# Here it’s Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
  – job_name: ‘prometheus’

# Override the global default and scrape targets from this job every 5 seconds.
  scrape_interval: 5s

static_configs:
  – targets: [‘localhost:9090’]

Der Start erfolgt mittels: ./prometheus -config.file=prometheus.yml

Welche Daten Prometheus über ein System sammeln kann hängt davon ab welche sog. exporter zur Verfügung stehen. In der Regel sind Exporter eigene Dienste, die über einen TCP-Port mittels HTTP abgefragt werden können. Eine, unvollständige, Liste von Exportern findet sich unter: https://prometheus.io/docs/instrumenting/exporters/

Die Exporter laufen auf den zu überwachenden Systemen, Prometheus selbst auf einem zentralen Monitor-System auf dem auch Grafana installiert sein kann. Sofern unterschiedliche Betriebssysteme überwacht werden sollen, die unterschiedliche Init-Systeme verwenden, empfiehlt sich der Einsatz von supervisord zum Start der Exporter:

apt-get install supervisor

Für jeden Exporter wird eine Startdatei in /etc/supervisor/conf.d/ abgelegt:

[program:node-exporter]
user=node-exporter
command=/usr/local/bin/node_exporter -collectors.enabled “diskstats,filefd,filesystem,loadavg,meminfo,netdev,stat,textfile,time,vmstat” -collector.textfile.directory=/var/lib/node_exporter/textfile_collector/ -collector.filesystem.ignored-fs-types “^(sys|proc|tmp)fs$” -collector.diskstats.ignored-devices “^(ram|loop|fp|nvme\\d+n\\d+p)\\d+$”
directory=/usr/local/bin/
stdout_logfile=/var/log/supervisor/node-exporter.log
stderr_logfile=/var/log/supervisor/node-exporter_err.log
autostart=true
autorestart=true

Der Dienst kann anschließend gestartet werden:

supervisorctl update
supervisorctl reload
supervisorctl start node-exporter
supervisorctl status node-exporter

Nun muss Prometheus noch über die prometheus.yml gesagt werden, dass der Exporter auf dem entsprechenden Client abgefragt werden soll:

– job_name: ‘node_exporter’

static_configs:
– targets: [ ‘10.0.1.2:9100’ ]
  labels:
    hostname: ‘client1’

– targets: [ ‘10.0.1.3:9100’ ]
  labels:
    hostname: ‘client2’

– targets: [ ‘10.0.1.4:9100’ ]
  labels:
    hostname: ‘client3’

Für jeden weiteren Exporter werden weitere Einträge mit dem entsprechenden Port des Exporters angelegt. Nach einem Neustart von Prometheus werden die Daten erfasst und gespeichert.

Konfiguration

In Grafana kann nun ein neuer Data Source-Eintrag angelegt werden:

Grafana Data Source

Da in unserem Beispiel Grafana auf dem gleichen System läuft wie Prometheus können wir auf eine Authentifizierung verzichten, sollten aber darauf achten, dass Prometheus nur auf dem lokalen Interface erreichbar ist.

Anschließend können neue Graphen über ein Dashboard angelegt oder fertige Dashboards importiert werden. Eine Sammlung findet sich unter: https://grafana.net/dashboards

Als Filter für die Suche sollte darauf geachtet werden als Data Source den Eintrag Prometheus auszuwählen.


Kommentare

Kommentare unterstützt von Disqus.

Nächster Beitrag Vorheriger Beitrag