So überwachen Sie Ihr Ubuntu 16.04-System mit Sysdig

Einführung

Sysdig ist eine umfassende Open-Source-Anwendung zur Überwachung, Erfassung und Analyse von Systemaktivitäten. Es bietet eine leistungsstarke Filtersprache mit anpassbarer Ausgabe und Kernfunktionen, die mit Lua -Skripten namens chisels erweitert werden können.

Die Anwendung tippt auf den Kernel und kann so jeden Systemaufruf und alle Informationen anzeigen, die den Kernel durchlaufen. Dies macht es auch zu einem hervorragenden Tool zum Überwachen und Analysieren von Systemaktivitäten und Ereignissen, die von Anwendungscontainern generiert werden, die auf einem System ausgeführt werden.

Die zentrale Sysdig-Anwendung überwacht den Server, auf dem sie installiert ist. Das Unternehmen, das hinter dem Projekt steht, bietet jedoch eine gehostete Version namens Sysdig Cloud an, mit der eine beliebige Anzahl von Servern remote überwacht werden kann.

Die eigenständige Anwendung ist auf den meisten Linux-Distributionen verfügbar, mit eingeschränkter Funktionalität jedoch auch auf Windows und MacOS. Neben dem Befehlszeilentool "+ sysdig " bietet Sysdig auch eine interaktive Benutzeroberfläche mit dem Namen " csysdig +" und ähnlichen Optionen.

In diesem Tutorial installieren und überwachen Sie mit Sysdig einen Ubuntu 16.04-Server. Sie können Live-Ereignisse streamen, Ereignisse in Dateien speichern, Ergebnisse filtern und die interaktive Benutzeroberfläche "+ csysdig +" erkunden.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

Schritt 1 - Installieren von Sysdig mithilfe des offiziellen Skripts

Es gibt ein Sysdig-Paket im Ubuntu-Repository, aber normalerweise ist es eine oder zwei Revisionen hinter der aktuellen Version. Zum Zeitpunkt der Veröffentlichung erhalten Sie beispielsweise Sysdig 0.8.0, wenn Sie Sysdig mit dem Paket-Manager von Ubuntu installieren. Sie können es jedoch mithilfe eines offiziellen Skripts von der Entwicklungsseite des Projekts installieren. Dies ist die empfohlene Installationsmethode. Dies ist die Methode, die wir verwenden werden.

Aktualisieren Sie zunächst die Paketdatenbank, um sicherzustellen, dass Sie über die neueste Liste der verfügbaren Pakete verfügen:

sudo apt-get update

Laden Sie jetzt das Sysdig-Installationsskript mit "+ curl +" herunter, indem Sie den folgenden Befehl verwenden:

curl https://s3.amazonaws.com/download.draios.com/stable/install-sysdig -o install-sysdig

Dadurch wird das Installationsskript in die Datei "+ install-sysdig " im aktuellen Ordner heruntergeladen. Sie müssen dieses Skript mit erhöhten Berechtigungen ausführen. Es ist gefährlich, Skripts auszuführen, die Sie aus dem Internet herunterladen. Bevor Sie das Skript ausführen, überprüfen Sie dessen Inhalt, indem Sie es in einem Texteditor öffnen oder den Befehl ` less +` verwenden, um den Inhalt auf dem Bildschirm anzuzeigen:

less ./install-sysdig

Wenn Sie mit den Befehlen vertraut sind, die das Skript ausführt, führen Sie das Skript mit dem folgenden Befehl aus:

cat ./install-sysdig | sudo bash

Der Befehl installiert alle Abhängigkeiten, einschließlich der Kernel-Header und -Module. Die Ausgabe der Installation sieht ungefähr so ​​aus:

Output* Detecting operating system
* Installing Sysdig public key
OK
* Installing sysdig repository
* Installing kernel headers
* Installing sysdig

...

sysdig-probe:
Running module version sanity check.
- Original module
  - No original module exists within this kernel
- Installation
  - Installing to /lib/modules/4.4.0-59-generic/updates/dkms/

depmod....

DKMS: install completed.
Processing triggers for libc-bin (2.23-0ubuntu5) ...

Nachdem Sie Sysdig installiert haben, sehen wir uns einige Verwendungsmöglichkeiten an.

Schritt 2 - Überwachen Sie Ihr System in Echtzeit

