- Si l’on commence à installer les outils de diagnostic après l’apparition d’un incident de performance, le temps perdu à préparer l’environnement retarde la reprise ; il faut donc intégrer à l’avance des outils de gestion de crise dans l’image des serveurs Linux
- La liste recommandée comprend procps, util-linux, sysstat, iproute2, tcpdump, perf, bcc/bpftrace, trace-cmd, ethtool, etc. ; c’est l’ensemble minimal de paquets pour vérifier immédiatement le CPU, le disque, le réseau et le traçage du noyau
- bcc et bpftrace se recoupent sur de nombreux outils, mais bcc offre davantage d’options CLI tandis que bpftrace est plus simple à modifier sur le terrain ; à l’exécution, ils produisent le même bytecode BPF
- Installer pendant une panne peut faire perdre des dizaines de minutes à cause de variables comme un SSH lent, une configuration apt cassée, un dépôt bloqué, un pare-feu, un système de fichiers immuable ou des erreurs de permissions
- Le coût porte surtout sur l’espace disque et le temps de déploiement des images, mais la plupart des paquets recommandés sont petits ; les inclure par défaut dans les distributions Linux d’entreprise permettrait de démarrer plus vite la réponse aux incidents de performance
Le minimum à avoir avant un incident
- Lorsqu’un incident de performance survient, le temps passé à installer les outils nécessaires au diagnostic est déjà une perte ; il est donc plus sûr de préinstaller par défaut des outils de gestion de crise sur les serveurs Linux
- La liste s’appuie sur le tableau “Linux Crisis Tools” de Systems Performance 2nd Edition
- Voici les outils recommandés, sur la base des paquets Ubuntu
procps:ps,vmstat,uptime,top- Vérification des statistiques de base
util-linux:dmesg,lsblk,lscpu- Vérification des logs système et des informations sur les périphériques
sysstat:iostat,mpstat,pidstat,sar- Vérification des statistiques des périphériques et du système
iproute2:ip,ss,nstat,tc- Outils réseau privilégiés
numactl:numastat- Vérification des statistiques NUMA
tcpdump:tcpdump- Sniffing réseau
linux-tools-common,linux-tools-$(uname -r):perf,turbostat- Vérification du profiler et des statistiques PMU
bpfcc-toolsou bcc :opensnoop,execsnoop,runqlat,softirqs,hardirqs,ext4slower,ext4dist,biotop,biosnoop,biolatency,tcptop,tcplife,trace,argdist,funccount,profile, etc.- Outils eBPF préconstruits
bpftrace:bpftrace, versions de base deopensnoop,execsnoop,runqlat,biosnoop, etc.- Scripting eBPF
trace-cmd:trace-cmd- CLI Ftrace
nicstat:nicstat- Statistiques des interfaces réseau
ethtool:ethtool- Informations sur les interfaces réseau
tiptop:tiptop- PMU/PMC top
cpuid:cpuid- Détails sur le CPU
msr-tools:rdmsr,wrmsr- Analyse approfondie du CPU
Comment considérer bcc et bpftrace ensemble
- bcc et bpftrace se recoupent sur de nombreux outils, mais ils ont chacun leurs points forts
- Les outils bcc offrent plus de fonctionnalités, comme des options CLI, et se prêtent mieux à un usage d’outil abouti
- Les outils bpftrace peuvent être modifiés immédiatement sur place, ce qui facilite les vérifications adaptées à la situation
- Cela ne veut pas dire que l’un est plus rapide que l’autre
- Les deux produisent le même bytecode BPF
- En exécution, ils sont tout aussi rapides
- bcc évolue vers une migration des outils Python vers du C libbpf
- Avec utilisation de CO-RE et de BTF
- Les paquets n’ont pas encore été retravaillés
- À terme,
bpfcc-toolsdevrait être remplacé par un paquet plus léger,libbpf-tools, ne contenant que les binaires des outils
Des outils supplémentaires selon le type de serveur
- La liste ci-dessus n’est qu’une liste minimale
- Si le serveur dispose d’accélérateurs, il faut aussi ajouter les outils permettant d’analyser ce matériel
- Serveur avec GPU Intel :
intel-gpu-tools - Serveur NVIDIA :
nvidia-smi
- Serveur avec GPU Intel :
- Des outils de débogage comme
gdbpeuvent aussi être préinstallés si l’on veut les utiliser immédiatement en situation de crise - Les outils d’analyse essentiels changent rarement ; cette liste peut donc ne nécessiter une mise à jour qu’une fois tous les quelques ans
Le coût réel d’une installation par défaut
- Le premier inconvénient visible lorsqu’on ajoute des paquets est l’utilisation disque
- Sur des instances cloud, quelques Mo supplémentaires dans l’image serveur de base peuvent augmenter le temps de déploiement de quelques secondes ou d’une fraction de seconde
- La plupart des paquets recommandés sont petits, et bcc devrait encore rétrécir ; le coût en espace et en temps ne devrait donc pas être important
- Les debuginfo représentaient environ 1 Go au total, ce qui a réellement soulevé des inquiétudes sur leur inclusion par défaut
Comment l’installation peut se bloquer pendant un incident
- Si l’on tente d’installer les outils après la panne, on peut finir par consacrer plus de temps à résoudre les problèmes d’installation qu’au diagnostic lui-même
- Exemple de déroulé
- 16:00 : le site de l’entreprise tombe ou devient trop lent pour être utilisable
- 16:01 : le tableau de bord de monitoring montre qu’un groupe de serveurs backend est anormal, avec suspicion d’I/O disque élevées
- 16:02 : tentative de connexion en SSH au serveur, mais la connexion est très lente
- 16:03 : tentative d’exécution de
iostat -xz 1, maisiostatest absent et un message suggère d’installersysstat - 16:07 : l’installation du paquet échoue car le dépôt ne peut pas être résolu, révélant un problème de configuration dans
/etc/apt - 16:10 : il faut lancer
apt-get updateavec la configuration corrigée, mais c’est très lent - 16:13 : un délai d’attente est dépassé, ce qui fait soupçonner un problème de connectivité au dépôt ou de performance
- 16:17 : l’équipe sécurité réseau confirme qu’un trafic inattendu a conduit au blocage des requêtes apt sortantes HTTP/HTTPS/FTP
- 16:20 : après désactivation du pare-feu,
apt-get updatefonctionne, mais l’installation échoue avec une erreur de permissions - 16:24 : l’équipe sécurité plateforme explique qu’il s’agit d’un système immuable, avec écriture bloquée sur certaines parties du système de fichiers, notamment la zone des binaires exécutables
- 16:27 : l’équipe SRE annonce un incident majeur ; la direction demande des mises à jour d’état et une ETA de rétablissement, mais le diagnostic a à peine commencé
- 16:30 : tentative de remplacer grossièrement
iostataveccat /proc/diskstats, mais il faut lire la documentation Linux et cela ne fait que confirmer que le disque est occupé - 16:55 : une nouvelle image serveur avec système de fichiers inscriptible est lancée et permet d’installer
sysstat, mais le redémarrage du serveur a simplement remis le site en ligne sans corriger la cause racine - 00:50 : l’exemple se termine par un site compromis à cause de la désactivation du pare-feu et de la sécurité du système de fichiers
- L’incident de 00:50 n’est pas une expérience réelle, mais le reste de l’exemple est basé sur des faits vécus
- Dans un ancien poste, vers le cap des 15 minutes, la “traffic team” lançait parfois des mesures de bascule de région cloud ; au moment où
iostatfinissait par être installé, le système concerné pouvait déjà être redevenu inactif
Pourquoi les inclure dans l’image de base
- Ce scénario montre à quel point il est fragile de vouloir installer les outils plus tard, au beau milieu d’un incident de production
- Certaines entreprises utilisent déjà des images serveur personnalisées créées par l’équipe OS avec les outils nécessaires inclus
- Beaucoup de sites continuent toutefois d’exploiter une version Linux de base telle quelle, et ne prennent conscience du besoin qu’après avoir subi un incident
- Si les distributions Linux d’entreprise incluaient par défaut ces outils de gestion de crise, les entreprises de toutes tailles pourraient commencer le diagnostic immédiatement en cas d’incident de performance
1 commentaires
Avis sur Hacker News
Cette liste est utile. Quand le serveur lui-même est dans un état bancal, par exemple si l’analyse des dépôts
aptéchoue, le cloud est souvent bien adapté.Plutôt que de s’acharner à le réparer, on peut tuer la machine ou la retirer du pool et en lancer une nouvelle ; la nouvelle machine et l’application redémarrent proprement, et l’incident est terminé. On peut ensuite examiner la machine problématique à part, hors du chemin critique.
On devient l’équivalent logiciel, dans le monde physique, de « ceux qui ne font que remplacer des pièces ».
Tous les serveurs ne sont pas conteneurisés, mais beaucoup le sont, et cela apporte ses propres difficultés.
Les outils de débogage présents dans les images Docker sont souvent signalés par les scanners de sécurité automatiques comme des « outils inutiles susceptibles d’aider un attaquant à observer ou modifier le comportement du système ». Pour
gdb, l’inquiétude est légitime, mais pas toujours.Du coup, certains outils sont placés sur un volume séparé, si possible sous forme de binaires statiques, ou bien compilés et installés avec le chemin de montage comme préfixe d’installation. Quand un débogage est nécessaire, on demande à l’équipe d’exploitation de le monter temporairement en lecture seule.
Par ailleurs, lorsqu’un outil de debug exige l’activation d’une fonctionnalité spécifique du noyau, cela suscite souvent des questions et des inquiétudes sur son impact sur les autres conteneurs du même hôte.
J’ai du mal à voir un scénario où cette politique a du sens, hormis « l’organisation utilise mal son scanner de sécurité ».
Pour utiliser un débogueur, il faut souvent le droit
SYS_PTRACE, l’utilisateur 0 et beaucoup de flags comme--privileged; lancer un second conteneur est donc généralement préférable.Avec cette méthode, il n’est pas nécessaire de redémarrer le conteneur de production, ce qui réduit aussi le risque de perdre les éléments permettant de reproduire le problème.
En revanche, il n’est pas facile de se souvenir de cette procédure en situation d’incident ; il faut donc l’avoir testée à l’avance et l’avoir documentée étape par étape dans un runbook.
À ce sujet, depuis FreeBSD 5.2, donc depuis 2004, tous les systèmes FreeBSD disposent de
/rescue/*.Il s’agit d’un unique binaire lié statiquement regroupant environ 150 outils essentiels, hard-linké sous leurs noms habituels, et d’une taille d’environ 17 Mo.
https://man.freebsd.org/cgi/man.cgi?rescue
https://github.com/freebsd/freebsd-src/blob/main/rescue/resc...
Quand j’étais chez Netflix, Brendan et son équipe ont fait en sorte que des outils de débogage comme
bpftrace,bccet unperffonctionnel soient installés un peu partout.Ce sont des outils qui m’ont sauvé la mise à plusieurs reprises.
J’ai été surpris de ne pas voir
stracedans la liste. C’est généralement l’un des premiers outils que l’on attrape.En particulier, quand un programme renvoie des messages d’erreur inutiles ou erronés,
straceest vraiment précieux.stracepeut convenir en dernier recours, mais en production les alternatives sûres sontperf traceet les outils de traçage BPF.https://www.brendangregg.com/blog/2014-05-11/strace-wow-much...
fuseretlsofsont aussi utiles.https://man7.org/linux/man-pages/man1/fuser.1.html
https://en.m.wikipedia.org/wiki/Lsof
Dans les entretiens pour des postes de type SRE, on aborde toujours ce genre d’outils.
Le cœur du sujet n’est pas de savoir combien de commandes un candidat a mémorisées ; s’il vous fait découvrir un nouvel outil, c’est impressionnant, mais on regarde surtout s’il sait ce qui est possible, quels outils existent et comment les utiliser.
Ce qui compte, c’est d’avoir l’intuition qu’on peut capturer et analyser le trafic réseau, les appels système et les profils d’exécution, et examiner l’état du système d’exploitation comme du matériel.
Si, dans ce genre de situation de crise, il est impossible d’installer des outils, on peut exécuter plusieurs utilitaires avec Docker.
Par exemple, on peut construire un conteneur en une ligne, l’attacher au réseau de l’hôte pour lancer des outils de type
netstat, ou monter/procet utiliser--privileged,--net host,--pid hostpour exécuter des outils système commeiostat,sar,vmstat,mpstatoupidstat.Bien sûr,
yum installest préférable, mais si Docker est disponible et que l’on peut gérer les mappings nécessaires, cela constitue une alternative. Avec une configuration rootless ou Podman, cela ne fonctionnera probablement pas très bien.aptne peut pas télécharger et installer des paquets, mais où Docker peut récupérer un nouveau conteneur ?Peut-être si les bibliothèques d’
aptsont cassées, quelque chose comme ça ?busyboxcontienne davantage de ces outils.Disposer d’un fichier d’environ 1 Mo que l’on peut téléverser sur un serveur et exécuter immédiatement serait très utile.
Tout le monde obtient un accès root ? Moi, quoi que je fasse, je dois ouvrir un ticket d’administrateur système.
Il est utile de retenir les noms des responsables sécurité, des personnes en veste un peu raide qui vous donnent accès au bâtiment, et de prévoir aussi des cartes Starbucks.
Soyez également poli avec le personnel de ménage et retenez leurs noms : votre poste restera propre. Rester tard de temps en temps pour apprendre à connaître ces personnes en vaut la peine.
C’est bien aussi de se faire des amis à la comptabilité. Si vous prenez un café, déjeunez avec eux, parlez d’autre chose que du travail et montrez de l’intérêt, les bonnes personnes vous préviendront quand des licenciements approchent ou quand l’entreprise débloque de l’argent.
Il faut aussi bien traiter l’IT, c’est-à-dire les personnes qui distribuent les ordinateurs portables et gèrent l’e-mail. Vous verrez à quelle vitesse elles retirent les outils de sécurité absurdes de votre machine, et à quel point vous remontez dans la file pour les mises à niveau.
Le plus important, ce sont les administrateurs système. Pas seulement à cause de root, mais parce qu’un bon administrateur système sait coder, sans jamais le dire trop fort. Un bon admin sait dans quels coins sombres se trouvent les cadavres, et s’il s’agit d’un simple placard ou d’un cimetière entier. Si vous apprenez à construire en fonction de leur plateforme, vous gagnerez beaucoup plus de marge de manœuvre. Quand ils vous demandent quelque chose, faites-le.
Ce texte s’adresse aux personnes qui exploitent des applications sur une infrastructure fournie par l’IT. Si vous devez interagir comme dans l’exemple, ce n’est pas un problème technique, mais un échec organisationnel.
Nous avions des lignes de communication très claires et fiables ; les gens n’agissaient pas via le chat, mais par téléphone, ou aujourd’hui via Teams, avec le développement, l’exploitation, la sécurité et la conformité.
En pratique, il y avait au minimum un point de contact dans chaque équipe, et les développeurs faisaient généralement tourner leurs applications sur les ressources fournies par l’équipe d’exploitation. La conformité validait la configuration, et la fiabilité du service relevait du travail de développement. En pratiquant DevOps dans ce sens, beaucoup de problèmes disparaissent.
Je ne vois pas
nmap,netstatninc. Ces outils m’ont aussi sauvé plusieurs fois.Si je ne devais en ajouter qu’un, ce serait
nmap.Les problèmes de connexion réseau n’apparaissent pas toujours clairement dans certaines applications.
screen,tmux,byobu,pv,rsync, et bien sûrvim, sont également nécessaires.