Hallo zusammen,
Der FileServer startet (falls nicht bereits aktiv) den BackupServer um 23:00 Uhr.. demnach
würde ich gerne jeden Tag um 23:05 folgende Abfrage durchführen:
wenn "FileServer" = present
und "BackupServer" NOT present
warte 5 Minuten und wiederhole die obige Abfrage (falls BackupServer während der Abfrage noch beim Hochfahren war)
falls der "BackupServer" dann immer noch NOT present ist, setze warning.ITInfrastruktur.Backup.failed auf "true"
Ob das Backup letztendlich stattgefunden hat ist auch mit BackupServer = present immer noch nicht zu 100% beantwortet, nur wenn der BackupServer nicht present war ist davon auszugehen das was schief gelaufen ist.
Was sollte man als Basis für eine Solche Abfrage nehmen? Ein "at"?
Gruß!
Hallo,
watchdog oder DOIF - käme mir in den Sinn.
Gruß Otto
Hi Frickler, die Idee gefällt mir, lasse mich heute zwar per Mail benachrichtigen ob das Backup gelaufen ist, das aber in Fhem abzubilden Find ich einen interessanten Ansatz
Watchdog oder doif könnte schon das Richtige sein, mir fehlt nur grade die Zeit mich damit weiter auseinanderzusetzen.
Ich wollte auch schon immer mal den Stromverbrauch meiner beiden Server in fhem abbilden aber auch da fehlt mir Gerade die Zeit zu
Ich mache sowas unabhängig von FHEM direkt auf meinem Server.
Dementsprechend würde ich das aber auch als Monitoring in FHEM andersherum machen:
- kein Presence auf den Backup-Server, der eh fast nie läuft
- Backup-Server setzt nach dem erfolgreichen Start aktiv einen Status/Dummy in FHEM
- Backup-Server setzt nach dem erfolgreichen oder auch misslungenen Backup (exit-/Returncode) aktiv einen entsprechenden Status/Dummy in FHEM
Damit hättet Ihr die Rückmeldung, ob die Kiste läuft und ob das Backup erfolgreich war. ;D
Die Rückmeldung ob der Server läuft hole ich mir über das WOL Modul und schalte darüber einen dummy
Nur ob das Backup gelaufen ist weiß man ja dann immer noch nicht
Noch mal zusammenfassend, bei mir erfolgt kein Backup der FHEM Konfiguration... FHEM warnt mich lediglich wenn gewisse Dinge an meiner IT-Infrastruktur merkwürdig erscheinen.
Die folgende Situation stellt eine dieser Merkwürdigkeiten dar:
1. Ich habe einen File-Server den ich von FHEM aus über WOL starten kann
2. Ich habe einen Backup-Server den ich auch von FHEM aus starten kann; der Backup-Server dient dem File-Server zu Sicherungszwecken und wird nur dann aktiv wenn der File-Server eine Datensicherung durchführen will; der Backup-Server kann auch vom File-Server über WOL und cron job aus gestartet werden.
Der File-Server ist nicht durchgehend aktiv, falls nachts kein Client mehr aktiv ist fährt der Server nachts runter.
Ist der File-Server aber aktiv, dann startet dieser um 23:00 den Backup-Server zwecks Datensicherung. Fährt der File-Server dann irgendwann runter, wird das vom Backup-Server registriert und dieser kann dann auch runter fahren.
Anmerkung: Ein Hardcore Server Fetischist würde jetzt sagen dass ein Server einen 24/7 Betrieb haben sollte, nur benötige ich den Server nicht im 24/7 Betrieb... insbesondere nicht wenn ich in der Woche auf Dienstreise bin.
Davon ausgehend dass die Konfiguration des Backup-Servers recht schlank ist, gehe ich mal davon aus das dieser gegen 23:05 so weit ist um auf ein Ping zu reagieren. Deshalb auch die erste Abfrage um 23:05. Die Datensicherung findet im Zeitraum zwischen 23:00 und 0:00 statt.
D.h., ist der File-Server um 23:05 aktiv, sollte der Backup-Server auch aktiv sein, spätestens aber dann um 23:10. Deshalb auch im negativ Fall um 23:05 eine weiter Abfrage 5 Minuten später.
Fällt diese dann auch negativ aus (File-Server present UND Backup-Server absent), kann ich davon ausgehen dass irgendwo ein Problem vorliegt. Das kann am Server selbst liegen, möglicherweise aber auch am Switch oder der Datenleitung.
Natürlich ist eine positive Abfrage kein Garant für eine erfolgreiche Datensicherung, aber die Fehlermeldung immerhin eine Indikation für Probleme. Was dann am Ende schief gelaufen ist muss dann schlimmstenfalls in detektivischer Kleinarbeit ermittelt werden.
Nichtsdestotrotz sollte dann vom Alarm Modul eine Fehlermitteilung via Mail generiert werden.
Die Überwachung kam mir gestern in den Sinn als ich feststellen musste dass der File-Server mir einen Alarm mitteilte dass keine Datensicherung durchgeführt wurde. Leider gab es keine Möglichkeit im File-Server diesen Alarm als Mailtrigger zu nutzen, deshalb der Umweg über FHEM. So ganz nebenbei, die letzte Datensicherung hat am 29.04. stattgefunden.
Gruß!
Also so ähnlich werkeln meine zwei Server auch. Backup läuft nur zu sicherungszeiten, File Server bei Bedarf. Sicherung lasse ich über ein robocoby Skript laufen, welches mich auch per Mail benachrichtigt. Aber eine Anfrage über fhem würde mir auch gefallen auch wenn ich nicht wüsste wie das gehen soll, außer ob der Server zur Zeit X an war
elegant währe natürlich auch die Variante von Hollo, wenn der File-Server / Backup-Server selbst eine Notification in FHEM erzeugen könnte (setzen von Dummy-Flag). Das könnte man nutzen um andere Daten aus dem Server in FHEM sichtbar zu machen. Leider ist die Replikation (Datensicherung) eine der Funktionen die ich nicht über eine Cron Job anstosse, wodurch mir die Möglichkeit fehlt auf irgendwelche Ergebnisse der Datensicherung zu reagieren.
Nur am Ende vom Tag wird es sicherlich auch dabei auf ein DOIF hinauslaufen.
in etwa so...
define verifyBackup DOIF ([FileServer] eq "present" AND [BackupServer] ne "present") (fhem("set warning.ITInfrastruktur.Backup.failed on"))
jetzt fehlt nur noch der zeitliche Rahmen...
Legt doch einen Dummy Backup an.
Der Status wird dann per wget vom Backup-Server gesetzt.
Zum Beispiel auf AUS, AN, Aktiv, Erfolgreich oder Fehler.
Darauf kann man dann per notify oder watchdog reagieren.
Das ist besser und vielseitiger als nur presence.
Ähnlich mache ich das mit meiner dBox für Betrieb und standby.
ob ich den Status jetzt present oder AN/AUS nenne sollte erst mal keine Rolle spielen. Hier geht es
1. darum dass der Backup-Server nicht aktiv ist und damit auch kein event generieren kann
2. dass der Zeitraum eine wesentliche Rolle spielt.
Sollte der Backup-Server vor 23:00 bzw. nach 0:00 aktiv sein ist das vollkommen nebensächlich.
Wichtig ist der Zeitraum zwischen 23:00 und 0:00
Natürlich kann man durchaus Aktionen beim Start und beim Herunterfahren triggern und dann den Status dann vom Server selbst setzen lassen.
Ein Notify würde dabei rausfallen, da der Server natürlich auch zu Aktualisierungs-Zwecke durchaus auch vor dem relevanten Zeitraum aktiv sein kann. Mit Watchdog müsste ich mich erst noch mal beschäftigen.
Ansonsten währe mir eine Kombination aus "at" (um den Zeitfaktor einzubringen) und dem DOIF (um die Kombination der Stati einzubringen) ganz recht gewesen.
wenn man das notify mit einbringen wollte dann möglicherweise so:
notify auf Flag Backup-Server und notify auf Flag File-Server
mit dem event wird dann ein dummy Flag Namens (z.B.) Server, mit den Werten: NONE, FILE, BACKUP, BOTH gesetzt
und dann
Alternative a) ein "at", welches um 23:00 bis 0:00 das Flag Server überprüft
Alternative b) ein watchdog was dann "muss ich mich erst noch mit beschäftigen" überprüft
beim Status FILE ist dann nur der File-Server aktiv und ein Alarm wird ausgelöst.
das könnte so klappen, ich werde es dann mal nach der Reparatur des Backup-Servers mal testen... der Server selbst hat jetzt höhere Priorität!
Vielen Dank Euch allen!
Zitat von: Hollo am 08 Mai 2015, 22:15:27
Der Status wird dann per wget vom Backup-Server gesetzt.
wie funktioniert das mit dem Status setzen über wget? Das währe sicherlich interessant für andere Daten die man so loggen könnte.
Gruß!
Du machst z.B. in Dein Backup-Script auf dem Backup-Server einen Eintrag der Art
wget -O /dev/null "http://<fhemip>:8083/fhem?cmd.Backup=set%20Backup%20Aktiv"
wenn das Script startet und einen der Art wget -O /dev/null "http://<fhemip>:8083/fhem?cmd.Backup=set%20Backup%20Erfolgreich"
wenn es korrekt bis zum Ende durchgelaufen ist.
Zitat von: Hollo am 08 Mai 2015, 23:39:18
Du machst z.B. in Dein Backup-Script auf dem Backup-Server einen Eintrag der Art
wget -O /dev/null "http://<fhemip>:8083/fhem?cmd.Backup=set%20Backup%20Aktiv"
wenn das Script startet und einen der Art wget -O /dev/null "http://<fhemip>:8083/fhem?cmd.Backup=set%20Backup%20Erfolgreich"
wenn es korrekt bis zum Ende durchgelaufen ist.
wie bringe ich hier User-Name und Passwort mit rein?
Probier es doch mal mit user und password. 8)
wget -O /dev/null "http://<fhemip>:8083/fhem?cmd.Backup=set%20Backup%20Aktiv" --user=USER --password=GEHEIM --auth-no-challenge
genau das habe ich ja probiert....
gemäß Deinem Syntax (natürlich für USER und GEHEIM die richtigen login Daten versehen und xxx durch die richtige IP ersetzt):
wget -O /dev/null "http://xxx:8083/fhem?cmd.test=set%20test%20aktiv" —user=USER —password=GEHEIM —auth-no-challenge
habe ich versucht den Dummy test auf aktiv zu setzen, leider mit folgendem Ergebnis (so ganz nebenbei, es handelt sich beim File-Server um ein FreeBSD(FreeNAS)-System)
converted 'http://xxx:8083/fhem?cmd.Test=set%20Test%20Aktiv' (US-ASCII) -> 'http://xxx:8083/fhem?cmd.Test=set Test Aktiv' (UTF-8)
--2015-05-17 16:31:00-- http://xxx:8083/fhem?cmd.test=set%20test%20aktiv
Connecting to xxx:8083... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Username/Password Authentication Failed.
--2015-05-17 16:31:00-- http://xxx:8083/fhem?cmd.test=set%20test%20aktiv
Reusing existing connection to xxx:8083.
HTTP request sent, awaiting response... 401 Authorization Required
Username/Password Authentication Failed.
Incomplete or invalid multibyte sequence encountered
converted 'http://—user=USER' (US-ASCII) -> 'http://—user=USER' (UTF-8)
Incomplete or invalid multibyte sequence encountered
converted '—user=USER' (US-ASCII) -> '—user=USER' (UTF-8)
--2015-05-17 16:31:00-- http://%E2%80%94user=USER/
idn_decode failed (9): 'System iconv failed'
Resolving \342\200\224user=USER... failed: hostname nor servname provided, or not known.
wget: unable to resolve host address '\342\200\224user=USER'
Incomplete or invalid multibyte sequence encountered
converted 'http://—password=GEHEIM' (US-ASCII) -> 'http://—password=GEHEIM' (UTF-8)
Incomplete or invalid multibyte sequence encountered
converted '—password=GEHEIM' (US-ASCII) -> '—password=GEHEIM' (UTF-8)
--2015-05-17 16:31:00-- http://%E2%80%94password=GEHEIM/
idn_decode failed (9): 'System iconv failed'
Resolving \342\200\224password=GEHEIM... failed: hostname nor servname provided, or not known.
wget: unable to resolve host address '\342\200\224password=GEHEIM'
Incomplete or invalid multibyte sequence encountered
converted 'http://—auth-no-challenge' (US-ASCII) -> 'http://—auth-no-challenge' (UTF-8)
Incomplete or invalid multibyte sequence encountered
converted '—auth-no-challenge' (US-ASCII) -> '—auth-no-challenge' (UTF-8)
--2015-05-17 16:31:00-- http://%E2%80%94auth-no-challenge/
idn_decode failed (9): 'System iconv failed'
Resolving \342\200\224auth-no-challenge... failed: hostname nor servname provided, or not known.
wget: unable to resolve host address '\342\200\224auth-no-challenge'
/mnt/Daten/Systemdienste/test.sh: cannot create : No such file or directory
/mnt/Daten/Systemdienste/test.sh: cannot create : No such file or directory
Die Mitteilungen bezüglich des nicht erfolgten Backups bekomme ich mittlerweile vom FreeNAS per Mail, nur ergeben sich durch das direkte Schreiben von Daten gewisse Möglichkeiten die man durchaus in Zukunft noch nutzen kann.
Hmm,
ich sehe zumindest einen Unterschied zwischen meinem und Deinem Code...
vor den Optionen user, password und auth sind Doppelstriche -- , kein Einzelstrich - !
Entweder ist es genau das, woran er sich stört, oder Du arbeitest auf beiden Systemen mit unterschiedlichen Zeichensätzen;
und Deine gewählete User/Password-Kombination ergibt beim Konvertieren was anderes.
An so einem Sonderzeichen im Password habe ich auch mal lange gesucht.
Ich glaube aber eher an das erste.
gut aufgepasst! Ich habe diese Probleme immer wieder wenn ich im Editor auf dem Mac Arbeite. Meistens muss ich im Anschluss das ein oder andere noch korrigieren, insbesondere bei den Anführungsstrichen. Das Abändern von zwei einzelstrichen zu einem einzelnen ist jetzt mal was neues.
Ich werde es dann später mal auf dem Server direkt ändern.
Danke!
Nachtrag: Mein TextEdit auf dem Mac macht aus zwei aufeinanderfolgenden "-" ein einzelnes.
gut es funktioniert soweit klasse, kann man das jetzt auch für variable Werte umsetzen?
#!/bin/bash
LOGFILE=/mnt/Daten/Systemdienste/info.log
echo "loadCycleCheck.sh at" $(date) >> $LOGFILE
echo "ada0" >> $LOGFILE
smartctl -a /dev/ada0 | grep "Model Family" >> $LOGFILE
smartctl -a /dev/ada0 | grep "Serial Number" >> $LOGFILE
echo "ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE" >> $LOGFILE
smartctl -a /dev/ada0 | grep Start_Stop_Count >> $LOGFILE
smartctl -a /dev/ada0 | grep Power_On_Hours >> $LOGFILE
smartctl -a /dev/ada0 | grep Power_Cycle_Count >> $LOGFILE
smartctl -a /dev/ada0 | grep Load_Cycle_Count >> $LOGFILE
smartctl -a /dev/ada0 | grep Temperature_Celsius >> $LOGFILE
ergibt folgende Ausgabe:
loadCycleCheck.sh at Mon May 18 20:45:00 CEST 2015
ada0
Model Family: Western Digital Red
Serial Number: WD-WXA1E54THR16
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 52
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 387
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 52
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 50
194 Temperature_Celsius 0x0022 117 097 000 Old_age Always - 30
[/code]
die rot markierten Daten würden mich interessieren. Diesen würden dann nicht mehr in ein Logfile geschrieben, sondern von fhem ausgewertet.
in etwa so
wget -O /dev/null "http://<IP>:8083/fhem?cmd.FreeNASServer=set%20FreeNASServer.HDD0.Name%20<der Wert: ada0>" --user=<user> --password=<pass> --auth-no-challenge
wget -O /dev/null "http://<IP>:8083/fhem?cmd.FreeNASServer=set%20FreeNASServer.HDD0.Modell%20<der Wert von Model Family: Western Digital Red>" --user=<user> --password=<pass> --auth-no-challenge
wget -O /dev/null "http://<IP>:8083/fhem?cmd.FreeNASServer=set%20FreeNASServer.HDD0.Seriennummer%20<der Wert von Serial Number: WD-WXA1E54THR16>" --user=<user> --password=<pass> --auth-no-challenge
wget -O /dev/null "http://<IP>:8083/fhem?cmd.FreeNASServer=set%20FreeNASServer.HDD0.StartStopCount%20<der Wert von Start_Stop_Count: 52>" --user=<user> --password=<pass> --auth-no-challenge
u.s.w.
Kann man die Kombi smartctl und grep im Skript so umbauen, dass man die einzelnen werte extrahieren und an fhem übergeben kann?
gleiches dann noch für folgende Abfrage:
#!/bin/bash
LOGFILE=/mnt/Daten/Systemdienste/info.log
echo "temperatureCPU.sh at" $(date) >> $LOGFILE
sysctl -a | grep temperature >> $LOGFILE
echo "" >> $LOGFILE
ergibt
temperatureCPU.sh at Mon May 18 20:47:00 CEST 2015
dev.cpu.0.temperature: 38.0C
dev.cpu.1.temperature: 38.0C
dev.cpu.2.temperature: 38.0C
dev.cpu.3.temperature: 38.0C
dev.cpu.4.temperature: 40.0C
dev.cpu.5.temperature: 40.0C
dev.cpu.6.temperature: 34.0C
dev.cpu.7.temperature: 34.0C
auch hier währe es interessant die Werte zu extrahieren und nach fhem zu übertragen
Vielen Dank!
Wozu braucht man sowas... der smart-Wert der Platte ist entweder gut oder sie ist im Ar*** . ;)
Und 387 Stunden ist ja mal gar nix. ;D
Egal, Du müsstest diese Umsetzung dann in Deinem Script machen.
Ich würde mal in die Richtung probieren...
- die einzelnen "Variablen" in ein Array
- dann eine Schleife, die den Aufruf und die wget-Weitergabe der "Werte" erledigt
- in der Schleife werden dann die einzelnen "Variablen" durchgetickert
Alternativ die Werte der Reihe nach in eine Datei schieben, nach FHEM transferieren, und dort wieder der Reihe nach in Readings schieben
Zitat von: Hollo am 19 Mai 2015, 09:40:11
Wozu braucht man sowas... der smart-Wert der Platte ist entweder gut oder sie ist im Ar*** . ;)
um den Verfall zu beobachten
Zitat von: Hollo am 19 Mai 2015, 09:40:11
Und 387 Stunden ist ja mal gar nix. ;D
Die ist ja auch noch neu, die zweite Platte im RAID Verbund hat da schon ganz andere Werte
Zitat von: Hollo am 19 Mai 2015, 09:40:11
Egal, Du müsstest diese Umsetzung dann in Deinem Script machen.
Ich würde mal in die Richtung probieren...
- die einzelnen "Variablen" in ein Array
- dann eine Schleife, die den Aufruf und die wget-Weitergabe der "Werte" erledigt
- in der Schleife werden dann die einzelnen "Variablen" durchgetickert
Alternativ die Werte der Reihe nach in eine Datei schieben, nach FHEM transferieren, und dort wieder der Reihe nach in Readings schieben
Ich habe mir das wie folgt vorgestellt:
smartctl -a /dev/ada0 | grep "Model Family" >> $LOGFILE
dann das wget..
smartctl -a /dev/ada0 | grep "Serial Number" >> $LOGFILE
dann das wget
smartctl -a /dev/ada0 | grep Start_Stop_Count >> $LOGFILE
dann das wget
u.s.w.
jetzt fehlt halt nur noch das Extrahieren der Werte, bzw das Schreiben der Werte in Variablen, die man dann im wget nutzen kann.
welcher Befehl in Kombination mit smartctl und grep ist dafür geeignet?
bash arrays, cut, sed, awk, ... es gibt viele Möglichkeiten.
Falls du es nicht hinbekommst, kann ich dir morgen weiterhelfen. Ist vom Handy aus etwas mühsam.
Gruß,
Gero
Zitat von: DerFrickler am 19 Mai 2015, 21:53:13
smartctl -a /dev/ada0 | grep "Model Family" >> $LOGFILE
dann das wget..
smartctl -a /dev/ada0 | grep "Serial Number" >> $LOGFILE
dann das wget
smartctl -a /dev/ada0 | grep Start_Stop_Count >> $LOGFILE
dann das wget
So, jetzt nochmal etwas ausführlicher:
In den ersten beiden Werte (Model Family und Serial Numer) sind die Werte durch einen Doppelpunkt getrennt. Also kannst du den Wert z.B. wie folgt extrahieren:
MODEL=`smartctl -a /dev/ada0 | grep "Model Family" | cut -d':' -f2 | sed 's#^[[:space:]]*\(.*\)[[:space:]]*#\1#'`
SERIAL=`smartctl -a /dev/ada0 | grep "Serial Number" | cut -d':' -f2 | sed 's#^[[:space:]]*\(.*\)[[:space:]]*#\1#'`
Bei den restlichen Werten möchtest du das letzte Feld haben. Das läßt sich z.B. so realisieren:
VALUE=`smartctl -a /dev/ada0 | grep Start_Stop_Count | gawk '{print $NF}'`
Ich hoffe, du kommst damit weiter.
Gruß,
Gero
funktioniert super, danke! nur muss es awk und nicht gawk heissen.
Gruß!
Schön, dass es funktioniert.
Nur aus Interesse:
Welche Linux-Distribution ist auf dem Server? awk ist heutzutage normalerweise ein Synonym (Link) auf eine der modernen awk Implementationen (z.B. gawk, nawk, mawk).
Auf fast allen Linuxvarianten, die ich kenne, ist awk=gawk.
Gruß,
Gero
FreeBSD