Kostenlose CRC-Fehlerüberwachung

Bild

In einem Speichernetzwerk treten häufig unangenehme Dinge auf, wie z. B. eine Erhöhung der Anzahl von Fehlern an Ports und eine Erhöhung der Signaldämpfung an sfp-Modulen. In Anbetracht der hohen Zuverlässigkeit der SAN-Infrastruktur, die aus zwei oder mehr Fabriken besteht, ist die Wahrscheinlichkeit eines Notfalls nicht so hoch, aber das Auferlegen negativer Faktoren kann zu Datenverlust oder Leistungseinbußen führen. Stellen Sie sich zum Beispiel eine Situation vor: In einer der Fabriken wird FOS aktualisiert, alles läuft über die zweite Fabrik, und zwischen dem Switch, an den das Festplatten-Array angeschlossen ist, und dem Switch, an den die Server angeschlossen sind, nehmen die CRC-Fehler an einem der Trunk-Ports schnell zu. Oder noch schlimmer, die Verbindung verschwindet aufgrund einer Abnahme des Signalpegels, die durch einen Temperaturanstieg des SFP-Moduls verursacht wird. was wiederum aufgrund der verstärkten Auslastung dieses Kanals zugenommen hat. In solchen Fällen sagen sie normalerweise: "Nun, wer wusste" oder "100% zuverlässige Systeme gibt es nicht" und so weiter.

Kompetente Architektur + ordnungsgemäße Überwachung = Fehlertoleranz


Damit das Problem erkannt wird, ist es notwendig, eine Reihe von Maßnahmen zur Erhöhung der Fehlertoleranz des Datenspeichernetzwerks zu entwickeln, die sich in zwei Stufen unterteilen lassen:

  • Bringen Sie die Speicherarchitektur in die Best Practices von SAN ein
  • Überwachung der Systembereitstellung

Wenn es eine Menge Literatur und Schulungen zu SAN-Best Practices gibt und Sie coole Spezialisten von einem Integrator zu einer Prüfung einladen können, ist es nicht so einfach, den richtigen Weg zu wählen, um ein gutes SAN-Netzwerküberwachungssystem zu erstellen. Dies lässt sich durch eine enge Bindung erklären: Ein Softwareentwickler ist ein Switch-Hersteller. Natürlich möchte ich nicht sagen, dass der Cisco Fabric Manager oder der Brocade Network Advisor schlecht sind, aber Sie können nicht alles tun, was meiner Meinung nach zur Erhöhung der Ausfallsicherheit des SAN-Netzwerks erforderlich ist.

Was zu tun ist


Und so ist die Aufgabe gestellt, es muss eine Lösung gefunden werden, oft kann dies durch den Geldmangel im Budget für dieses Jahr oder die Unkenntnis des Integrators über die Existenz geeigneter Software erschwert werden, aber dies ist seitdem kein Problem Alle notwendigen Komponenten sind frei verfügbar und Sie müssen nur dafür sorgen, dass alles funktioniert.
Betrachten wir die Implementierung der Überwachung von CRC-Fehlern an den SAN-Ports von Brocade-Switches, da die meisten anderen Parameter auf dieselbe Weise überwacht werden können.

Erster Schritt, Datenerfassungsprotokoll

Informationen über die Anzahl der CRC-Fehler können auf verschiedene Arten von den Switches abgerufen werden (snmp, https, telnet und ssh), wobei ich mich seitdem für Letzteres entschieden habe Telnet ist nicht sicher und es ist besser, es zu deaktivieren, https ist schwierig, bestimmte Werte zu extrahieren, und der SNMP-Baum kann sich sowohl auf verschiedenen Switches als auch beim Wechsel zu einem neuen FOS erheblich ändern.

Schritt zwei, Datenerfassungsmethode

Für die Arbeit mit ssh eignet sich Linux am besten in Verbindung mit bash + expect. Mit dieser Methode können Sie über ssh eine Verbindung mit der Dialogeingabe von Befehlen herstellen.

Schritt drei, Speicherort

