Ankündigung

Einklappen
Keine Ankündigung bisher.

Backup von InfluxDB und Grafana

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Backup von InfluxDB und Grafana

    Hab das mal auf Wunsch von folgendem Thread hierher verschoben
    https://knx-user-forum.de/forum/proj...practice/page3


    So, ich bin wieder einen kleinen Schritt weiter. Hab jetzt mal zwischenzeitlich den LBS von jonofe installiert. Vielen Dank dafür 😁.
    Hatte nur ein kleines Problem bei der Installation, aber nach ausführen von folgendem Tipp hat es dann auch wie gewollt funktioniert:
    https://knx-user-forum.de/forum/proj...63#post1805463

    Davor hab ich mir mal Gedanken gemacht wie ich das ganze mit dem Backup gestalte. Ich wollte eigentlich erst mal klein anfangen und probieren das ganze auf nem USB-Stick zu machen und später dann evtl. in eine cloud schieben. Während meiner Findungsphase 😅 bin ich dann auf folgendes tolles gestoßen: https://rclone.org/
    Hiermit ist es möglich per shell Dateien zu verschiedenen cloud Anbietern zu sichern. Ebenso lässt sich das cloud-drive im Dateisystem mounten ( was ich aber in dem Fall glaube ich nicht benötige )
    Ich hab mich dann kurzerhand für googledrive entschieden, da ich damit schon ein bisschen Erfahrung habe und es recht angenehm zu bedienen ist, außerdem gibt es 15GB kostenlos und selbst falls das nicht mehr reichen sollte sind die Preise doch recht human.

    Die Installation war total easy, bloß die Einrichtung war ein bisschen fummelig da man bei google-api eine client-id erstellen muss und später bei rclone während der Einrichtung verwenden muss. Das problematischste war das mein Server headless ist, aber während der Installation automatisch der Browser geöffnet werden sollte wo man da bei google die Erlaubnis für den Zugriff erteilen muss. Es gibt dafür einen Workaround indem man den generierten key mit einem anderen PC mit rclone ausführt.
    Da es rclone auch für Windows gibt hab ich das dann kurzerhand hier erledigt. Bis ich aber die ganzen Infos zusammen hatte hab ich schon paar Stunden gesucht 😅.

    Falls jemand Interesse hat, dann kann ich gern mal eine kleine Anleitung zusammen schreiben wie das ganze funktioniert.


    Jetzt bin ich grad dran mir ein, oder mehrere ( bin noch am testen ) Backup script/e zusammen zu schreiben /suchen.
    Was schon funktioniert: Ich hab 3 Verzeichnisse in /tmp angelegt. backup_influx, backup_grafana, backup_mariadb ( hab noch zufällig meine Kodi Datenbank auf dem Server ).
    Nun hab ich folgenden script gefunden und ein bisschen umgebaut:
    Code:
    #!/bin/bash
    
    listOfDirs=(/backup_influx /backup_grafana /backup_mariadb)
    
    rcloneConfig=/root/.config/rclone/rclone.conf
    rcloneOptions="-v --ignore-checksum --ignore-size --local-no-check-updated"
    
    echo  $(date +"%Y-%m-%d %H:%M:%S") : backup started
    
    for dir in "${listOfDirs[@]}"
    do
       :
       echo  $(date +"%Y-%m-%d %H:%M:%S") :  backup of $dir
       rclone $rcloneOptions --config=$rcloneConfig sync $dir googledrive:/backup/$dir
    done
    
    echo  $(date +"%Y-%m-%d %H:%M:%S") :  backup complete​
    Ob der script funktioniert weiß ich noch nicht, aber wenn ich folgenden Befehl in der shell ausführe ( also ohne Variablen ):
    Code:
    rclone $rcloneOptions --config=$rcloneConfig sync $dir googledrive:/backup/$dir
    Dann schiebt er mir das komplette Verzeichnis auf google-drive. Soweit so gut.
    Ziel soll es sein ein tägliches Backup von influxdb, grafana und mariadb zu erstellen und nach erfolgreicher Erstellung hochzuladen in die cloud.
    Am schönsten wäre, wenn man immer so 5-10 Backups behalten könnte und dann immer das letzte löschen.
    Und was ich auch zufällig gefunden habe, für Grafana gibt es sogar ein Dashboard für rclone, womit ich mich bisher aber noch nicht weiter beschäftigt habe.
    https://grafana.com/grafana/dashboar...hboard-rclone/


    Nun bin ich grad noch dabei rauszufinden wie ich die einzelnen backups erstelle. Ich hab mal mit influx angefangen, aber iwie will das ganze nicht so richtig wie in der influxdb Anleitung beschrieben funktionieren. Hat sich schon mal jemand hierzu Gedanken gemacht, bzw. schon ein backup davon umgesetzt?


    Ich probier es momentan mit diesem Befehl in der shell:
    Code:
    influx backup /tmp/backup_influxdb_$(date '+%Y-%m-%d_%H-%M') -t "api admin token"
    Daraufhin kommt folgender Fehler:
    Code:
    2022/11/25 19:08:16 INFO: Downloading metadata snapshot
    Error: failed to backup metadata: failed to download metadata snapshot: 401 Unauthorized: read:authorizations is unauthorized
    ​
    Wenn ich das ganze noch mit dem -u flag mit user angebe:
    Code:
    influx backup /tmp/backup_influxdb_$(date '+%Y-%m-%d_%H-%M') -u admin -t "api admin token"
    Dann kommt ein anderer Fehler:
    Code:
    Error: backup path must be specified as a single positional argument

    Jemand eine Idee woran das liegen kann?​
    Gruß Ben

    #2
    jonofe
    Den Token den ich verwende ist derselbe wie bei deinem LBS in edomi.
    Hab mal ein Screenshot aus der influxdb Weboberfläche gemacht, sollte eigentlich alle Berechtigungen haben:
    Oder gibts hier noch nen anderen Token?

    adminToken.jpg
    Gruß Ben

    Kommentar


      #3
      Ich denke du brauchst ein All-Access-Token.
      Das kann m.W. mehr als ein User-Token mit allen Berechtigungen.

      Kommentar


        #4
        mhh, komm ich irgendwie an den ran?
        Bzw. kann man da einen neuen generieren?
        Gruß Ben

        Kommentar


          #5
          Ja einfach token über das Web UI erstellen und all access token auswählen.

          Kommentar


            #6
            Hab jetzt zur Sicherheit nochmal einen neuen erstellt, der davor sollte aber auch schon ein all access token gewesen sein.
            Leider kommt mit diesem die gleiche Fehlermeldung.
            Gruß Ben

            Kommentar


              #7
              Nochmal zur ursprünglichen Frage, der eigentlichen Sicherung.

              Mein Script dafür sieht so aus:

              Code:
              #!/bin/sh -x
              
              ​export MOUNT=/qnap
              
              if grep -qs $MOUNT /proc/mounts; then
                echo "Ist bereits gemounted."
              else
                echo "Ist nicht gemounted."
                mount $MOUNT;
                if [ $? -eq 0 ]; then
                 echo "Mount success!"
                else
                 echo "Something went wrong with the mount..."
                fi
              fi
              
              #Edomi-Backups kopieren
              /bin/cp -u /var/edomi-backups/*.edomibackup /qnap/Datensicherung/edomi/
              /bin/find /qnap/Datensicherung/edomi/ -iname "*.edomibackup" -mtime +20 -delete
              
              # Backup InfluxDB
              influx backup -o InfluxData -b edomi /qnap/Datensicherung/InfluxDB -t <Admin-Token>
              /bin/find /qnap/Datensicherung/InfluxDB/ -mtime +7 -delete
              
              # Backup Grafana
              cp /var/lib/grafana/grafana.db /qnap/Datensicherung/Grafana/grafana_$(date +%Y%m%d).db
              /bin/cp /etc/grafana/grafana.ini /qnap/Datensicherung/Grafana/grafana_$(date +%Y%m%d).ini
              /bin/find /qnap/Datensicherung/Grafana/ -mtime +7 -delete
              
              # umount /qnap
              echo `date +%F`" "`date +%H:%M:%S`" - Backup fertig :)"​
              Zuerst wird überprüft ob das Netzwerkshare (Qnap) gemountet ist, wenn nicht wird gemountet.
              Danach werden die Edomi-Backups auf die Qnap kopiert und dort alles was älter als 20 Tage ist gelöscht.
              Im nächsten Schritt wird ein Backup der Influx-DB erstellt und auf der Qnap abgelegt. Hier erfolgt dann eine Bereinigung für alles was älter als 7 Tage ist.
              Für das Backup von Grafana genügt es die Datenbank und das ini-File weg zu kopieren.

              Recovern funtioniert bei mir so:
              Installation von influxdb und grafana auf dem neuen System.
              Code:
              influx setup --token <Admin-Token vom Quell-System>​
              Neue Datenbank wird angelegt, hier die selben Informationen angeben wie bei der Quelldatenbank (User, Organisation, Bucket, etc.)
              Code:
              influx restore --full /qnap/Datensicherung/InfluxDB/
              (Pfad zur Dicherung der Datenbank)
              Damit steht die Datenbank mit exakt dem Stand der letzten Sicherung.

              Code:
              cp /qnap/Datensicherung/Grafana/grafana_<letzte>.db /var/lib/grafana/grafana.db
              cp /qnap/Datensicherung/Grafana/grafana_<letzte>.ini /etc/grafana/grafana.ini
              systemctl restart grafana-server​
              Jetzt steht auch Grafana mit dem Stand der letzten Sicherung wieder zur Verfügung.

              Das Backup-Script läuft per Cron jede Nacht nach der Edomi-Sicherung.

              Zusätzlich sichere ich dann noch per Veeam den gesamten Edomi-Rechner (im 3-Stunden Rhytmus).
              Damit bin ich in der Lage nach einem Totalausfall des Edomi-Rechners innerhalb von 10 Minuten auf ein vollständig eingerichtetes System zugreifen zu können (identische Hardware vorausgesetzt).

              Kommentar


                #8
                Also ich hab jetzt influxdb nochmal erneut installiert und festgestellt das tatsächlich nur der initial erstellte access token zum Backup erstellen funktioniert.
                Also ganz WICHTIG: DIESEN NICHT LÖSCHEN. Ich wusste den Token nicht, deshalb hab ich ihn gelöscht und einfach einen neuen generiert, aber das hat nicht funktioniert. Fall jemand auch nicht weiß wie er an den initialen token kommt. Einfach einen 2ten all access token erstellen und mit diesem bekannten in der shell folgendes aufrufen:
                Code:
                influx auth list -t <neu erstellert token>
                Damit wird dann euer initialer admin token aufgelistet. Ein bisschen gaga, aber ok wenn mans weiß 😅.

                NorbertB
                Vielen Dank fürs teilen deines Backup Skriptes. Hat mir sehr geholfen bei meiner Umsetzung.
                Besonders bei grafana, war es wesentlich einfacher als das was ich gefunden haben 👍.

                Ich hab das ganze jetzt folgendermaßen gestaltet.
                Für jeden Dienst gibt es einen eigenen skript zum Backup erstellen. Im Prinzip immer nach dem gleichen Schema:
                - ggf. temporären Ordner anlegen
                - Backup erstellen
                - Backup zippen
                - temporären Ordner samt Inhalt löschen
                - Alle gezippten Archive löschen, abgesehen von den letzten 5 (ist einstellbar)
                Hier die Skripte die ich verwende:

                Grafana:
                Code:
                #!/bin/bash
                TIMESTAMP=$(date +"%Y.%m.%d-%H.%M.%S")
                BACKUP_DIR="/tmp/backup_grafana"
                FILES_KEEP=5
                
                # Temporaeren Ordner anlegen, falls nicht vorhanden
                if [ ! -d $BACKUP_DIR/data ] ; then
                    mkdir -p $BACKUP_DIR/data
                fi
                
                # Grafana Backup erstellen
                cp /var/lib/grafana/grafana.db $BACKUP_DIR/data/grafana.db
                cp /etc/grafana/grafana.ini $BACKUP_DIR/data/grafana.ini
                
                # erstelle Archiv mit Zeitstempel
                tar cvfz $BACKUP_DIR/grafana-$TIMESTAMP.tgz $BACKUP_DIR/data
                
                # lösche den temporaeren Backup Ordner
                rm -r $BACKUP_DIR/data
                
                # loesche alle backups, abgesehen von den letzten 5
                ls -tp "$BACKUP_DIR"**/* | grep -v '/$' | tail -n +$((FILES_KEEP+1)) | xargs -d '\n' -r rm --​

                Influxdb:
                Code:
                #!/bin/bash
                TIMESTAMP=$(date +"%Y.%m.%d-%H.%M.%S")
                BACKUP_DIR="/tmp/backup_influxdb"
                TOKEN="INITIALER ADMIN TOKEN"
                FILES_KEEP=5
                
                # Temporaeren Ordner anlegen, falls nicht vorhanden
                if [ ! -d $BACKUP_DIR/data ] ; then
                    mkdir -p $BACKUP_DIR/data
                fi
                # Backup der Influx Datenbank
                influx backup $BACKUP_DIR/data -t $TOKEN
                
                # erstelle Archiv mit Zeitstempel
                tar cvfz $BACKUP_DIR/influxdb-$TIMESTAMP.tgz $BACKUP_DIR/data
                
                # lösche den temporaeren Backup Ordner
                rm -r $BACKUP_DIR/data
                
                # loesche alle backups, abgesehen von den letzten 5
                ls -tp "$BACKUP_DIR"**/* | grep -v '/$' | tail -n +$((FILES_KEEP+1)) | xargs -d '\n' -r rm --​

                Und bei mir noch mariadb: (hier muss für den backupuser noch eine my.cnf erstellt werden mit dem zugehörigen Passwort. Und in mariadb hat der backupuser auch nur lesende Rechte)
                Code:
                #!/bin/bash
                TIMESTAMP=$(date +"%Y.%m.%d-%H.%M.%S")
                BACKUP_DIR="/tmp/backup_mariadb"
                USER="backupuser"
                FILES_KEEP=5
                
                # Backup der MariaDB Datenbank und gleichzeitig komprimieren
                /usr/bin/mysqldump -u $USER --all-databases | gzip > $BACKUP_DIR/mariadb_backup_$(date '+%Y-%m-%d_%H-%M').sql.gz
                
                # loesche alle backups, abgesehen von den letzten 5
                ls -tp "$BACKUP_DIR"**/* | grep -v '/$' | tail -n +$((FILES_KEEP+1)) | xargs -d '\n' -r rm --​

                Und dann gibt es noch einen skript der mittels rclone die Backup-Verzeichnisse mit in meinem Fall googledrive synchronisiert.
                Das ganze funktioniert hier beim Test recht gut. Genial ist auch wie ich finde, das somit auf googledrive immer nur die letzten 5 Backups gehalten werden, da die lokalen Ordner syncronisiert werden. Kann man ggf. auch erhöhen, muss aber erstmal ein Gefühl bekommen wie viel Speicher die Backups mit der Zeit benötigen.

                rclone Skript:
                Code:
                #!/bin/bash
                
                listOfDirs=(backup_influxdb backup_grafana backup_mariadb)
                
                rcloneConfig=/root/.config/rclone/rclone.conf
                rcloneOptions="-v --ignore-checksum --ignore-size --local-no-check-updated"
                
                echo  $(date +"%Y-%m-%d %H:%M:%S") : backup started
                
                for dir in "${listOfDirs[@]}"
                do
                   :
                   echo  $(date +"%Y-%m-%d %H:%M:%S") :  backup of $dir
                   rclone $rcloneOptions --config=$rcloneConfig sync /tmp/$dir googledrive:/backup/$dir
                done
                
                echo  $(date +"%Y-%m-%d %H:%M:%S") :  backup complete​
                Nächster Schritt ist jetzt das ganze mittels cron job noch zu automatisieren. Hier muss ich mich aber erstmal noch einlesen, sollte aber auch nicht allzu komplex sein 😅. Ich möchte im Prinzip erst die 3 Backup skripte ausführen, hier ist die Frage ob man die simultan macht oder hintereinander (kann man das überhaupt wählen???). Einmal täglich sollte genügen. Und im Nachgang dann den Skript für den Upload. Hier frag ich mich ob man iwie überwachen muss ob vor dem upload auch die Backups sauber durchgelaufen sind. Muss ich mal beobachten.

                Man könnte theoretisch die Backups auch erst auf nen USB-Stick sichern und von hier dann in die cloud. So hätte man beim Ausfall von Server/Festplatte + Stick oder Cloud noch einen weiteren Fallschirm. Ich werds vermutlich jetzt erstmal nur mit lokalem Backup + Cloud betreiben. Sollte eigentlich sicher genug sein... Hoff ich😂
                Gruß Ben

                Kommentar


                  #9
                  Cronjobs hab ich jetzt auch angelegt.
                  Mach einmal täglich von jedem Dienst ein Backup, ich fang mit dem ersten um 21 Uhr an und führe jedes weitere Backup mit 1h Abstand aus. Sollte auch zukünfig mehr als übrig reichen bei steigender Datenmenge. Und die Uhrzeit ist im Prinzip unerheblich, Hauptsache 1mal täglich.
                  Cronjobs werden mittels "crontab -e" angelegt (falls jemand genauso wenig Ahnung hat wie ich 😅)
                  Hab dann am Schluss einfach folgende Zeilen eingefügt (Achtung. letzte Zeile muss eine Leerzeile oder Kommentar sein):
                  Code:
                  0 21 * * * /usr/local/sbin/backup_grafana.sh >>/var/log/cron/backup_grafana_$(date +\%Y\%m\%d).log
                  0 22 * * * /usr/local/sbin/backup_mariadb.sh >>/var/log/cron/backup_mariadb_$(date +\%Y\%m\%d).log
                  0 23 * * * /usr/local/sbin/backup_influxdb.sh >>/var/log/cron/backup_influxdb_$(date +\%Y\%m\%d).log
                  0 0 * * * /usr/local/sbin/upload_googledrive.sh >>/var/log/cron/backup_upload_googledrive_$(date +\%Y\%m\%d).log​
                  Gruß Ben

                  Kommentar

                  Lädt...
                  X