Commit cc32c80e authored by k.elaammari's avatar k.elaammari
Browse files

readme

parent 308fd5e1
......@@ -2,51 +2,47 @@
## Einleitung
Mithilfe dieses Workflows können Sie mit Vagrant eine vollständige Monitoring-Infrastruktur aus den folgenden Komponenten, je auf einer virtuellen Maschine, idempotent erstellen.
Mithilfe dieses Workflows können Sie mit Vagrant eine vollständige Monitoring-Infrastruktur aus den folgenden Komponenten erstellen. Jede der Komponenten wird auf einer eigenen virtuellen Maschine durch ein idempotentes Skript installiert.
* Grafana (Visualisierung, Graphen, Dashboards)
* Prometheus (Node-Metriken abgreifen und an DB weiterleiten)
* InfluxDB (Time-Series DB, Langzeitspeicher, Backup/Restore)
* Chronograf (Graphisches Interface zu InfluxDB)
* Node-Set (Beispielhafte zu überwachende Maschinen)
* Node-Set (Überwachete Dummy-Maschinen)
Es ist auf jeder dieser virtuellen Maschinen (VMs) der Prometehus-node-exporter für das Bereitstellen der zu erfassenden Metriken installiert.
Backup-mechanismus implementiert !
Es ist auf jeder dieser virtuellen Maschinen (VMs) der Prometheus-node-exporter für das Bereitstellen der zu erfassenden Metriken installiert.
![overview](./docu/diagramme/overview.jpg)
![Infrastruktur](./docu/inkscape/infrastruktur.png)
## Voraussetzungen
Um diesen Workflow ausführen zu können müssen die folgenden Programme installiert sein:
Um den Workflow ausführen zu können müssen folgenden Programme installiert sein:
* Vagrant (<https://www.vagrantup.com/>)
* VirtualBox(<https://www.virtualbox.org/>) oder ein anderer unterstützter Hypervisor
* VirtualBox (<https://www.virtualbox.org/>) oder ein anderer unterstützter Hypervisor
* Git (<https://git-scm.com/>)
Im Weiteren wird vorausgesetzt, dass Sie sich auf einem Linux basierten Betriebssystem befinden. Der Workflow funktioniert auch auf Windows, hierbei ist aber zu beachten, dass unter Windows standardmäßig Zeilenumbrüche mit CR & LF kodiert werden. Im Gegensatz zum einfachen LF Zeilenumbruch unter Linux. Da die Dateien mit dem File-Provisionierer übertragen werden, muss darauf geachtet werden, dass die Dateien mit einem einfachen LF gespeichert werden. In der Git-Konfiguration sollte demensprechend folgende Funktion abgeschaltet werden.
Im Weiteren wird vorausgesetzt, dass Sie sich auf einem Linux basierten Betriebssystem befinden. Der Workflow funktioniert auch auf Windows-Platformen, hierbei ist aber zu beachten, dass unter Windows standardmäßig Zeilenumbrüche mit CR & LF kodiert werden. Im Gegensatz zum einfachen LF Zeilenumbruch unter Linux. Da die Dateien mit dem File-Provisionierer übertragen werden, muss darauf geachtet werden, dass die Dateien mit einem einfachen LF gespeichert werden. In der Git-Konfiguration sollte demensprechend folgende Funktion abgeschaltet werden. Diese ist normalerweise unter Windows eingeschaltet und fügt beim auschecken ein CR zum LF hinzu.
```shell
git config --global core.autocrlf false
```
Diese ist normalerweise unter Windows eingeschaltet und ersetzt beim auschecken ein LF mit einem CRLF.
## Getting started
Um direkt zu starten, kopieren Sie mit folgendem Befehl das Projekt auf ihren Rechner und anschließend wechseln Sie in das erstellte Verzeichnis.
Um direkt zu starten, kopieren Sie mit folgendem Befehl das Projekt auf ihren Rechner und wechseln anschließend in das erstellte Verzeichnis.
```shell
#TODO zur Gitlab-Gruppe verschieben
git clone git@git.gsi.de:k.elaammari/monitorsetup.git
git clone git@git.gsi.de:dc/common/vagrant-prometheus.git
```
Bevor die VMs gestartet werden, müssen die nötigen TLS-Zertifikate erzeugt werden. Hierfür führen Sie folgenden Befehl aus.
Bevor die VMs gestartet werden sollten, müssen die benötigten TLS-Zertifikate erzeugt werden. Hierfür führen Sie folgenden Befehl aus.
```shell
./scripts/openssl_generate.sh
```
Nachdem die Zertifikate erzeugt wurden, können die VMs gestartet werden.
Nachdem die Zertifikate erzeugt wurden, können die VMs gestartet werden.
```shell
vagrant up
......@@ -56,13 +52,11 @@ Anschließen starten nacheinander Influx, Prometheus, Grafana und Chronograf. Di
```shell
vagrant up {node-1 node-2 ... node-10 | /node-.*/}
```
In der hier mitgelieferten Konfiguration ist auf den Influx-, Prometheus-, Grafana- und Chronograf-VMs derselbe node-exporter installiert wie auf den Nodes, sodass der Start der Nodes optional ist.
```
## Überwachen der Maschinen
Nachdem die Maschinen gestartet und die Provisionierung korrekt ausgeführt wurde, können wir über die von Vagrant weitergeleiteten Ports direkt auf die Dienste zugreifen.
Nachdem die Maschinen gestartet sind und die Provisionierung erfolgreich ausgeführt wurde, können wir über die von Vagrant weitergeleiteten Ports direkt auf die Dienste zugreifen.
* <https://127.0.0.1:3000> (Grafana)
* <https://127.0.0.1:8888> (Chronograf)
......@@ -70,7 +64,7 @@ Nachdem die Maschinen gestartet und die Provisionierung korrekt ausgeführt wurd
Wenn auf ihrem Betriebssystem diese Ports schon in Verwendung sind, können Sie in der Vagrantfile eine andere Zuordnung konfigurieren.
Da die Dienste Grafana und Chronograf ein signiertes TLS-Zertifikat besitzen, können Sie ihrem Browser das unter ```./openssl/data/certificates/cacert.pem``` gespeicherte Root-Zertifikat als Zertifizierungsstelle eintragen, um Warnungen und mögliche Zweifel beim Aufruf der Seiten zu vermeiden. Und mit folgendem Befehl können Sie die Fingerprints der erzeugen Zertifikate anzeigen lassen, um Sie beim Hinzufügen zu verifizieren.
Da die Dienste Grafana und Chronograf ein signiertes TLS-Zertifikat besitzen, können Sie ihrem Browser das unter ```./openssl/data/certificates/cacert.pem``` gespeicherte Root-Zertifikat als Zertifizierungsstelle eintragen, um Warnungen und mögliche Zweifel beim Aufruf der Seiten zu vermeiden. Um beim hinzufügen das Zertifikat zu verifizieren, können Sie mit folgendem Befehl die Fingerprints der erzeugen Zertifikate anzeigen lassen.
```shell
./scripts/openssl_fingerprint.sh
......@@ -80,7 +74,7 @@ Da die Dienste Grafana und Chronograf ein signiertes TLS-Zertifikat besitzen, k
### Backup
Die InfluxDB ist durch einen Backup- und Restore-Mechanismus ausgestattet, mit dem wir die gesammelten Daten des Monitoringsystems extern speichern und zurück spielen können. In diesem Workflow wird Standardmäßig um 1 Uhr täglich ein Vollbackup ausgelöst, das separat zu den vorherigen Backups in einem Ordner mit Zeitstempel abgelegt wird. Konfigurieren können Sie den Timer mit der Datei: ```./provision/influx/config/backup.timer```. Wichtig zu beachten ist, dass das Backup in einen von VirtualBox geteilten Ordner zwischen VM ```/vagrant/backup``` und Projektverzeichnis ```./backup``` gespeichert wird! Wenn Ihr Hypervisor diese Funktion nicht unterstützt, müssen Sie die Backups von Hand aus der Influx-VM kopieren. Vagrant bietet hier alternativ Rsync oder SMB an.
Die InfluxDB ist durch einen Backup- und Restore-Mechanismus ausgestattet, mit dem wir die gesammelten Daten des Monitoringsystems extern speichern und zurück spielen können. In diesem Workflow wird Standardmäßig um 1 Uhr täglich ein Vollbackup ausgelöst, das separat zu den vorherigen Backups in einem Ordner mit Zeitstempel abgelegt wird. Konfigurieren können Sie den Timer in der Datei: ```./provision/influx/config/backup.timer```. Wichtig zu beachten ist, dass das Backup in einem von VirtualBox geteilten Ordner zwischen VM ```/vagrant/backup``` und Projektverzeichnis ```./backup``` gespeichert wird! Wenn Ihr Hypervisor diese Funktion nicht unterstützt, müssen Sie die Backups von Hand aus der Influx-VM kopieren. Vagrant bietet hier alternativ Rsync oder SMB an.
Um ein manuelles Backup zu starten, führen Sie folgendes Skript aus.
......@@ -88,7 +82,7 @@ Um ein manuelles Backup zu starten, führen Sie folgendes Skript aus.
./scripts/influx_backup.sh %PFAD%
```
Mit der %PFAD% Variable geben Sie den Ausgabepfad des Backups an. Dabei beschreibt der Pfad einen Speicherort innerhalb der VM.
Mit der %PFAD% Variable geben Sie den Ausgabepfad des Backups an. Dabei beschreibt der Pfad den Speicherort innerhalb der VM.
### Restore
......@@ -100,4 +94,171 @@ Um ein Backup in die InfluxDB wieder zurück zuspielen, benutzen Sie folgendes S
Die %PFAD% Variable ist hierbei der Ordner indem sich die Backupdateien befinden. Sollte in Ihrer Influx-Instanz schon die Datenbank "prom" existieren, werden Sie gefragt ob Sie diese löschen wollen, um die "prom"-Datenbank aus dem Backup laden zu können. Diese Operation ist notwendig, da hier bei jedem Backup die vollständige Datenbank gesichert wird und dementsprechend eine vollständige Datenbank zurück gespielt wird.
Weitere Informationen und die Dokumentation finden Sie im Ordner ```./docu```.
## Openssl
Um den Datenverkehr zu verschlüsseln und die Dienste authentifizieren zu können, benötigen wir TLS-Zertifikat die wir mit dem Openssl-Toolkit erzeugen (<https://www.openssl.org/>). Hierfür wird zuerst ein Root-Zertifikat (cacert.pem) erzeugt und anschließend die Zertifikate für die Dienste Grafana, Influx und Chronograf. Diese werden von dem Root-Zertifikat signiert, sodass mit dem Root-Zertifikat die Authentifizierung erfolgen kann. Wichtig ist zu beachten, dass zu jedem Zertifikat auch ein Private-Key existiert, so z.B. cacert.pem und cakey.pem oder influxcert.pem und influxkey.pem.
### Openssl Ordnerstruktur
```shell
./openssl
./config
./chronograf.cnf
./grafana.cnf
./influx.cnf
./openssl-ca.cnf
./data
./certificates
./csrdb
```
Im Config-Verzeichnis befinden sich die Konfigurationsdateien für die Zertifikate. In diesen können Sie die Standardwerte für organizationName, commonName, emailAddress, usw. ändern, die bei der Erzeugung in die Zertifikate eingetragen werden. Das Data-Verzeichnis wird erst nachdem ausführen von ```./scripts/openssl_generate.sh``` erstellt und enthält die Zertifikate im Ordner "certificates", sowie den Zustand der Openssl-Textdatenbank im Ordner "csrdb". Csrdb wird für das Signieren der Zertifikate gebraucht und enthält unteranderem die aktuelle Seriennummer.
### Zertifikat-Seriennummer
Zertifikate enthalten nach dem X.509 Standard eine Seriennummer, die bei der Signierung bestimmt wird. Die mit dem ```./scripts/openssl_generate.sh``` erstellten und signierten Zertifikate werden Standartmäßig mit der Seriennummer 0x2 aufwärts signiert. Manche Browser, wie z.B. der Firefox, melden aber einen Fehler, wenn vom Selben "Issuer: C, ST, L, O, OU, CN" eine vergebene Seriennummer nochmal an ein anderes Zertifikat vergeben wird. In diesem Fall können sie mit einem CLI-Argument die anfangs Seriennummer auf einen andere Wert setzen. Die Seriennummer wird als Hex-Zahl angegeben und die Anzahl der Ziffern muss grade sein. So würde z.B. 0F1 zu einem Fehler führen und sollte als F1 oder 00F1 eingegeben werden.
```shell
#./scripts/openssl_generate.sh 01
#./scripts/openssl_generate.sh FF
#./scripts/openssl_generate.sh 0100
#./scripts/openssl_generate.sh FFFF
#./scripts/openssl_generate.sh 010000
#./scripts/openssl_generate.sh 0FFF8729
#./scripts/openssl_generate.sh 01FA55DEC3
...
```
### Private-Key verloren
Wenn ein Private-Key auf irgendeine Art an Dritte verloren gegangen ist, müssen Sie reagieren. In diesem Fall ist zu unterscheiden, ob es sich um den cakey.pem, also der Root-Key oder den Key eines Dienstes wie grafanakey.pem handelt. Sollten Sie ihren Root-Key verlieren, ist ihre Kommunikation zwischen den Diensten auch für 3.te weiterhin sicher verschlüsselt, aber mit dem Root-Key könnten fremde Zertifikate signiert werden, welche dann von Ihrem installierten Root-Zertifikat als gültig anerkannt werden würden. Im zweiten Fall, wenn Sie den Privat-Key eines Dienstes verloren haben, könnten zwar keine Zertifikate signiert werden, aber mit dem aktuellen Privat-Key, kann sich ein 3.ter als der Dienst ausgeben, für den das Zertifikat ausgestellt wurde. Des Weiteren sind die mit dem Zertifikat aufgebauten verschlüsselten Verbindungen auch nur noch bedingt sicher vor dem Mitlesen Dritter.
* Root-Key verloren, in diesem Fall müssen alle Zertifikate neu erzeugt werden. Zusätzlich müssen sie jeden informieren, dem aktuellen Root-Zertifikat cacert.pem das Vertrauen zu entziehen. Führen Sie ```./scripts/openssl_generate.sh``` neu aus und verteilen die Zertifikate mit dem Vagrant File-Provisionierer neu auf die Maschinen. Beachten Sie die Zertifikat-Seriennummer.
```shell
./scripts/openssl_generate.sh
vagrant provision --all
```
* Dienst-Key verloren, bedeutet, dass Sie nur das jeweilige Zertifikat ersetzen müssen.
```shell
./scripts/openssl_node.sh (flux | graf | chron)
vagrant provision (flux | graf | chron)
```
### Eigene Zertifikate
Wenn Sie eigene Zertifikate erzeugen und diese in diesem Workflow benutzen möchten, müssen Sie diese an die entsprechenden Pfade kopieren oder verlinken. Standardmäßig werden die erzeugten Zertifikate aus ```./openssl/data/certificates``` mit dem jeweiligen Provision-Verzeichnis der VMs verlinkt. Sie können an dieselben Stellen ````./provision/*/https``` Ihre Zertifikate kopieren und mit dem Provisionierer diese übertragen lassen. Sollten ihre Zertifikate nicht wie unten benannt werden können, müssen Sie zusätzlich in den Konfigurationen die geänderten Dateinamen eintragen.
```shell
./provision
./chronograf
./config/chronograf.service # TLS_CERTIFICATE, TLS_PRIVATE_KEY
./https
./cacert.pem
./chronografcert.pem
./chronografkey.pem
./grafana
./config/graf_conf.ini # Sektion [server]: cert_file, cert_key
./https
./cacert.pem
./grafanacert.pem
./grafanakey.pem
./influx
./config/influxdb.conf # Sektion [http]: https-certificate, https-private-key
./https
./cacert.pem
./influxcert.pem
./influxkey.pem
```
## Authentifizierung
### Grafana
Für Grafana werden zwei Benutzer angelegt, ein Administrator und ein optionaler View-Benutzer mit der Berechtigung Dashboards anzuzeigen. Angelegt werden die Benutzer mit dem ```./provision/grafana/setup_grafana.sh```-Skript. Die Standardpasswörter für die beiden Benutzer können in folgenden JSON-Dateien bearbeiten werden. Nachdem die Benutzer erzeugt wurden, wird zusätzlich ein API-Token erstellt, mit dem anschließend alle Änderungen gemacht werden. Gespeichert wird dieser Token innerhalb der VM im ```/var/lib/grafana/token```-Verzeichnis. Anhand der Existenz dieses Tokens innerhalb der VM entscheidet das Skript, ob Grafana initial konfiguriert werden muss.
```shell
./provision/grafana/config/users
./admin_password.json
./view_user.json
```
#### Passwörter ändern
Das ändern von Benutzer Passwörter sollten nach Möglichkeit über das Grafna-UI erfolgen, entweder als Admin oder vom Benutzer selbst. Daneben besteht noch die Option die HTTP-API zu benutzen. Hierfür können Sie sich am ```setup_grafana.sh```-Skript von Grafana orientieren und den CURL Befehl entweder mit BasicAuth oder mit dem API-Token bauen.
#### Admin Passwort zurücksetzen
Sollten kein Zugriff auf den Admin-Benutzer bestehen, kann mit der Grafana-CLI das Passwort zurückgesetzten werden. Hierfür muss lokal auf der VM folgender Befehl ausgeführt werden.
```shell
vagrant ssh graf # verbinden mit der VM
sudo grafana-cli --homepath /usr/share/grafana admin reset-admin-password "newpass"
```
### Influx
In der Influx-Datenbank werden drei Benutzer angelegt, ein Administrator und anschließend zwei weitere Benutzer für Grafana und Prometheus. Dabei ist festgelegt, dass der Prometheus Benutzer nur Schreib-Rechte und Grafana nur Lese-Rechte bekommt. Ausgeführt werden die Queries mit dem ```./provision/influx/setup_influx.sh```-Skript indem mit CURL die Queries an die HTTP-API von Influx gesendet werden. Beim ersten Start von Influxdb wird keine Authentifizierung für das erzeugen eines Administrators verlang. Anschließend schaltet sich die Authentifizierung automatisch für die folgende Queries ein. Die Standardpasswörter für die Benutzer sind in folgenden Dateien.
```shell
./provision/influx/
./setup_influx.sh # Admin-Benutzer
./config/setup.queries # Prometheus- und Grafana-Benutzer
```
#### Passwörter ändern
Passwörter können Sie nur als Admin-Benutzer ändern. Die einfachste Möglichkeit wäre es im UI vom Chronografen in der Sektion 'InfluxDB Admin' diese zu ändern. Die andere Möglichkeit wäre mit dem Influx-CLI Tool sich auf der Influx-Datenbank anzumelden. Da das Tool die HTTP-API benutzt, kann auch von einer anderen VM die Anmeldung erfolgen, da das Tool aber im Moment nur auf der flux-VM liegt, wird hier eine Verbindung auf die flux-VM per SSH aufgebaut.
```shell
vagrant ssh flux
influx -ssl -unsafeSsl
>auth
username:
password:
>SET PASSWORD FOR "name" = 'newpass'
result message...
```
Wenn Sie das Passwort von Prometheus oder Grafana ändern, müssen Sie auch die Konfiguration bzw. die Grafana-Datasource aktualisieren.
##### Prometheus
Tragen Sie die neuen Benutzerdaten in folgende Datei ein, führen die Provisionierung neu aus und laden Sie die Konfiguration neu.
```shell
nano ./provision/prometheus/config/prom.yml
vagrant provision prom
vagrant ssh prom
sudo curl -X POST http://localhost:9090/-/reload
```
##### Grafana
Um die Influx-Datasource zu aktualisieren, wählen Sie im Grafana-UI > Configuration > Data Source > InfluxDB aus und tragen in der Sektion "InfluxDB Details" die neuen Benutzerdaten ein. Wenn Sie zusätzlich auch das Standartpassword in den Influx-Setupqueries geändert haben, sollten Sie diese Änderung auch in die JSON-Datei der Datasource eintragen, ohne die Provisionierung neu auszuführen.
```shell
./provision/grafana/config/datasources/ds_influx.json
```
#### Admin Passwort zurücksetzen
Sollte ein 2.ter Admin-Benutzer existieren, kann mit den oben beschriebenen Methoden das Passwort geändert werden. Ist kein weitere Admin-Benutzer verfügbar, muss die Authentifizierung abgeschaltet werden und dann ein neuer Admin erzeugt werden.
```shell
vagrant ssh flux
# Ändern sie in der Sektion [http], die Variable "auth-enabled" = false
sudo nano /etc/influxdb/influxdb.conf
# influx neustarten
systemctl restart influx
# influx verbinden
influx -ssl -unsafeSsl
>SET PASSWORD FOR "name" = 'newpass'
>exit
# Ändern sie in der Sektion [http], die Variable "auth-enabled" = true
sudo nano /etc/influxdb/influxdb.conf
# influx neustarten
systemctl restart influx
```
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment