Comment surveiller votre système Ubuntu 16.04 avec Sysdig

introduction

Sysdig est une application complète de suivi, de capture et d’analyse de l’activité du système open-source. Il comporte un puissant langage de filtrage avec une sortie personnalisable, ainsi que des fonctionnalités de base pouvant être étendues avec des scripts Lua appelés chisels.

L’application fonctionne en exploitant le noyau, ce qui lui permet de voir tous les appels système et toutes les informations transitant par le noyau. Cela en fait également un excellent outil pour surveiller et analyser l’activité du système et les événements générés par les conteneurs d’applications exécutés sur un système.

L’application principale Sysdig surveille le serveur sur lequel elle est installée. Cependant, la société à l’origine du projet propose une version hébergée appelée Sysdig Cloud qui peut surveiller un nombre illimité de serveurs à distance.

L’application autonome est disponible sur la plupart des distributions Linux, mais elle est également disponible, avec des fonctionnalités plus limitées, sous Windows et macOS. Outre l’outil de ligne de commande + sysdig +, Sysdig est également livré avec une interface utilisateur interactive appelée + csysdig + avec des options similaires.

Dans ce didacticiel, vous allez installer et utiliser Sysdig pour surveiller un serveur Ubuntu 16.04. Vous allez diffuser des événements en direct, les enregistrer dans des fichiers, filtrer les résultats et explorer l’interface utilisateur interactive + csysdig +.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

Étape 1 - Installation de Sysdig à l’aide du script officiel

Il existe un paquet Sysdig dans le référentiel Ubuntu, mais c’est généralement une révision ou deux derrière la version actuelle. Au moment de la publication, par exemple, l’installation de Sysdig à l’aide du gestionnaire de paquets d’Ubuntu vous procurera Sysdig 0.8.0. Toutefois, vous pouvez l’installer en utilisant un script officiel de la page de développement du projet, qui est la méthode d’installation recommandée. C’est la méthode que nous allons utiliser.

Mais tout d’abord, mettez à jour la base de données de paquets pour vous assurer de disposer de la liste la plus récente des paquets disponibles:

sudo apt-get update

Téléchargez maintenant le script d’installation de Sysdig avec + curl + à l’aide de la commande suivante:

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

Cela télécharge le script d’installation dans le fichier + install-sysdig + dans le dossier actuel. Vous devrez exécuter ce script avec des privilèges élevés et il est dangereux d’exécuter des scripts que vous téléchargez à partir d’Internet. Avant d’exécuter le script, vérifiez son contenu en l’ouvrant dans un éditeur de texte ou en utilisant la commande + less + pour afficher le contenu à l’écran:

less ./install-sysdig

Une fois que vous êtes familiarisé avec les commandes que le script va exécuter, exécutez-le avec la commande suivante:

cat ./install-sysdig | sudo bash

La commande installera toutes les dépendances, y compris les en-têtes et les modules du noyau. La sortie de l’installation sera semblable à celle-ci:

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) ...

Maintenant que Sysdig est installé, voyons comment l’utiliser.

Étape 2 - Surveillance de votre système en temps réel

Dans cette section, vous utiliserez la commande + sysdig + pour examiner certains événements sur votre serveur Ubuntu 16.04. La commande + sysdig + nécessite l’exécution des privilèges root, ainsi que de nombreuses options et filtres. Le moyen le plus simple d’exécuter la commande est sans aucun argument. Cela vous donnera une vue en temps réel des données système actualisées toutes les deux secondes:

sudo sysdig

Mais comme vous le verrez dès que vous exécuterez la commande, il peut s’avérer difficile d’analyser les données en cours d’écriture à l’écran, car elles sont diffusées en continu et de nombreux événements se produisent sur votre serveur. Arrêtez + sysdig + en appuyant sur + CTRL + C +.

Avant de relancer la commande avec certaines options, familiarisons-nous avec le résultat en consultant un exemple de résultat de la commande:

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=..

Les colonnes de sortie sont:

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