In diesem Abschnitt verwenden Sie den Befehl "+ sysdig ", um einige Ereignisse auf Ihrem Ubuntu 16.04-Server anzuzeigen. Für den Befehl ` sysdig +` sind Root-Berechtigungen erforderlich. Es sind beliebig viele Optionen und Filter verfügbar. Der Befehl kann am einfachsten ohne Argumente ausgeführt werden. Auf diese Weise erhalten Sie eine Echtzeitansicht der Systemdaten, die alle zwei Sekunden aktualisiert werden:

sudo sysdig

Sobald Sie den Befehl ausführen, ist es jedoch möglicherweise schwierig, die auf den Bildschirm geschriebenen Daten zu analysieren, da sie kontinuierlich übertragen werden und auf Ihrem Server viele Ereignisse stattfinden. Stoppen Sie + sysdig +, indem Sie + CTRL + C + drücken.

Bevor wir den Befehl mit einigen Optionen erneut ausführen, machen wir uns mit der Ausgabe vertraut, indem wir uns eine Beispielausgabe des Befehls ansehen:

Output253566 11:16:42.808339958 0 sshd (12392) > rt_sigprocmask
253567 11:16:42.808340777 0 sshd (12392) < rt_sigprocmask
253568 11:16:42.808341072 0 sshd (12392) > rt_sigprocmask
253569 11:16:42.808341377 0 sshd (12392) < rt_sigprocmask
253570 11:16:42.808342432 0 sshd (12392) > clock_gettime
253571 11:16:42.808343127 0 sshd (12392) < clock_gettime
253572 11:16:42.808344269 0 sshd (12392) > read fd=10(<f>/dev/ptmx) size=16384
253573 11:16:42.808346955 0 sshd (12392) < read res=2 data=..

Die Ausgabespalten sind:

Output%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info

Die einzelnen Spalten haben folgende Bedeutung:

  • * evt.num * ist die inkrementelle Ereignisnummer.

  • * evt.outputtime * ist der Ereigniszeitstempel, den Sie anpassen können.

  • * evt.cpu * ist die CPU-Nummer, in der das Ereignis erfasst wurde. In der obigen Ausgabe ist * evt.cpu * * 0 *, die erste CPU des Servers.

  • * proz.name * ist der Name des Prozesses, der das Ereignis generiert hat.

  • * thread.tid * ist die TID, die das Ereignis generiert hat und der PID für Single-Thread-Prozesse entspricht.

  • * evt.dir * ist die Ereignisrichtung. Sie sehen > * für Eingabeereignisse und * < für Austrittsereignisse.

  • * evt.type * ist der Name des Ereignisses, z. "Öffnen", "Lesen", "Schreiben" usw.

  • * evt.info * ist die Liste der Ereignisargumente. Bei Systemaufrufen entsprechen diese normalerweise den Systemaufrufargumenten. Dies ist jedoch nicht immer der Fall: Einige Systemaufrufargumente werden aus Gründen der Einfachheit oder der Leistung ausgeschlossen.

Es ist kaum sinnvoll, "+ sysdig +" wie im vorherigen Befehl auszuführen, da so viele Informationen eingespeist werden. Sie können dem Befehl jedoch Optionen und Filter zuweisen, indem Sie die folgende Syntax verwenden:

sudo sysdig [option] [filter]

Sie können die vollständige Liste der verfügbaren Filter anzeigen, indem Sie Folgendes verwenden:

sysdig -l

Es gibt eine umfangreiche Liste von Filtern, die sich über mehrere Klassen oder Kategorien erstrecken. Hier sind einige der Klassen:

  • * fd *: Filtert nach FD-Informationen (File Descriptor), wie z. B. FD-Nummern und FD-Namen.

  • * process *: Filtert nach Prozessinformationen wie ID und Name des Prozesses, der ein Ereignis generiert hat.

  • * evt *: Filtert nach Ereignisinformationen wie Ereignisnummer und Uhrzeit.

  • * user *: Filtert nach Benutzerinformationen wie Benutzer-ID, Benutzername, Benutzerverzeichnis oder Anmeldeshell.

  • * group *: Filtert nach Gruppeninformationen wie Gruppen-ID und Name.

  • * syslog *: Filtert nach Syslog-Informationen, wie Einrichtung und Schweregrad.

  • * fdlist *: Filtert nach Dateideskriptor für Umfrageereignisse.

