4 votes

Comment puis-je stracer l'ensemble du système ?

strace vous permet de surveiller l'activité d'un programme particulier. Comment puis-je surveiller l'activité de tous les programmes (à l'exception de sshd/bash/strace_itself) ?

Actuellement, j'utilise un hack comme celui-ci :

function ppid() { cat /proc/"$1"/status | grep PPid: | grep -o "[0-9]*"; };
function pidtree() { P=$1; while [ "$P" != "1" ]; do echo $P; P=`ppid $P`; done; echo 1; };
strace -fe execve `( pgrep ''; pidtree $$ ) | sort | uniq -u | sed 's/^/-p /'`

Remarque : cette utilisation peut geler votre système.

Y a-t-il une meilleure façon de procéder ?

2voto

Jim Points 21

La manière la plus simple avec systemtap est quelque chose comme :

stap -e 'probe nd_syscall.* { println(execname(), pid(), " ", pn(), argstr) }'

(@Vi, aucun travail manuel sur les modules du noyau n'est nécessaire ; systemtap s'en charge lui-même. Vous devez cependant disposer de fichiers de développement de modules du noyau).

1voto

Giuseppe R Points 1325

Il n'est pas vraiment possible de "stracer tout le système" à partir de l'espace utilisateur. Comme je l'ai indiqué dans la question précédente que vous avez posée, le meilleur moyen est d'utiliser une infrastructure de traçage en mode noyau telle que kprobes , systemtap 或いは dtrace . Avez-vous examiné l'un d'entre eux ? Y a-t-il une raison pour laquelle aucune d'entre elles ne conviendrait à votre cas d'utilisation ?

La seule façon de tracer de manière vraiment fiable l'ensemble du système depuis l'espace utilisateur serait de commencer votre trace avec la commande init processus... mais je ne suis pas sûr que init o systemd serait très heureux que vous le mettiez en stracing, car il fait beaucoup de choses de très bas niveau qui sont assez fragiles et faciles à casser (et difficile d'injecter des commandes wrapper autour, je pourrais ajouter).

C'est pourquoi les mécanismes de sondage de la plus haute qualité ont un certain type de module de noyau, parce que le noyau "voit tout". Ceci est particulièrement pertinent lorsque vous essayez de surveiller l'activité de périphériques de caractères tels que /dev/console y /dev/tty* Le noyau a un contrôle direct sur les appels à ces périphériques puisqu'ils sont implémentés dans l'espace noyau.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X