Voici ce que chaque colonne signifie:

  • * evt.num * est le numéro d’événement incrémentiel.

  • * evt.outputtime * est l’horodatage de l’événement, que vous pouvez personnaliser.

  • * evt.cpu * est le numéro de la CPU où l’événement a été capturé. Dans la sortie ci-dessus, le fichier * evt.cpu * est * 0 *, qui est le premier processeur du serveur.

  • * proc.name * est le nom du processus qui a généré l’événement.

  • * thread.tid * est le TID qui a généré l’événement, ce qui correspond au PID pour les processus à un seul thread.

  • * evt.dir * est la direction de l’événement. Vous verrez > * pour les événements entrants et * < pour les événements finaux.

  • * evt.type * est le nom de l’événement, par exemple. «Ouvrir», «lire», «écrire», etc.

  • * evt.info * est la liste des arguments d’événement. En cas d’appels système, ceux-ci ont tendance à correspondre aux arguments de l’appel système, mais ce n’est pas toujours le cas: certains arguments d’appel système sont exclus pour des raisons de simplicité ou de performances.

Exécuter + sysdig + comme dans la commande précédente n’a pratiquement aucune valeur, car il y a tellement d’informations en streaming. Mais vous pouvez appliquer des options et des filtres à la commande en utilisant cette syntaxe:

sudo sysdig [option] [filter]

Vous pouvez voir la liste complète des filtres disponibles en utilisant:

sysdig -l

Il existe une longue liste de filtres couvrant plusieurs classes ou catégories. Voici quelques cours:

  • * fd *: Filtre sur les informations du descripteur de fichier (FD), telles que les numéros FD et les noms FD.

  • * process *: Filtre sur les informations de processus, telles que l’id et le nom du processus qui a généré un événement.

  • * evt *: Filtre sur les informations relatives à l’événement, telles que le numéro et l’heure de l’événement.

  • * utilisateur *: Filtrez les informations sur l’utilisateur, telles que son identifiant, son nom d’utilisateur, son répertoire personnel ou son shell de connexion.

  • * groupe *: Filtre sur les informations du groupe, comme l’identifiant et le nom du groupe.

  • * syslog *: Filtre sur les informations syslog, telles que la facilité et la gravité.

  • * fdlist *: Filtre sur le descripteur de fichier pour les événements d’interrogation.

Comme il n’est pas pratique de couvrir tous les filtres de ce didacticiel, essayons-en quelques-uns, en commençant par le filtre * syslog.severity.str * de la classe * syslog *, qui vous permet d’afficher les messages envoyés à syslog à un niveau de gravité spécifique. Cette commande affiche les messages envoyés à syslog au niveau "information":

sudo sysdig syslog.severity.str=info

Tuez la commande en appuyant sur + CTRL + C +.

La sortie, qui devrait être assez facile à interpréter, devrait ressembler à ceci:

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

Vous pouvez également filtrer sur un seul processus. Par exemple, pour rechercher des événements à partir de + nano +, exécutez cette commande:

sudo sysdig proc.name=nano

Depuis cette commande filers sur + nano +, vous devrez utiliser l’éditeur de texte + nano + pour ouvrir un fichier et voir toutes les sorties. Ouvrez un autre éditeur de terminal, connectez-vous à votre serveur et utilisez + nano + pour ouvrir un fichier texte. Écrivez quelques caractères et sauvegardez le fichier. Revenez ensuite à votre terminal d’origine.

Vous verrez alors des résultats similaires à ceux-ci:

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

Encore une fois, supprimez la commande en tapant + CTRL + C +.

Obtenir une vue en temps réel des événements système en utilisant + sysdig + n’est pas toujours la meilleure méthode pour l’utiliser. Heureusement, il existe un autre moyen: enregistrer les événements dans un fichier pour l’analyser ultérieurement. Voyons comment.

Étape 3 - Capture de l’activité du système dans un fichier à l’aide de Sysdig

La capture d’événements système dans un fichier à l’aide de + sysdig + vous permet d’analyser ces événements ultérieurement. Pour sauvegarder les événements système dans un fichier, passez + sysdig + l’option * -w * et spécifiez un nom de fichier cible, comme ceci:

sudo sysdig -w .scap

Sysdig conservera les événements générés dans le fichier cible jusqu’à ce que vous appuyiez sur les touches + CTRL + C +. Avec le temps, ce fichier peut devenir assez volumineux. Avec l’option * -n *, vous pouvez toutefois spécifier le nombre d’événements que vous souhaitez que Sysdig capture. Une fois que le nombre cible d’événements a été capturé, il se ferme. Par exemple, pour enregistrer 300 événements dans un fichier, tapez:

sudo sysdig -n 300 -w .scap