Da es nicht praktisch ist, alle Filter in diesem Lernprogramm zu behandeln, versuchen wir es zunächst mit dem Filter "* syslog.severity.str " in der Klasse " syslog *", mit dem Sie Nachrichten anzeigen können, die mit einem bestimmten Schweregrad an syslog gesendet wurden. Dieser Befehl zeigt Nachrichten an, die auf der Informationsebene an syslog gesendet wurden:

sudo sysdig syslog.severity.str=info

Beenden Sie den Befehl mit + CTRL + C +.

Die Ausgabe, die recht einfach zu interpretieren sein sollte, sollte ungefähr so ​​aussehen:

Output10716 03:15:37.111266382 0 sudo (26322) < sendto syslog sev=info msg=Jan 24 03:15:37 sudo: pam_unix(sudo:session): session opened for user root b
618099 03:15:57.643458223 0 sudo (26322) < sendto syslog sev=info msg=Jan 24 03:15:57 sudo: pam_unix(sudo:session): session closed for user root
627648 03:16:23.212054906 0 sudo (27039) < sendto syslog sev=info msg=Jan 24 03:16:23 sudo: pam_unix(sudo:session): session opened for user root b
629992 03:16:23.248012987 0 sudo (27039) < sendto syslog sev=info msg=Jan 24 03:16:23 sudo: pam_unix(sudo:session): session closed for user root
639224 03:17:01.614343568 0 cron (27042) < sendto syslog sev=info msg=Jan 24 03:17:01 CRON[27042]: pam_unix(cron:session): session opened for user
639530 03:17:01.615731821 0 cron (27043) < sendto syslog sev=info msg=Jan 24 03:17:01 CRON[27043]: (root) CMD (   cd / && run-parts --report /etc/
640031 03:17:01.619412864 0 cron (27042) < sendto syslog sev=info msg=Jan 24 03:17:01 CRON[27042]: pam_unix(cron:session): session closed for user

Sie können auch nach einem einzelnen Prozess filtern. Führen Sie zum Beispiel den folgenden Befehl aus, um nach Ereignissen in + nano + zu suchen:

sudo sysdig proc.name=nano

Da dieser Befehl unter "+ nano " abgelegt wird, müssen Sie den Texteditor " nano " verwenden, um eine Datei zu öffnen und die Ausgabe zu sehen. Öffnen Sie einen anderen Terminal-Editor, stellen Sie eine Verbindung zu Ihrem Server her und öffnen Sie mit ` nano +` eine Textdatei. Schreiben Sie ein paar Zeichen und speichern Sie die Datei. Kehren Sie dann zu Ihrem ursprünglichen Terminal zurück.

Sie sehen dann eine Ausgabe ähnlich der folgenden:

Output21840 11:26:33.390634648 0 nano (27291) < mmap res=7F517150A000 vm_size=8884 vm_rss=436 vm_swap=0
21841 11:26:33.390654669 0 nano (27291) > close fd=3(<f>/lib/x86_64-linux-gnu/libc.so.6)
21842 11:26:33.390657136 0 nano (27291) < close res=0
21843 11:26:33.390682336 0 nano (27291) > access mode=0(F_OK)
21844 11:26:33.390690897 0 nano (27291) < access res=-2(ENOENT) name=/etc/ld.so.nohwcap
21845 11:26:33.390695494 0 nano (27291) > open
21846 11:26:33.390708360 0 nano (27291) < open fd=3(<f>/lib/x86_64-linux-gnu/libdl.so.2) name=/lib/x86_64-linux-gnu/libdl.so.2 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
21847 11:26:33.390710510 0 nano (27291) > read fd=3(<f>/lib/x86_64-linux-gnu/libdl.so.2) size=832

Beenden Sie den Befehl erneut, indem Sie "+ STRG + C +" eingeben.

Eine Echtzeitansicht von Systemereignissen mit "+ sysdig +" ist nicht immer die beste Methode, um sie zu verwenden. Zum Glück gibt es noch eine andere Möglichkeit: Ereignisse zur späteren Analyse in einer Datei festhalten. Schauen wir uns an, wie.

Schritt 3 - Erfassen der Systemaktivität in einer Datei mit Sysdig

Wenn Sie Systemereignisse mit "+ sysdig " in einer Datei festhalten, können Sie diese Ereignisse zu einem späteren Zeitpunkt analysieren. Um Systemereignisse in einer Datei zu speichern, übergeben Sie " sysdig +" die Option "* -w *" und geben Sie einen Zieldateinamen wie folgt an:

sudo sysdig -w .scap

Sysdig speichert die generierten Ereignisse in der Zieldatei, bis Sie die Tastenkombination STRG + C + drücken. Mit der Zeit kann diese Datei sehr groß werden. Mit der Option * -n * können Sie jedoch angeben, wie viele Ereignisse Sysdig aufzeichnen soll. Nachdem die gewünschte Anzahl von Ereignissen erfasst wurde, wird sie beendet. Um beispielsweise 300 Ereignisse in einer Datei zu speichern, geben Sie Folgendes ein:

sudo sysdig -n 300 -w .scap

Obwohl Sie Sysdig verwenden können, um eine bestimmte Anzahl von Ereignissen in einer Datei zu erfassen, besteht ein besserer Ansatz darin, die Option * -C * zu verwenden, um eine Erfassung in kleinere Dateien einer bestimmten Größe aufzuteilen. Um den lokalen Speicher nicht zu überlasten, können Sie Sysdig anweisen, nur einige der gespeicherten Dateien zu behalten. Mit anderen Worten, Sysdig unterstützt die Erfassung von Ereignissen in Protokollen mit Dateirotation in einem Befehl.

Führen Sie den folgenden Befehl aus, um Ereignisse fortlaufend in Dateien mit einer Größe von höchstens 1 MB zu speichern und nur die letzten fünf Dateien zu speichern (dies ist bei der Option * -W * der Fall):

sudo sysdig -C 1 -W 5 -w .scap

Listen Sie die Dateien mit "+ ls -l sysdig-trace * +" auf und Sie werden eine Ausgabe ähnlich der folgenden mit fünf Protokolldateien sehen:

Output-rw-r--r-- 1 root root 985K Nov 23 04:13 sysdig-trace.scap0
-rw-r--r-- 1 root root 952K Nov 23 04:14 sysdig-trace.scap1
-rw-r--r-- 1 root root 985K Nov 23 04:13 sysdig-trace.scap2
-rw-r--r-- 1 root root 985K Nov 23 04:13 sysdig-trace.scap3
-rw-r--r-- 1 root root 985K Nov 23 04:13 sysdig-trace.scap4

Wie bei der Echtzeiterfassung können Sie Filter auf gespeicherte Ereignisse anwenden. Um beispielsweise 200 Ereignisse zu speichern, die durch den Prozess "+ nano +" generiert wurden, geben Sie folgenden Befehl ein:

sudo sysdig -n 200 -w .scap proc.name=nano

Öffnen Sie dann in einem anderen mit Ihrem Server verbundenen Terminal eine Datei mit + nano + und generieren Sie einige Ereignisse, indem Sie Text eingeben oder die Datei speichern. Die Ereignisse werden in "+ sysdig-trace-nano.scap " aufgezeichnet, bis " sysdig +" 200 Ereignisse aufzeichnet.

Wie würden Sie vorgehen, um alle auf Ihrem Server generierten Schreibereignisse zu erfassen? Sie würden den Filter folgendermaßen anwenden:

sudo sysdig -w .scap evt.type=write

Drücken Sie nach einigen Augenblicken STRG + C +, um das Menü zu verlassen.

Sie können noch viel mehr tun, wenn Sie die Systemaktivität mit + sysdig + in eine Datei speichern, aber diese Beispiele sollten Ihnen eine ziemlich gute Vorstellung davon geben, wie Sie vorgehen müssen. Schauen wir uns an, wie diese Dateien analysiert werden.

Schritt 4 - Lesen und Analysieren von Ereignisdaten mit Sysdig

Das Lesen erfasster Daten aus einer Datei mit Sysdig ist so einfach wie das Übergeben des Schalters * -r * an den Befehl + sysdig +:

sudo sysdig -r .scap

Dadurch wird der gesamte Inhalt der Datei auf dem Bildschirm angezeigt. Dies ist nicht der beste Ansatz, insbesondere, wenn die Datei groß ist. Glücklicherweise können Sie dieselben Filter anwenden, wenn Sie die Datei lesen, die Sie beim Schreiben angewendet haben.

Wenn Sie beispielsweise die von Ihnen erstellte Trace-Datei "+ sysdig-trace-nano.scap +" lesen möchten, aber nur einen bestimmten Ereignistyp wie "Ereignisse schreiben" betrachten möchten, geben Sie folgenden Befehl ein:

sysdig -r .scap evt.type=write

Die Ausgabe sollte ungefähr so ​​aussehen:

Output21340 13:32:14.577121096 0 nano (27590) < write res=1 data=.
21736 13:32:17.378737309 0 nano (27590) > write fd=1 size=23
21737 13:32:17.378748803 0 nano (27590) < write res=23 data=#This is a test file..#
21752 13:32:17.611797048 0 nano (27590) > write fd=1 size=24
21753 13:32:17.611808865 0 nano (27590) < write res=24 data= This is a test file..#
21768 13:32:17.992495582 0 nano (27590) > write fd=1 size=25
21769 13:32:17.992504622 0 nano (27590) < write res=25 data=TThis is a test file..# T
21848 13:32:18.338497906 0 nano (27590) > write fd=1 size=25
21849 13:32:18.338506469 0 nano (27590) < write res=25 data=hThis is a test file..[5G
21864 13:32:18.500692107 0 nano (27590) > write fd=1 size=25
21865 13:32:18.500714395 0 nano (27590) < write res=25 data=iThis is a test file..[6G
21880 13:32:18.529249448 0 nano (27590) > write fd=1 size=25
21881 13:32:18.529258664 0 nano (27590) < write res=25 data=sThis is a test file..[7G
21896 13:32:18.620305802 0 nano (27590) > write fd=1 size=25

Sehen wir uns den Inhalt der Datei an, die Sie im vorherigen Abschnitt gespeichert haben: die Datei "+ sysdig-write-events.scap +". Wir wissen, dass alle in der Datei gespeicherten Ereignisse Schreibereignisse sind. Sehen wir uns also den Inhalt an:

sudo sysdig -r  evt.type=write

Dies ist eine Teilausgabe. Sie sehen so etwas, wenn beim Erfassen der Ereignisse eine SSH-Aktivität auf dem Server aufgetreten ist:

Output42585 19:58:03.040970004 0 gmain (14818) < write res=8 data=........
42650 19:58:04.279052747 0 sshd (22863) > write fd=3(<4t>11.11.11.11:43566->22.22.22.22:ssh) size=28
42651 19:58:04.279128102 0 sshd (22863) < write res=28 data=.8c..jp...P........s.E<...s.
42780 19:58:06.046898181 0 sshd (12392) > write fd=3(<4t>11.11.11.11:51282->22.22.22.22:ssh) size=28
42781 19:58:06.046969936 0 sshd (12392) < write res=28 data=M~......V.....Z...\..o...N..
42974 19:58:09.338168745 0 sshd (22863) > write fd=3(<4t>11.11.11.11:43566->22.22.22.22:ssh) size=28
42975 19:58:09.338221272 0 sshd (22863) < write res=28 data=66..J.._s&U.UL8..A....U.qV.*
43104 19:58:11.101315981 0 sshd (12392) > write fd=3(<4t>11.11.11.11:51282->22.22.22.22:ssh) size=28
43105 19:58:11.101366417 0 sshd (12392) < write res=28 data=d).(...e....l..D.*_e...}..!e
43298 19:58:14.395655322 0 sshd (22863) > write fd=3(<4t>11.11.11.11:43566->22.22.22.22:ssh) size=28
43299 19:58:14.395701578 0 sshd (22863) < write res=28 data=.|.o....\...V...2.$_...{3.3|
43428 19:58:16.160703443 0 sshd (12392) > write fd=3(<4t>11.11.11.11:51282->22.22.22.22:ssh) size=28
43429 19:58:16.160788675 0 sshd (12392) < write res=28 data=..Hf.%.Y.,.s...q...=..(.1De.
43622 19:58:19.451623249 0 sshd (22863) > write fd=3(<4t>11.11.11.11:43566->22.22.22.22:ssh) size=28
43623 19:58:19.451689929 0 sshd (22863) < write res=28 data=.ZT^U.pN....Q.z.!.i-Kp.o.y..
43752 19:58:21.216882561 0 sshd (12392) > write fd=3(<4t>11.11.11.11:51282->22.22.22.22:ssh) size=28

Beachten Sie, dass alle Zeilen in der vorhergehenden Ausgabe * 11.11.11.11: 51282→ 22.22.22.22:ssh* enthalten. Dies sind Ereignisse, die von der externen IP-Adresse des Clients "+ 11.11.11.11 " an die IP-Adresse des Servers " 22.22.22.22 +" gesendet werden. Diese Ereignisse traten über eine SSH-Verbindung zum Server auf, sodass diese Ereignisse erwartet werden. Gibt es jedoch andere SSH-Schreibereignisse, die nicht von dieser bekannten Client-IP-Adresse stammen? Es ist leicht herauszufinden.

Es gibt viele Vergleichsoperatoren, die Sie mit Sysdig verwenden können. Der erste, den Sie gesehen haben, ist * = . Andere sind *! = *, *> *, *> = *, * < Und * ⇐ *. Im folgenden Befehl filtert * fd.rip * nach der Remote-IP-Adresse. Wir werden den Vergleichsoperator *! = * Verwenden, um nach Ereignissen zu suchen, die von anderen IP-Adressen als "+ 11.11.11.11 +" stammen:

sysdig -r  fd.rip!=

Eine Teilausgabe, die zeigte, dass Schreibereignisse von anderen IP-Adressen als der Client-IP-Adresse aufgetreten sind, wird in der folgenden Ausgabe angezeigt:

Output294479 21:47:47.812314954 0 sshd (28766) > read fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) size=1
294480 21:47:47.812315804 0 sshd (28766) < read res=1 data=T
294481 21:47:47.812316247 0 sshd (28766) > read fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) size=1
294482 21:47:47.812317094 0 sshd (28766) < read res=1 data=Y
294483 21:47:47.812317547 0 sshd (28766) > read fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) size=1
294484 21:47:47.812318401 0 sshd (28766) < read res=1 data=.
294485 21:47:47.812318901 0 sshd (28766) > read fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) size=1
294486 21:47:47.812320884 0 sshd (28766) < read res=1 data=.
294487 21:47:47.812349108 0 sshd (28766) > fcntl fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) cmd=4(F_GETFL)
294488 21:47:47.812350355 0 sshd (28766) < fcntl res=2(<f>/dev/null)
294489 21:47:47.812351048 0 sshd (28766) > fcntl fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) cmd=5(F_SETFL)
294490 21:47:47.812351918 0 sshd (28766) < fcntl res=0(<f>/dev/null)
294554 21:47:47.813383844 0 sshd (28767) > write fd=3(<4t>33.33.33.33:49802->22.22.22.22:ssh) size=976
294555 21:47:47.813395154 0 sshd (28767) < write res=976 data=........zt.....L.....}[email protected],ecdh-sha2-nistp256,ecdh-s
294691 21:47:48.039025654 0 sshd (28767) > read fd=3(<4t>221.229.172.117:49802->45.55.71.190:ssh) size=8192

