Detaillierte Erklärung der Verwendung des SS-Befehls in Linux in Kombination mit Zabbix zum Überwachen von Sockets

Detaillierte Erklärung der Verwendung des SS-Befehls in Linux in Kombination mit Zabbix zum Überwachen von Sockets

Vorwort

Hier 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-Befehl

Der 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:

  • Alle TCP-Sockets
  • Alle UDP-Sockets
  • Alle dauerhaften SSH-/FTP-/TTP-/https-Verbindungen
  • Alle lokalen Prozesse, die mit dem Xserver verbunden sind
  • Verwenden Sie Status (z. B. verbunden, synchronisiert, SYN-RECV, SYN-SENT, TIME-WAIT), Adresse und Portfilterung
  • Alle staatlichen FIN-WAIT-1 TCPSocket-Verbindungen und mehr

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.

Verwendung: ss [ OPTIONEN ]

ss [ OPTIONEN ] [ FILTER ]

-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-Überwachungsmaschine

Bevor 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 Skript

Und 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-Agenten

vim 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-Vorlage

Element, 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-Überwachungsmaschine

Der 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 schreiben

Hier 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.conf

Fü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 konfigurieren

Hier 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 verwenden Sie den SS-Befehl anstelle von Netstat im Linux-Betrieb und bei der Wartung
  • Detaillierte Erklärung des Linux-SS-Befehls
  • Beispiel für die Verwendung von Sockets für die Interprozesskommunikationsmethode unter Linux
  • Der Unterschied zwischen dem nicht blockierenden Modus und dem blockierenden Modus des Linux UDP-Sockets
  • Beispiel für ein UDP-Socket-Programm für die Linux-Netzwerkprogrammierung
  • Beispiel für die Socket-Dateiübertragung bei der Linux-Netzwerkprogrammierung
  • Zabbix überwacht Linux-Hosts basierend auf SNMP
  • Zabbix überwacht den Prozess der Linux-Systemdienste
  • So richten Sie Zabbix zur Überwachung von Linux-Hosts ein
  • Detaillierte Erläuterung der Implementierungsmethode zur Linux-Überwachung wichtiger Prozesse

<<:  So erstellen Sie einen MySQL PXC-Cluster

>>:  Analyse und Behandlung von Bildlaufleisten in HTML und eingebettetem Flash

Artikel empfehlen

Lösung für den Absturz der Grafikkarte auf Linux-Servern

Wenn die Auflösung der Anmeldeoberfläche besonder...

Detaillierte Erklärung zur Verwendung von Vue-Mixin

Inhaltsverzeichnis Verwendung von Vue-Mixin Daten...

MySQL-Sharding-Details

1. Einführung in das Geschäftsszenario Angenommen...

ReactHooks Batch-Update-Status und Abrufen von Routenparametern Beispielanalyse

Inhaltsverzeichnis 1. So führen Sie stapelweise U...

jQuery implementiert den Tabellen-Paging-Effekt

In diesem Artikel wird der spezifische Code von j...

So installieren Sie Jenkins mit Docker

Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Erst...

Zwei Implementierungscodes der programmgesteuerten Navigation mit Vue-Router

Zwei Möglichkeiten zum Navigieren auf der Seite D...

So implementieren Sie die Navigationsfunktion im WeChat Mini-Programm

1. Rendern2. Bedienungsschritte 1. Beantragen Sie...

So nutzen Sie die Multi-Core-CPU in node.js voll aus

Inhaltsverzeichnis Überblick So nutzen Sie die Mu...

Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln

1. Regulärer Ausdrucksabgleich ~ für Groß- und Kl...

Detaillierte Schritte zur Installation von MySQL in Win

In diesem Artikel werden die detaillierten Schrit...

Wer ist ein User Experience Designer?

Beängstigend, nicht wahr? Übersetzung im Bild: (v...

CocosCreator ScrollView-Optimierungsreihe: Frame-Laden

Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...