Bien que vous puissiez utiliser Sysdig pour capturer un nombre spécifié d’événements dans un fichier, une meilleure approche consisterait à utiliser l’option * -C * pour décomposer une capture en fichiers plus petits d’une taille spécifique. Et pour ne pas surcharger le stockage local, vous pouvez demander à Sysdig de ne conserver que quelques-uns des fichiers enregistrés. En d’autres termes, Sysdig prend en charge la capture d’événements dans des journaux avec rotation de fichier, en une seule commande.

Par exemple, pour enregistrer des événements en continu dans des fichiers dont la taille ne dépasse pas 1 Mo et ne conserver que les cinq derniers fichiers (c’est ce que fait l’option * -W *), exécutez la commande suivante:

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

Répertoriez les fichiers en utilisant + ls -l sysdig-trace * + et vous verrez une sortie semblable à celle-ci, avec cinq fichiers journaux:

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

Comme pour la capture en temps réel, vous pouvez appliquer des filtres aux événements enregistrés. Par exemple, pour enregistrer 200 événements générés par le processus + nano +, tapez cette commande:

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

Ensuite, dans un autre terminal connecté à votre serveur, ouvrez un fichier avec + nano + et générez des événements en tapant du texte ou en sauvegardant le fichier. Les événements seront capturés sous la forme + sysdig-trace-nano.scap + jusqu’à ce que + sysdig + enregistre 200 événements.

Comment feriez-vous pour capturer tous les événements d’écriture générés sur votre serveur? Vous appliqueriez le filtre comme ceci:

sudo sysdig -w .scap evt.type=write

Appuyez sur + CTRL + C + après quelques instants pour quitter.

Vous pouvez faire beaucoup plus lorsque vous enregistrez l’activité du système dans un fichier en utilisant + sysdig +, mais ces exemples auraient dû vous donner une assez bonne idée de la marche à suivre. Voyons comment analyser ces fichiers.

Étape 4 - Lecture et analyse des données d’événement avec Sysdig

Lire des données capturées dans un fichier avec Sysdig est aussi simple que de passer le commutateur * -r * à la commande + sysdig +, comme ceci:

sudo sysdig -r .scap

Cela affichera tout le contenu du fichier à l’écran, ce qui n’est pas vraiment la meilleure approche, surtout si le fichier est volumineux. Heureusement, vous pouvez appliquer les mêmes filtres lors de la lecture du fichier que vous avez appliqué lors de son écriture.

Par exemple, pour lire le fichier de trace + sysdig-trace-nano.scap + que vous avez créé, mais ne regardez qu’un type d’événement spécifique, comme les événements d’écriture, tapez cette commande:

sysdig -r .scap evt.type=write

La sortie devrait être semblable à:

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

Examinons le contenu du fichier que vous avez enregistré dans la section précédente: le fichier + sysdig-write-events.scap +. Nous savons que tous les événements sauvegardés dans le fichier sont des événements en écriture. Voyons donc le contenu:

sudo sysdig -r  evt.type=write

Ceci est une sortie partielle. Vous verrez quelque chose comme ceci s’il y avait une activité SSH sur le serveur lorsque vous avez capturé les événements:

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

Notez que toutes les lignes de la sortie précédente contiennent * 11.11.11.11: 51282→ 22.22.22.22:ssh*. Ce sont des événements provenant de l’adresse IP externe du client, + 11.11.11.11 + à l’adresse IP du serveur, + 22.22.22.22 +. Ces événements se sont produits via une connexion SSH au serveur, ils sont donc attendus. Mais existe-t-il d’autres événements d’écriture SSH qui ne proviennent pas de cette adresse IP de client connue? C’est facile à découvrir.

Il existe de nombreux opérateurs de comparaison que vous pouvez utiliser avec Sysdig. Le premier que vous avez vu est * = . Les autres sont *! = *, *> *, *> = *, * < Et * ⇐ *. Dans la commande suivante, * fd.rip * filtre sur l’adresse IP distante. Nous allons utiliser l’opérateur de comparaison *! = * Pour rechercher des événements provenant d’adresses IP autres que + 11.11.11.11 +:

sysdig -r  fd.rip!=

Une sortie partielle, indiquant qu’il y a eu des événements d’écriture provenant d’adresses IP autres que l’adresse IP du client, s’affiche dans la sortie suivante:

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