Weitere Untersuchungen ergaben außerdem, dass die betrügerische IP-Adresse "+ 33.33.33.33 +" zu einer Maschine in China gehörte. Das ist etwas, worüber man sich Sorgen machen muss! Dies ist nur ein Beispiel dafür, wie Sie Sysdig verwenden können, um den Datenverkehr auf Ihrem Server im Auge zu behalten.

Schauen wir uns einige zusätzliche Skripte an, um den Ereignisstrom zu analysieren.

Schritt 5 - Verwenden von Sysdig-Meißeln zur Systemüberwachung und -analyse

Im Sysdig-Sprachgebrauch sind chisels Lua-Skripte, mit denen Sie den Sysdig-Ereignisstrom analysieren können, um nützliche Aktionen auszuführen. Es gibt fast 50 Skripte, die mit jeder Sysdig-Installation geliefert werden. Mit diesem Befehl können Sie eine Liste der verfügbaren Meißel auf Ihrem System anzeigen:

sysdig -cl

Einige der interessanteren Meißel sind:

  • * netstat *: Listet (und optional filtert) Netzwerkverbindungen auf.

  • * shellshock_detect *: Gibt shellshock Angriffe aus

  • * spy_users *: Interaktive Benutzeraktivität anzeigen.

  • * listloginshells *: Listet die Login-Shell-IDs auf.

  • * spy_ip *: Zeigt die mit der angegebenen IP-Adresse ausgetauschten Daten an.

  • * spy_port *: Zeigt die Daten an, die mit der angegebenen IP-Portnummer ausgetauscht wurden.

  • * spy_file *: Alle Lese- und Schreibvorgänge aller Prozesse auf alle Dateien ausgeben. Optional können Sie den Namen einer Datei angeben, um nur Lese- oder Schreibvorgänge in dieser Datei abzufangen.

  • * httptop *: Zeigt die häufigsten HTTP-Anforderungen an