Es gibt keinen großen Unterschied, Sie können es in Textdateien speichern, aber wir werden ein Beispiel mit mysql betrachten. Die gesamte Überwachung wird in zwei Skripten implementiert:

porterrshow.sh - Informationen sammeln und nach Inkrementen der CRC-Fehlerwerte
suchen expect.tcl - Verbindung über ssh

und drei txt-Dateien:
temp.txt - Datenpuffer switch.txt
- Liste der san-Schalter im Format name login password on Jede Zeile
crc.txt - meldet gefundene CRC-Fehler

Die Select-Anforderung sucht nach der Zunahme von CRC-Fehlern im Vergleich zu den vor einer Stunde empfangenen Daten. Das Skript muss einmal pro Stunde ausgeführt werden, und die Ausführung des Skripts sollte zur selben Stunde beginnen und beendet werden. Diese Einschränkung kann leicht umgangen werden, indem Sie das Feld der Seriennummer des Skriptstarts eingeben oder die Leistung verringern und eine kompliziertere Bedingung für die Auswahl von Zeitwerten festlegen. Die Pakete erwarten, dass mysql und ssh client auf dem Server installiert sein müssen. Die Benutzerdatenbank muss in der Datenbank dbname mit Lese- und Schreibberechtigungen für die Tabelle tablename vorhanden sein. In der Tabelle tablename erhalten wir Daten, die der Ausgabe des Befehls porterrshow am Schalter + Datum und Uhrzeit ähneln.

porterrshow.sh

#!/bin/bash
rm /var/scripts/temp.txt        #Удаляем ранее созданный temp.txt
while read line                 #Читаем строку из файла switches.txt
do read sw user pass <<< $line  #Разбиваем строку на переменные
n=0                                                               #Обнуляем счетчик
while read line;                                                  #Читаем строку из вывода expect.tcl
do array[n]="$line"; n=$[n+1];                                    #Заполняем массив строками из вывода expect.tcl
done < <(/var/scripts/expect.tcl $sw $user $pass porterrshow)     #Отправляем данные в цикл
if echo ${array[4]} | grep -q '=';             #Проверяем с какой строки начинается вывод полезной информации
then k=5;
else k=4;
fi;
for i in `seq $k $[n-1]`;                                                                                                                            #В последней строке данных нет
do read a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 <<<  ${array[i]};      #Разбиваем строку на значения
(echo $sw,${a1%:},`date +%F`,`date +%T`,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10,$a11,$a12,$a13,$a14,$a15,$a16,$a17) >> temp.txt		#Формируем подгрузочный файл
done;
done < /var/scripts/switches.txt          #Читаем файл со списком свичей
mysql -uuser -ppass dbname << EOF;
LOAD DATA LOCAL INFILE "temp.txt" INTO TABLE tablename FIELDS TERMINATED BY ',';
EOF
#Загружаем данные в БД
(mysql -uuser -ppass dbname << EOF
select new.switch, new.port, new.crcerr-old.crcerr from tablename new, tablename old where new.switch=old.switch and new.port=old.port and new.date=old.date and new.crcerr!=old.crcerr and new.crcerr!=0 and new.date=curdate() and hour(new.time)=hour(now()) and hour(old.time)=hour(now())-1;
EOF
) > /var/scripts/crc.txt           #Проверяем инкремент CRC по портам и пишем отчет в файл
if grep -q 'switch' /var/scripts/crc.txt
then
cat /var/scripts/crc.txt | mailx -r SAN_Switch_CRC_Tester -s "CRC errors is increased" sanadmin1@mywork.com
fi
#Отправляем информацию администратору

expect.tcl

#!/usr/bin/expect
#Устанавливаем таймаут соединения 10 сек 
set timeout 10
#Проверям число параметров передаваемых скрипту
if {$argc != 4} {
    puts "Usage $argv0 host user pass command"
    exit 1}
#Назначаем параметры переменным
set host    [lindex $argv 0]
set user    [lindex $argv 1]
set pass    [lindex $argv 2]
set command [lindex $argv 3]
#Производим подключение по SSH
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $user@$host $command
expect *assword:
send "$pass\r"
expect eof

Jetzt auch beliebt: