
Hallo allerseits, mein Name ist Igor Sidorenko. Monitoring ist einer der Hauptbereiche meiner Arbeit sowie meines Hobbys. Ich werde über Zabbix sprechen und wie man es verwendet, um die Informationen zu überwachen, die wir über NetApp-Volumes benötigen, die nur über SSH Zugriff haben. Wer sich für das Thema Monitoring und Zabbix interessiert, bitte unter Kat.
Zunächst überwachten wir Volumes, indem wir sie auf einem bestimmten Server bereitstellten, auf dem eine spezielle Vorlage hing, NFS-Bereitstellungen auf dem Knoten abfingen und sie analog zu den Dateisystemen der grundlegenden Linux-Vorlage überwachten. Das Mount musste in fstab registriert und manuell gemountet werden - dadurch ging viel verloren und wurde vergessen.
Dann kam mir eine großartige Idee: Wir müssen das alles automatisieren. Es gab mehrere Möglichkeiten:
Es gibt vorgefertigte Vorlagen, die mit SNMP funktionieren, aber keinen Zugriff.Abrufen einer Liste von Volumes und automatisches Mounten auf einem Knoten: Sie müssen einen Ordner erstellen, fstab registrieren, mounten, das ist alles, zu viel Hämorrhoiden.Es gibt eine großartige API , aber da wir nur Speicherplatz mieten, wird diese in unserer Version von ONTAP reduziert und liefert dem Benutzer nicht die erforderlichen Informationen.- Verwenden Sie irgendwie den SSH-Zugriff, um Volumes abzurufen und für die Überwachung einzurichten.
Die Wahl fiel auf den SSH-Agenten .
Low Level Discovery (LLD)
Zunächst müssen wir eine Low-Level-Discovery (LLD) erstellen. Dies sind die Namen unserer Volumes. All dies ist notwendig, um spezifische Informationen über das von uns benötigte Volumen abzurufen. Die Rohdaten sehen ungefähr so aus (114 zum Zeitpunkt des Schreibens):
set -unit B; volume show -state online
Nun, wie können wir ohne Krücken auskommen: Schreiben wir ein einzeiliges Bash-Skript, das die Namen der Volumes im JSON-Format anzeigt (da dies eine externe Überprüfung ist , befinden sich die Skripte auf dem Zabbix-Server im Verzeichnis
/usr/lib/zabbix/externalscripts):
netapp_volume_discovery.sh
#!/usr/bin/bash
SVM_NAME=""
SVM_ADDRESS=""
USERNAME=""
PASSWORD=""
for i in $(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USERNAME@$SVM_ADDRESS 'set -unit B; volume show -state online' | grep $SVM_NAME | awk {'print $2'}); do echo '{"volume_name":"'$i'"}'; done | jq -s '.
Jetzt müssen Sie eine Vorlage erstellen und Datenelemente basierend auf den empfangenen Daten erstellen:
Datenelemente
Um Elemente automatisch zu erstellen, müssen Sie Prototypen erstellen : Wir verwenden Master-Elemente und mehrere abhängige Elemente. Somit wird für jedes Volume ein Master-Element erstellt, in dem eine Reihe von Befehlen über SSH ausgeführt wird:
set -unit B; df -i -volume {#VOLUME_NAME}; volume show-space {#VOLUME_NAME}; statistics volume show -volume {#VOLUME_NAME}
Wir bekommen so ein Blatt:
Volume abrufen: ackey_media info
Last login time: 9/15/2020 12:42:45
Filesystem iused ifree %iused Mounted on
/vol/ackey_media/ 96 311191 0% /ackey_media
Volume Name: ackey_media
Volume MSID: 2159592810
Volume DSID: 1317
Vserver UUID: 46a00e5d-c22d-11e8-b6ed-00a098d48e6d
Aggregate Name: NGHF_FAS2720_04
Aggregate UUID: 7ec21b4d-b4db-4f84-85e2-130750f9f8c3
Hostname: FAS2720_04
User Data: 20480B
User Data Percent: 0%
Deduplication: -
Deduplication Percent: -
Temporary Deduplication: -
Temporary Deduplication Percent: -
Filesystem Metadata: 1150976B
Filesystem Metadata Percent: 0%
SnapMirror Metadata: -
SnapMirror Metadata Percent: -
Tape Backup Metadata: -
Tape Backup Metadata Percent: -
Quota Metadata: -
Quota Metadata Percent: -
Inodes: 12288B
Inodes Percent: 0%
Inodes Upgrade: -
Inodes Upgrade Percent: -
Snapshot Reserve: -
Snapshot Reserve Percent: -
Snapshot Reserve Unusable: -
Snapshot Reserve Unusable Percent: -
Snapshot Spill: -
Snapshot Spill Percent: -
Performance Metadata: 28672B
Performance Metadata Percent: 0%
Total Used: 1212416B
Total Used Percent: 0%
Total Physical Used Size: 1212416B
Physical Used Percentage: 0%
Logical Used Size: 1212416B
Logical Used Percent: 0%
Logical Available: 10736205824B
DOMCLIC_SVM : 9/15/2020 12:42:51
*Total Read Write Other Read Write Latency
Volume Vserver Ops Ops Ops Ops (Bps) (Bps) (us)
----------- ----------- ------ ---- ----- ----- ----- ----- -------
ackey_media DOMCLIC_SVM 0 0 0 0 0 0 0
Aus diesem Blatt müssen wir die Metriken auswählen, die wir benötigen.
Die Magie der regulären Ausdrücke
Anfangs wollte ich JavaScript für die Vorverarbeitung verwenden , aber irgendwie habe ich es nicht gemeistert, es hat nicht funktioniert. Deshalb habe ich bei Stammgästen angehalten und benutze sie fast überall.
Anzahl der verwendeten Inodes
Wir werden nur Informationen über Inodes für jedes Volume in zwei Schritten auswählen: Erstens alle Informationen:
\/vol\/\w+\/.*
Dann speziell nach Metriken:
(\d+)\s+(\d+)\s+(\d+)
Ausgabe - Formatierungsvorlage ausgeben.
\N ( N=1..9)- Die Escape-Sequenz wird durch die N-te übereinstimmende Gruppe ersetzt. Die Escape-Sequenz \0wird durch den passenden Text ersetzt:
\1 - Inode used on {#VOLUME_NAME}- die Anzahl der verwendeten Inodes;\2 - Inode free on {#VOLUME_NAME}- Anzahl der freien Inodes;\3 - Inode used percentage on {#VOLUME_NAME}- verwendete Inodes als Prozentsatz;Inode total on {#VOLUME_NAME}- berechnetes Element , die Anzahl der verfügbaren Inodes.
last(inode_free[{#VOLUME_NAME}])+last(inode_used[{#VOLUME_NAME}])
Belegter Speicherplatz
Hier ist alles einfacher, die Daten und Stammgäste haben ein angenehmeres Format: Wir ziehen die benötigte Metrik heraus und nehmen nur die Zahl:
(?<=Logical Available:\s)\d+
Gesammelte Metriken:
Logical available on {#VOLUME_NAME}- die Menge des verfügbaren logischen Speicherplatzes;Logical used percent on {#VOLUME_NAME}- verwendete logische Stelle in Prozent;Logical used size on {#VOLUME_NAME}- die Menge des verwendeten logischen Speicherplatzes;Physical used percentage on {#VOLUME_NAME}- genutzter physischer Raum in Prozent;Total physical used size on {#VOLUME_NAME}- die Menge des genutzten physischen Raums;Total used on {#VOLUME_NAME}- insgesamt genutzter Platz;Total used percent on {#VOLUME_NAME}- Gesamtzahl der genutzten Plätze in Prozent;Logical size on {#VOLUME_NAME}- berechnetes Element , die Menge des verfügbaren logischen Speicherplatzes.
last(logical_available[{#VOLUME_NAME}])+last(total_used[{#VOLUME_NAME}])
Volumenleistung
Nachdem ich die Dokumentation gelesen und mit verschiedenen Befehlen herumgestöbert hatte, stellte ich fest, dass wir Metriken zur Leistung unserer Volumes erhalten können. Ein kleines Stück ist dafür verantwortlich:
statistics volume show -volume {#VOLUME_NAME}
Wir wählen Leistungsmetriken aus dem gemeinsamen Blatt mit der ersten Regelmäßigkeit aus:
.DOMCLIC_SVM.*
Zweitens gruppieren wir die Zahlen:
(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)
Wo:
\1 - Total number of operations per second on {#VOLUME_NAME}- die Gesamtzahl der Operationen pro Sekunde;\2 - Read operations per second on {#VOLUME_NAME}- Lesevorgänge pro Sekunde;\3 - Write operations per second on {#VOLUME_NAME}- Schreibvorgänge pro Sekunde;\4 - Other operations per second on {#VOLUME_NAME}- andere Operationen pro Sekunde (ich weiß nicht, was es ist, aber aus irgendeinem Grund schieße ich);\5 - Read throughput in bytes per second on {#VOLUME_NAME}- Lesegeschwindigkeit in Bytes pro Sekunde;\6 - Write throughput in bytes per second on {#VOLUME_NAME}- Schreibgeschwindigkeit in Bytes pro Sekunde;\7 - Average latency for an operation in microseconds on {#VOLUME_NAME}- durchschnittliche Latenz der Operationen in Mikrosekunden.
Alarmierung
Die Menge der Trigger ist Standard, Ort und Inodes:
- Freier Speicherplatz von weniger als 1% auf {#VOLUME_NAME}
- Freier Speicherplatz weniger als 5% auf {#VOLUME_NAME}
- Freier Speicherplatz weniger als 10% auf {#VOLUME_NAME}
- Freie Inodes weniger als 1% auf {#VOLUME_NAME}
- Kostenlose Inodes weniger als 5% auf {#VOLUME_NAME}
- Kostenlose Inodes weniger als 10% auf {#VOLUME_NAME}
Visualisierung
Die Visualisierung erfolgt hauptsächlich auf Grafana , sie ist schön und praktisch. Ein Volume sieht beispielsweise ungefähr so aus: In der oberen rechten Ecke befindet sich eine Schaltfläche In Zabbix anzeigen , mit der Sie in Zabbix fallen und alle Metriken für das ausgewählte Volume anzeigen können.
Ergebnis
- Automatische Einstellung der Lautstärke für die Überwachung.
- Automatisches Entfernen von Volumes aus der Überwachung, wenn das Volume aus NetApp entfernt wird.
- Wir haben die Bindung an einen Server und das manuelle Mounten von Volumes beseitigt.
- Leistungsmetriken für jedes Volume hinzugefügt. Jetzt ist es weniger wahrscheinlich, dass wir die Unterstützung für Rechenzentren aus Gründen der Diagramme aus NetApp ziehen.
Bald versprechen sie, ONTAP zu aktualisieren und eine erweiterte API einzuführen. Die Vorlage wird auf einen HTTP-Agenten verschoben .
Vorlage, Skript und Dashboard
github.com/domclick/netapp-volume-monitoring
Nützliche Links
docs.netapp.com/ontap-9/index.jsp
www.zabbix.com/documentation/current