Für eine detailliertere Beschreibung eines Meißels, einschließlich der zugehörigen Argumente, verwenden Sie das Flag "+ -i ", gefolgt vom Namen des Meißels. Geben Sie zum Beispiel Folgendes ein, um weitere Informationen zum Meißel ` netstat +` anzuzeigen:

sysdig -i netstat

Jetzt, da Sie alles wissen, was Sie über die Verwendung des "+ netstat" -Meißels wissen müssen, tippen Sie auf seine Leistungsfähigkeit, um Ihr System zu überwachen, indem Sie Folgendes ausführen:

sudo sysdig -c netstat

Die Ausgabe sollte ungefähr so ​​aussehen:

OutputProto Server Address           Client Address           State          TID/PID/Program Name
tcp   22.22.22.22:22           11.11.11.11:60422        ESTABLISHED    15567/15567/sshd
tcp   0.0.0.0:22               0.0.0.0:*                LISTEN         1613/1613/sshd

Wenn Sie in der Spalte * Client Address * * ESTABLISHED * SSH-Verbindungen von einer anderen IP-Adresse als Ihrer sehen, sollte dies eine rote Fahne sein und Sie sollten tiefer gehen.

Ein weitaus interessanterer Meißel ist + spy_users +, mit dem Sie die interaktiven Benutzeraktivitäten auf dem System anzeigen können.

