
Ich habe eine große Anzahl von Maschinen, deren Verfügbarkeit ich stündlich per Cron prüfen muss. Ich habe fast 1.000 Maschinen, die in 4–5 Namensserien aufgeteilt sind, gefolgt von einer Nummer für jeden Knoten. Sagen wir von ab1000 bis ab1200, von bs3000 bis bs3892, von zx7800 bis zx8900 usw. Momentan verwende ich ein einfaches Ping-Skript, da ich auf diesen Knoten keine Software zur Überwachung laufen lassen kann (ich habe dafür keine Genehmigung). Also rufe ich in meinem Code die Datei auf, in der ich alle Maschinennamen einzeln aktualisiere (glauben Sie mir, ich muss das jeden Tag machen, da die Maschinennamen sehr häufig vorkommen) und frage mich, ob ich reguläre Ausdrücke verwenden kann, um die Maschinen zu erwähnen, da mir das das Leben sehr erleichtern würde. Sagen wir zum Beispiel: ab1*,zx[7-8]* usw. Ich habe versucht, dasselbe in der Eingabedatei zu verwenden, aber das hat nicht viel geholfen. Ein weiteres Problem dabei ist, dass manchmal ein oder zwei Maschinen dauerhaft ausfallen und ich sie nicht jedes Mal zählen muss. Deshalb muss ich es in meiner Warnliste als ausgeschlossen belassen.
Lassen Sie mich auch wissen, ob ich den Alarm noch robuster gestalten kann, z. B. durch einen Alarm, der eine Liste ausgibt, wenn 3/300 sx mit den Maschinennamen sz7701,7702,7703 ausgefallen sind.
cat /tmp/node.txt
zx7800
zx7801
zx7802
.....
....
zx8900
bs3000
bs3001
cat nodecheck.sh
for node in `cat /tmp/node.txt`
do
count=0
count=$(ping -c 3 $node | grep "100%packet loss"|wc -l)
if [ $count -ne 0 ]
then
echo "$node" >> /tmp/nodedown.txt
fi
done
Antwort1
Sie benötigen eine Liste der Namen, die Sie überwachen möchten. Entweder pflegen Sie diese Liste manuell oder Sie extrahieren die Liste aus einer Datenbank, in der jemand anderes die Liste der Maschinen pflegt, die laufen sollen.
Sie können einige Dinge vereinfachen. Der ping
Befehl gibt bereits einen Beendigungsstatus zurück, den Sie verwenden können. Außerdem benötigen Sie keine Umleitung für jedes Echo, einmal pro Schleife reicht aus. Dies hat den zusätzlichen Vorteil, dass die Datei initialisiert wird und nicht die Zeilen des letzten Laufs enthält.
for node in $(cat /tmp/node.txt); do
if ! ping -c 3 $node &> /dev/null; then
echo "$node"
fi
done > /tmp/nodedown.txt
Wenn Sie eine Statistik wünschen, können Sie diese entweder zählen, oder Sie verwenden wc
zum Zählen der Zeilen in den beiden Dateien.
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"
Antwort2
Alternativen:
- fpingist wie Ping, aber ausdrücklich für das Pingen mehrerer Hosts konzipiert.
- was ist losist ein Dienstprogramm zum Überwachen des Betriebs- und Ausfallzustands von Maschinen.