Une enquête plus approfondie a également montré que l’adresse IP non autorisée + 33.33.33.33 + appartenait à une machine en Chine. C’est quelque chose d’inquiétant! C’est juste un exemple de la façon dont vous pouvez utiliser Sysdig pour surveiller de près le trafic qui frappe votre serveur.

Voyons comment utiliser quelques scripts supplémentaires pour analyser le flux d’événements.

Étape 5 - Utilisation des burins Sysdig pour la surveillance et l’analyse du système

Dans le langage Sysdig, chisels sont des scripts Lua que vous pouvez utiliser pour analyser le flux d’événements Sysdig afin d’effectuer des actions utiles. Près de 50 scripts sont fournis avec chaque installation Sysdig et vous pouvez afficher une liste des burins disponibles sur votre système à l’aide de cette commande:

sysdig -cl

Certains des burins les plus intéressants incluent:

  • * netstat *: Liste (et éventuellement filtre) les connexions réseau.

  • * shellshock_detect *: Imprimer shellshock attaques

  • * spy_users *: Affiche l’activité interactive des utilisateurs.

  • * listloginshells *: Répertorie les ID de shell de connexion.

  • * spy_ip *: Affiche les données échangées avec l’adresse IP donnée.

  • * spy_port *: Affiche les données échangées en utilisant le numéro de port IP indiqué.

  • * spy_file *: Écho toute lecture ou écriture faite par n’importe quel processus à tous les fichiers. Vous pouvez éventuellement fournir le nom d’un fichier pour intercepter uniquement les lectures ou les écritures dans ce fichier.

  • * httptop *: affiche les principales requêtes HTTP

Pour une description plus détaillée d’un ciseau, y compris des arguments associés, utilisez l’indicateur + -i +, suivi du nom du ciseau. Ainsi, par exemple, pour afficher plus d’informations sur le ciseau + netstat +, tapez:

sysdig -i netstat

Maintenant que vous savez tout ce que vous devez savoir sur l’utilisation du burin + netstat, mettez-le au pouvoir pour surveiller votre système en exécutant:

sudo sysdig -c netstat

La sortie devrait ressembler à ceci:

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

Si vous voyez des connexions * ESTABLISHED * SSH à partir d’une adresse IP autre que la vôtre dans la colonne * Adresse du client *, cela devrait être un drapeau rouge et vous devriez approfondir l’analyse.

+ Spy_users + est un outil beaucoup plus intéressant, qui vous permet de visualiser l’activité interactive des utilisateurs sur le système.

Quittez cette commande:

sudo sysdig -c spy_users

Ensuite, ouvrez un deuxième terminal et connectez-vous à votre serveur. Exécutez des commandes dans ce second terminal, puis revenez sur votre terminal en exécutant + sysdig +. Les commandes que vous avez tapées dans le premier terminal seront répercutées sur le terminal sur lequel vous avez exécuté la commande + sysdig -c spy_users +.

Explorons ensuite Csysdig, un outil graphique.

Étape 6 - Utilisation de Csysdig pour la surveillance et l’analyse du système

Csysdig est l’autre utilitaire fourni avec Sysdig. Il possède une interface utilisateur interactive qui offre les mêmes fonctionnalités que celles disponibles sur la ligne de commande avec + sysdig +. C’est comme + top +, + htop + et + strace +, mais plus riche en fonctionnalités.

Comme la commande + sysdig +, la commande + csysdig + peut effectuer une surveillance en direct et peut capturer des événements dans un fichier pour une analyse ultérieure. Mais + csysdig + vous donne une vue plus utile en temps réel des données système actualisées toutes les deux secondes. Pour voir un exemple, tapez la commande suivante:

sudo csysdig

Cela ouvrira une interface semblable à celle de la figure suivante, qui affiche les données d’événement générées par tous les utilisateurs et toutes les applications de l’hôte surveillé.

image: https: //assets.digitalocean.com/articles/sysdig_ubuntu_1604/LEhCwvI.jpg [Interface principale de Csysdig]

Au bas de l’interface se trouvent plusieurs boutons permettant d’accéder aux différents aspects du programme. Le plus notable est le bouton * Vues *, qui s’apparente à des catégories de métriques collectées par + csysdig +. 29 vues sont disponibles telles que * Processus *, * Appels système *, * Threads *, * Conteneurs *, * Processus *, * Défauts de page *, * Fichiers * et * Répertoires *.