Beenden Sie diesen Befehl:

sudo sysdig -c spy_users

Öffnen Sie dann ein zweites Terminal und stellen Sie eine Verbindung zu Ihrem Server her. Führen Sie einige Befehle in diesem zweiten Terminal aus und kehren Sie dann mit + sysdig + zu Ihrem Terminal zurück. Die Befehle, die Sie im ersten Terminal eingegeben haben, werden auf dem Terminal wiedergegeben, auf dem Sie den Befehl + sysdig -c spy_users + ausgeführt haben.

Schauen wir uns als nächstes Csysdig an, ein grafisches Tool.

Schritt 6 - Verwenden von Csysdig zur Systemüberwachung und -analyse

Csysdig ist das andere Dienstprogramm, das mit Sysdig geliefert wird. Es verfügt über eine interaktive Benutzeroberfläche, die dieselben Funktionen bietet, die in der Befehlszeile mit "+ sysdig " verfügbar sind. Es ist wie " top ", " htop " und " strace +", aber mehr funktionsreich.

Wie der Befehl "+ sysdig " kann der Befehl " csysdig " eine Live-Überwachung durchführen und Ereignisse zur späteren Analyse in einer Datei erfassen. Mit ` csysdig +` erhalten Sie eine nützlichere Echtzeitansicht der Systemdaten, die alle zwei Sekunden aktualisiert werden. Geben Sie den folgenden Befehl ein, um ein Beispiel dafür anzuzeigen:

