VorwortHier verwenden wir Zabbix zur Überwachung und verwenden den SS-Befehl anstelle des Netstat-Befehls, da SS viel schneller ist. Wenn Sie es nicht glauben, können Sie es testen. Je mehr Sockel eine Maschine hat, desto deutlicher ist der Unterschied. Und der Befehl ss kann mehr Inhalt anzeigen. Tatsächlich bin ich mit diesen beiden Befehlen nicht besonders vertraut. Durch man ss kann ich sehen: 1. SS-BefehlDer Befehl ss wird verwendet, um den Socket-Status anzuzeigen. Er kann Statistiken für PACKET-Sockets, TCP-Sockets, UDP-Sockets, DCCP-Sockets, RAW-Sockets, Unix-Domain-Sockets und mehr anzeigen. Er zeigt mehr TCP- und Statusinformationen an als andere Tools. Es ist ein sehr praktisches, schnelles und effektives neues Tool zum Verfolgen von IP-Verbindungen und Sockets. Der Befehl SS kann die folgenden Informationen liefern:
Viele beliebte Linux-Distributionen unterstützen SS und viele Überwachungstools verwenden SS-Befehle. Wenn Sie mit diesem Tool vertraut sind, können Sie Probleme mit der Systemleistung besser erkennen und lösen. Ich empfehle dringend, SS-Befehle anstelle einiger Netstat-Befehle zu verwenden, z. B. netsat -ant/lnt usw. Direkter SS-Befehl Um das oben Gesagte zu erklären: Netid #Socket-Typ. Im obigen Beispiel gibt es TCP, u_str (Unix-Stream) und andere Sockets. State #In welchem Zustand befindet sich der Socket? Unten sind alle Zustände und Beschreibungen von TCP-Sockets aufgeführt, die eigentlich alle Zustände des Drei-Wege-Handshakes und des Vier-Wege-Handshakes von TCP sind. Recv-Q #Der Zustand ESTAB gibt an, wie viele Datenbytes im Kernel von der Anwendung der höheren Ebene nicht gelesen wurden. Wenn der Wert hier groß ist, ist die Anwendung möglicherweise blockiert. Send-Q #Der Zustand ESTAB gibt an, wie viele Datenbytes in der Sendewarteschlange des Kernels die Bestätigung ACK nicht erhalten haben. Wenn dieser Wert groß ist, bedeutet dies, dass Empfang und Verarbeitung am empfangenden Ende verstärkt werden müssen. Local Address:Port #Lokale Adresse und Port Peer Address:Port #Remote-Adresse und Port Schauen wir uns dann die Zustände oben an. Wenn Sie mit dem Netzwerk vertraut sind, sollten Sie es sehr gut verstehen. Zumindest bin ich jetzt nicht sehr vertraut damit. Die Zustände von drei Handshakes und vier Waves sind: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers ::::::::::: Wie hängen also diese Status-SS-Befehle zusammen? (Nachfolgend sind die vom SS-Befehl angezeigten Statusinformationen aufgeführt) [TCP_ESTABLISHED] = "ESTAB", [TCP_SYN_SENT] = "SYN-GESENDET", [TCP_SYN_RECV] = "SYN-RECV", [TCP_FIN_WAIT1] = "FIN-WAIT-1", [TCP_FIN_WAIT2] = "FIN-WAIT-2", [TCP_TIME_WAIT] = "Wartezeit", [TCP_CLOSE] = "Verbindung beenden", [TCP_CLOSE_WAIT] = "SCHLIESSEN-WAIT", [TCP_LAST_ACK] = "LETZTE-ACK", [TCP_LISTEN] = "HÖREN", [TCP_CLOSING] = "SCHLIESSEN", Jetzt können Sie die folgende Überwachung durchführen. Lesen Sie weiter, um mehr über die Verwendung des SS-Befehls zu erfahren.
-h, --help Hilfeinformationen -V, --version Informationen zur Programmversion -n, --numeric Dienstnamen nicht auflösen -r, --resolve Hostnamen auflösen -a, --all alle Sockets anzeigen -l, --listening Abhör-Sockets anzeigen -o, --options Zeitgeberinformationen anzeigen -e, --extended Detaillierte Socketinformationen anzeigen -m, --memory Socket-Speichernutzung anzeigen -p, --processes Den Prozess anzeigen, der den Socket verwendet -i, --info TCP-interne Informationen anzeigen -s, --summary Übersicht zur Socket-Nutzung anzeigen -4, --ipv4 Nur IPv4-Sockets anzeigen -6, --ipv6 Nur IPv6-Sockets anzeigen -0, --packet PACKET-Socket anzeigen -t, --tcp Nur TCP-Sockets anzeigen -u, --udp zeigt nur UCP-Sockets an -d, --dccp Nur DCCP-Sockets anzeigen -w, --raw zeigt nur RAW-Sockets -x, --unix zeigt nur Unix-Sockets -f, --family=FAMILY zeigt Sockets vom Typ FAMILY an, FAMILY ist optional, unterstützt Unix, Inet, Inet6, Link, Netlink -A, --query=ABFRAGE, --socket=ABFRAGE ABFRAGE := {alle|inet|tcp|udp|raw|unix|paket|netlink}[,ABFRAGE] -D, --diag=DATEI Schreibe unverarbeitete TCP-Socket-Informationen in eine Datei. -F, --filter=DATEI Entferne Filterinformationen aus der Datei FILTER := [ status TCP-STATUS ] [ AUSDRUCK ] Im Fokus stehen dabei folgende Monitoringmaßnahmen 2. Gesamtsocket-Status der Zabbix-ÜberwachungsmaschineBevor Sie diese Überwachung durchführen, können Sie sich mit dem awk-Befehl vertraut machen Als Monitoring-System kommt hier Zabbix zum Einsatz. Für das Monitoring kombinieren wir das Zabbix-Template (hier wird das Template für spätere Erweiterungen ausgewählt) und eigene Scripts. 2.1. Schreiben Sie ein SkriptUnd nun ohne weitere Umschweife das Skript: vim tcp_status.sh ####################Skriptinhalt################### #!/bin/bash wenn [ $# -ne 1 ];dann echo "Dem Skriptnamen folgt ein Argument" fi Fall $1 in HÖREN) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/LISTEN/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; ESTAB) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/ESTAB/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; NAHE WARTEN Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/CLOSE-WAIT/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; ZEIT-WAIT) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/TIME-WAIT/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; SYN-GESENDET) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/SYN-SENT/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; SYN-RECV) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/SYN-RECV/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; FIN-WAIT-1) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/FIN-WAIT-1/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; FIN-WAIT-2) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/FIN-WAIT-2/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; UNCONN) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/UNCONN/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; LETZTE BESTÄTIGUNG Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/LAST-ACK/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; SCHLIESSEN) Ergebnis=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/CLOSING/{print $2}'` wenn [ "$result" == "" ]; dann Echo 0 anders echo $ergebnis fi ;; esac 2.2. Konfigurieren Sie die Konfigurationsdatei des Zabbix-Agentenvim zabbix_agent.conf ################Fügen Sie den folgenden Inhalt hinzu################### UnsafeUserParameters=1 #Dieser Parameter wird für benutzerdefinierte Skripte benötigt UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh $1 #Dies wird verwendet, um das gerade geschriebene Skript anzugeben und dann einen Parameter zu übergeben Denken Sie daran, den Zabbix-Agenten nach der Konfiguration neu zu starten 2.3. Konfigurieren Sie die Zabbix-VorlageElement, Auslöser oder Diagramm hinzufügen Fügen Sie eine neue Vorlage hinzu und fügen Sie dann ein Element hinzu, wie in der folgenden Abbildung gezeigt Der tcp.status im Schlüssel in der obigen Abbildung bezieht sich auf die Konfiguration nur in Schritt 2 UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh \$1 Dann ist der Inhalt in den Klammern der von \$1 übergebene Parameter. Der spezifische Parameter ist UNCONN in [UNCONN]. Diese Werte entsprechen jeweils dem Fall im Fall des Überwachungsskripts des ersten Schritts. Es ist hier im Grunde abgeschlossen. Nein, zeichnen wir ein Diagramm und fügen der Vorlage ein Diagramm hinzu, wie in der folgenden Abbildung gezeigt: Der wichtigste Schritt besteht darin, den Host mit dem konfigurierten Überwachungsskript (der erste Schritt) zur Vorlage hinzuzufügen. Damit ist die Überwachung abgeschlossen. Werfen wir einen Blick auf das Ergebnisdiagramm. 3. Die Anzahl der Anfragen von jeder Maschine an die Zabbix-ÜberwachungsmaschineDer Zweck dieser Überwachung besteht darin, festzustellen, welche Maschinen häufiger auf die Zielmaschine zugreifen. Diese Überwachung verwendet eine Selbsterkennungsüberwachung, die etwas schwieriger ist als die oben genannte. Warum sollte man sich für eine Selbsterkennungsüberwachung entscheiden? Weil das Element nicht sicher ist. Hier wählen wir: die ursprüngliche Adress-IP und die Ziel-IP-Adresse als Element. Wir überwachen die Ziel-IP-Adresse, die unverändert bleibt, sodass sich der IP-Wert der ursprünglichen Adresse ändert. Daher wird hier die automatische Generierung von Elementen zur Überwachung verwendet. Elemente werden automatisch hinzugefügt und gelöscht. Die Verwendung ist eigentlich sehr einfach. Wenn Sie es einmal gelernt haben, ist es super einfach. Dies ist ebenfalls in drei Schritte unterteilt: Schreiben von Skripten, Konfigurieren von zabbix_agent.conf-Dateien und Konfigurieren von Discovery 3.1. Skripte schreibenHier werden zwei Skripte benötigt, eines für die Selbsterkennung (muss im JSON-Format ausgegeben werden) und eines für das Element. vim tcp_monitory.sh #####################tcp_monitor.sh##################### #!/bin/bash #Holen Sie sich die Daten und geben Sie sie in die Datei data.txt aus. Das Format ist: ursprüngliche IP-Adresse: Anzahl: Zieladresse IP #Und filtere die Daten mit einer Anzahl unter 200 heraus. Hier gibt es keinen Socket-Status. Es ist zu kompliziert. Einzelpersonen können es nach spezifischen Anforderungen verbessern. ip_addr=`ip addr | grep -w inet | grep -v "127.0.0.1" | awk '{print $2}'| awk -F "/" '{print $1}'` ss -ant | awk '{ print $5}'|grep -Ev '127.0.0.1' | cut -d ':' -f4 | awk -v ip_addr=$ip_addr 'NR>1 {++s[$1]} END {for(k in s)if(s[k]>=200){print k,s[k],ip_addr}}' | grep -E "^([0-9]{1,3}\.){3}[0-9]" > /home/zabbix/data.txt #Führen Sie das Python-Skript aus, um das JSON-Format auszugeben. python /home/zabbix/get_json.py ##################################### #Das Folgende ist der Inhalt von get_json.py###############get_json.py#################### #!/usr/bin/env python #Kodierung=utf-8 JSON importieren def create_json(Pfad): json_liste = [] mit open(path) als f: für Zeile in f.readlines(): dict = {} split = zeile.split(" ") dict["{#DES_IP}"] = teilen[0] //dict["{#LINK_COUNT}"] = split[1] //Dies ist optional dict["{#SOU_IP}"] = split[2][:-1] json_list.append(dict) Summe = {} Summe["Daten"] = json_list Summe = json.dumps(Summe) Summe drucken wenn __name__ == '__main__': Pfad = "/home/zabbix/data.txt" create_json(Pfad) #################Trennlinie: Das Obige ist ein selbst entdecktes Skript################ #################Trennlinie: Das Folgende ist das zum Artikel gehörende Skript################ vim tcp_item.sh #####################tcp_item.sh####################### #!/bin/bash export LANG="en_US.UTF-8" Pfad=/home/zabbix/data.txt Anzahl=`cat $Pfad | grep $1 | grep $2 | awk '{print $2}'` [ 1 "$Anzahl" -eq 1 ] && echo 0 || echo $Anzahl Nachdem beide Skripte fertig sind, können Sie zabbix_agent.conf konfigurieren 3.2. Konfigurieren Sie die Datei zabbix_agent.confFügen Sie der Konfigurationsdatei den folgenden Inhalt hinzu: UnsafeUserParameters=1 #Wenn es bereits konfiguriert wurde, muss es nicht konfiguriert werden UserParameter=discovery.tcp_monitor[*],sh /home/zabbix/tcp_monitor.sh #Selbsterkennung UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh $1 $2 #Element, wobei $1 und $2 die Übergabeparameter im Element sind, um die verschiedenen Elemente zu unterscheiden 3.3. Discovery, Element, Trigger und Graph konfigurierenHier wählen wir noch die Konfiguration auf der Zabbix-Vorlage aus und fügen nun eine Discovery hinzu Konfigurieren Sie dann Element, Trigger und Diagramm auf Discovery Konfigurationselement: Die obigen DES_IP und SOU_IP werden aus dem Python-Skript im Selbsterkennungsskript abgeleitet und für das Ausgabeformat verwendet. alter.tcp_count ist UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh \$1 \$2, und die folgenden \$1, \$2 entsprechen DES_IP, SOU_IP, um ein eindeutiges Element zu generieren. Nachdem das Element konfiguriert ist, können Sie den Auslöser konfigurieren: Fahren Sie als Nächstes mit der Konfiguration des Diagramms fort. Fügen Sie abschließend die Vorlage zur Maschine hinzu und sehen Sie sich die Ergebnisse an Oben finden Sie eine ausführliche Erklärung zur Verwendung des Linux-Befehls ss in Kombination mit zabbix zur Überwachung des Sockets. Weitere Informationen zur Überwachung des Linux-Befehls ss zabbix-Sockets finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So erstellen Sie einen MySQL PXC-Cluster
>>: Analyse und Behandlung von Bildlaufleisten in HTML und eingebettetem Flash
Wenn die Auflösung der Anmeldeoberfläche besonder...
Inhaltsverzeichnis Verwendung von Vue-Mixin Daten...
Inhaltsverzeichnis Vorwort Der Wert der modularen...
1. Einführung in das Geschäftsszenario Angenommen...
Inhaltsverzeichnis 1. So führen Sie stapelweise U...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Erst...
Zwei Möglichkeiten zum Navigieren auf der Seite D...
1. Rendern2. Bedienungsschritte 1. Beantragen Sie...
Inhaltsverzeichnis Überblick So nutzen Sie die Mu...
1. Regulärer Ausdrucksabgleich ~ für Groß- und Kl...
Viele Freunde, die gerade angefangen haben, Websei...
In diesem Artikel werden die detaillierten Schrit...
Beängstigend, nicht wahr? Übersetzung im Bild: (v...
Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...