Lorsque vous démarrez + csysdig + sans arguments, vous verrez les événements en direct à partir de la vue * Processus *. En cliquant sur le bouton * Vues * ou en appuyant sur la touche + F2 +, vous verrez la liste des vues disponibles, y compris une description des colonnes. Vous pouvez également afficher une description des colonnes en appuyant sur la touche + F7 + ou en cliquant sur le bouton * Légende *. Et une page de manuel récapitulative de l’application elle-même (+ csysdig +) est accessible en appuyant sur la touche + F1 + ou en cliquant sur le bouton * Aide *.

L’image suivante montre une liste de l’interface * Views * de l’application.

image: https: //assets.digitalocean.com/articles/sysdig_ubuntu_1604/R7oHHHT.jpg [fenêtre de vues Csysdig]

Bien que vous puissiez exécuter + csysdig + sans options ni arguments, la syntaxe de la commande, comme avec + sysdig + s, prend généralement la forme suivante:

sudo csysdig [option]...  [filter]

L’option la plus courante est * -d *, utilisée pour modifier le délai entre les mises à jour en millisecondes. Par exemple, pour afficher la sortie + csysdig + mise à jour toutes les 10 secondes, au lieu de la valeur par défaut de 2 secondes, tapez:

sudo csysdig -d 10000

Vous pouvez exclure les informations d’utilisateur et de groupe des vues avec l’option * -E *:

sudo csysdig -E

Cela peut faire en sorte que + csysdig + démarre plus rapidement, mais le gain de vitesse est négligeable dans la plupart des situations.

Pour ordonner à + ​​csysdig + d’arrêter la capture après un certain nombre d’événements, utilisez l’option * -n *. L’application se fermera une fois ce nombre atteint. Le nombre d’événements capturés doit être dans les cinq chiffres; sinon, vous ne verrez même pas l’interface utilisateur + csysdig +:

sudo csysdig -n 100000

Pour analyser un fichier de trace, passez + csysdig + l’option * -r *, comme suit:

sudo csysdig -r .scap

Vous pouvez utiliser les mêmes filtres que ceux utilisés avec + sysdig + pour restreindre la sortie de + csysdig +. Ainsi, par exemple, plutôt que d’afficher les données d’événement générées par tous les utilisateurs du système, vous pouvez filtrer la sortie par les utilisateurs en lançant + csysdig + avec la commande suivante, qui affichera les données d’événement générées uniquement par l’utilisateur root:

sudo csysdig user.name=root

La sortie devrait être semblable à celle montrée dans l’image suivante, même si elle reflétera ce qui est en cours d’exécution sur votre serveur:

image: https: //assets.digitalocean.com/articles/sysdig_ubuntu_1604/CFsMTrH.jpg [données Csysdig générées par la racine]

Pour afficher la sortie d’un exécutable générant un événement, transmettez au filtre le nom du fichier binaire sans le chemin. L’exemple suivant montre tous les événements générés par la commande + nano +. En d’autres termes, tous les fichiers ouverts où l’éditeur de texte est + nano +:

sudo csysdig proc.name=nano

Il existe plusieurs dizaines de filtres disponibles, que vous pouvez afficher à l’aide de la commande suivante:

sudo csysdig -l

Vous remarquerez que c’est la même option que vous avez utilisée pour afficher les filtres disponibles avec la commande + sysdig +. Donc + sysdig + et + csysdig + sont à peu près les mêmes. La principale différence est que + csysdig + est livré avec une interface utilisateur interactive conviviale pour la souris. Pour quitter + csysdig + à tout moment, appuyez sur la touche + Q + de votre clavier.

Conclusion

Sysdig vous aide à surveiller et à dépanner votre serveur. Cela vous donnera un aperçu complet de toutes les activités du système sur un hôte surveillé, y compris celles générées par les conteneurs d’applications. Bien que ce tutoriel ne couvre pas spécifiquement les conteneurs, la capacité à surveiller l’activité du système générée par les conteneurs est ce qui distingue Sysdig des applications similaires. Plus d’informations sont disponibles sur la page home du projet.

Les burins de Sysdig sont une extension puissante de la fonctionnalité principale de Sysdig. Ils sont écrits en Lua, vous pouvez donc toujours les personnaliser ou en écrire un à partir de rien. Pour en savoir plus sur la fabrication des ciseaux, visitez la page du projet official.