sudo csysdig

Daraufhin wird eine Benutzeroberfläche wie in der folgenden Abbildung geöffnet, in der die von allen Benutzern und Anwendungen auf dem überwachten Host generierten Ereignisdaten angezeigt werden.

Im unteren Bereich der Benutzeroberfläche befinden sich mehrere Schaltflächen, mit denen Sie auf die verschiedenen Aspekte des Programms zugreifen können. Am bemerkenswertesten ist die Schaltfläche * Ansichten *, die mit den von + csysdig + gesammelten Metrikkategorien vergleichbar ist. Es stehen 29 sofort verfügbare Ansichten zur Verfügung, darunter * Prozesse *, * Systemaufrufe *, * Threads *, * Container *, * CPU-Prozesse *, * Seitenfehler *, * Dateien * und * Verzeichnisse *.

Wenn Sie "+ csysdig " ohne Argumente starten, werden Live-Ereignisse in der Ansicht "Prozesse" angezeigt. Wenn Sie auf die Schaltfläche "Ansichten" klicken oder die Taste " F2 " drücken, wird die Liste der verfügbaren Ansichten einschließlich einer Beschreibung der Spalten angezeigt. Sie können eine Beschreibung der Spalten auch anzeigen, indem Sie die Taste " F7 " drücken oder auf die Schaltfläche "Legende" klicken. Eine zusammenfassende Manpage der Anwendung selbst (` csysdig `) kann durch Drücken der Taste ` F1 +` oder Klicken auf die Schaltfläche * Help * aufgerufen werden.

Das folgende Bild zeigt eine Auflistung der * Views * -Oberfläche der Anwendung.

Obwohl Sie "+ csysdig " ohne Optionen und Argumente ausführen können, hat die Syntax des Befehls wie bei " sysdig +" normalerweise die folgende Form:

sudo csysdig [option]...  [filter]

Die am häufigsten verwendete Option ist * -d *, mit der die Verzögerung zwischen Aktualisierungen in Millisekunden geändert wird. Wenn Sie beispielsweise die Ausgabe von "+ csysdig +" alle 10 Sekunden aktualisieren möchten, geben Sie statt der Standardeinstellung von 2 Sekunden Folgendes ein:

sudo csysdig -d 10000

Mit der Option * -E * können Sie die Benutzer- und Gruppeninformationen von Ansichten ausschließen:

sudo csysdig -E

Dies kann den Start von + csysdig + beschleunigen, aber die Geschwindigkeitssteigerung ist in den meisten Situationen vernachlässigbar.

Verwenden Sie die Option * -n *, um "+ csysdig " anzuweisen, die Erfassung nach einer bestimmten Anzahl von Ereignissen zu beenden. Die Anwendung wird beendet, nachdem diese Nummer erreicht wurde. Die Anzahl der erfassten Ereignisse muss fünfstellig sein. Andernfalls wird nicht einmal die Benutzeroberfläche " csysdig +" angezeigt:

sudo csysdig -n 100000

Um eine Trace-Datei zu analysieren, übergeben Sie die Option * -r * wie folgt:

sudo csysdig -r .scap

Sie können dieselben Filter verwenden, die Sie mit "+ sysdig " verwendet haben, um die Ausgabe von " csysdig " einzuschränken. Anstatt beispielsweise die von allen Benutzern im System generierten Ereignisdaten anzuzeigen, können Sie die Ausgabe nach Benutzern filtern, indem Sie " csysdig +" mit dem folgenden Befehl starten, der die nur vom Root-Benutzer generierten Ereignisdaten anzeigt:

sudo csysdig user.name=root

Die Ausgabe sollte der in der folgenden Abbildung gezeigten ähnlich sein, obwohl die Ausgabe die Ausführung auf Ihrem Server widerspiegelt:

image: https: //assets.digitalocean.com/articles/sysdig_ubuntu_1604/CFsMTrH.jpg [Csysdig-Daten von root generiert]

Um die Ausgabe einer ausführbaren Datei anzuzeigen, die ein Ereignis generiert, übergeben Sie dem Filter den Namen der Binärdatei ohne den Pfad. Das folgende Beispiel zeigt alle Ereignisse, die mit dem Befehl + nano + generiert wurden. Mit anderen Worten, es werden alle geöffneten Dateien angezeigt, in denen der Texteditor "+ nano +" lautet:

sudo csysdig proc.name=nano

Es sind mehrere Dutzend Filter verfügbar, die Sie mit dem folgenden Befehl anzeigen können:

sudo csysdig -l

Sie werden feststellen, dass dies dieselbe Option war, die Sie zum Anzeigen der mit dem Befehl "+ sysdig " verfügbaren Filter verwendet haben. Also sind " sysdig " und " csysdig " ungefähr gleich. Der Hauptunterschied besteht darin, dass " csysdig " mit einer mausfreundlichen interaktiven Benutzeroberfläche geliefert wird. Um " csysdig " jederzeit zu beenden, drücken Sie die Taste " Q +" auf Ihrer Tastatur.

Fazit

Sysdig hilft Ihnen bei der Überwachung und Fehlerbehebung Ihres Servers. Sie erhalten einen umfassenden Einblick in alle Systemaktivitäten auf einem überwachten Host, einschließlich der von Anwendungscontainern generierten. Während dieses Lernprogramm Container nicht speziell behandelte, unterscheidet sich Sysdig von ähnlichen Anwendungen durch die Möglichkeit, die von Containern generierte Systemaktivität zu überwachen. Weitere Informationen finden Sie auf der home page des Projekts.

Die Meißel von Sysdig sind eine leistungsstarke Erweiterung der Kernfunktionalität von Sysdig. Sie sind in Lua geschrieben, sodass Sie sie jederzeit anpassen oder von Grund auf neu schreiben können. Weitere Informationen zum Herstellen von Meißeln finden Sie auf der http://www.sysdig.org/wiki/writing-a-sysdig-chisel ,-a-tutorial[official chisel page] des Projekts.