Superviser un système : lois continues et détection d'anomalies
Ce que ce chapitre apporte
- Rappeler comment un système d'exploitation gère les processus et la mémoire.
- Interpréter les métriques classiques de supervision et leur mode d'échantillonnage.
- Reconnaître les lois continues usuelles : normale, log-normale, exponentielle, Weibull.
- Vérifier graphiquement et par un test qu'une série suit une loi donnée.
- Détecter des anomalies par z-score, écart interquartile et statistiques robustes.
- Choisir un seuil de vigilance en connaissant son taux de fausses alertes.
Une semaine de mesures relevées chaque minute sur un parc de serveurs : charge processeur, mémoire, trafic réseau, température. Des milliers de lignes, dont l'immense majorité ne dit rien. L'enjeu n'est pas d'en calculer la moyenne, c'est de déclencher la bonne alerte au bon moment. Ce chapitre suit ce trajet : comprendre ce que mesurent ces métriques, reconnaître la loi que suit chacune (les lois y sont continues, là où le chapitre sur le risque les comptait une à une), et poser des seuils qui ne noient pas l'équipe sous les fausses alertes.
Ce que mesure la supervision
Superviser, c'est observer un système en fonctionnement pour décider s'il faut intervenir. Encore faut-il savoir ce que les chiffres décrivent.
Processus et ordonnancement
Le système d'exploitation gère le matériel et arbitre entre les programmes. Un processus est un programme en cours d'exécution, avec sa mémoire propre et son état ; l'ordonnanceur (scheduler) répartit le temps de processeur entre les processus prêts, en leur accordant des tranches de quelques millisecondes.
La charge processeur est la proportion de temps pendant laquelle le processeur n'était pas inactif, sur l'intervalle de mesure. À 100 % il travaille sans interruption : ce n'est pas une panne, c'est un processeur utilisé. Le signal d'alerte est ailleurs : dans la file d'attente des processus prêts, qui dit combien de tâches attendent leur tour.
Un processeur à 50 % en moyenne sur une minute peut avoir tourné à mi-charge tout du long, ou avoir passé trente secondes à 100 % et trente à 0 %. Pour un utilisateur, ces deux situations n'ont rien à voir : la seconde donne des à-coups perceptibles. Plus l'intervalle de mesure est long, plus il en cache : c'est pourquoi on relève une mesure par minute, et pas une moyenne horaire.
Mémoire
La mémoire physique (RAM) est découpée en pages de taille fixe. Chaque processus voit un espace d'adressage virtuel continu, que la table des pages traduit en adresses physiques : c'est ce qui permet l'isolation entre processus et l'illusion d'une mémoire plus grande que la RAM.
Quand la RAM manque, le système écrit des pages inutilisées sur disque, le swap. Un accès disque étant des milliers de fois plus lent qu'un accès RAM, un système qui swappe activement s'effondre en performance.
Une mémoire « utilisée à 95 % » est normale : le système garde en cache tout ce qu'il peut, et libère à la demande. Ce qui compte, c'est la mémoire disponible, et surtout l'activité de swap. Un serveur en swap soutenu est en train de mourir, même si sa charge CPU paraît saine.
Une série temporelle
Chaque métrique relevée à intervalle régulier forme une série temporelle. Elle se distingue d'une série statistique ordinaire sur deux points : les observations sont ordonnées, et elles ne sont pas indépendantes, la charge de cette minute ressemble à celle de la précédente.
Tous les indicateurs du chapitre 3 restent calculables, mais ils ignorent le temps. Une moyenne journalière écrase la différence entre le jour et la nuit ; un histogramme de la charge sur 24 heures mélange deux régimes distincts. Il faut donc tracer la série dans le temps avant de la résumer : c'est le même réflexe que le nuage de points, avec le temps en abscisse.
Variables aléatoires continues
Une température, une durée, un débit peuvent prendre n'importe quelle valeur d'un intervalle. On ne peut plus lister les comme pour une loi discrète du chapitre sur les probabilités : elles valent toutes zéro.
Une variable aléatoire continue est décrite par sa densité de probabilité , une fonction positive d'aire totale 1. La probabilité se lit comme une aire, c'est-à-dire une intégrale au sens du chapitre sur l'intégration :
La fonction de répartition est la primitive de la densité qui s'annule en .
C'est le contresens le plus fréquent du passage au continu. La valeur n'est pas la probabilité d'obtenir : cette probabilité vaut zéro, puisqu'il y a une infinité de valeurs possibles.
Conséquence qui déroute : peut dépasser 1 sans rien casser. Une loi uniforme sur a une densité constante égale à 10, et c'est parfaitement correct : ce qui doit valoir 1, c'est l'aire sous la courbe, pas sa hauteur ().
Ce qui a un sens, c'est toujours une probabilité d'intervalle : , l'aire entre et . D'où l'usage de la fonction de répartition , qui donne directement , et le calcul .
Les quatre lois continues à connaître
Loi normale
La courbe en cloche, symétrique autour de . Elle apparaît dès qu'une grandeur est la somme de nombreux petits effets indépendants, c'est le théorème central limite. Une température de salle machine, un bruit de mesure : normal.
- 68 % des valeurs tombent dans ;
- 95 % dans ;
- 99,7 % dans .
C'est de là que sortent tous les seuils « à 3 sigmas » de la supervision, et c'est valable uniquement si la série est normale.
entre 30 et 50, l'aire vaut 0,9545. Déplacer l'écart-type : elle ne bouge pas.
Ce qu'il faut regarder n'est pas le sommet, c'est la vitesse à laquelle la courbe retombe de part et d'autre. Au bord de la zone teintée, elle est déjà très basse ; un peu plus loin, elle est collée à l'axe. C'est cette chute rapide qui donne son sens à un seuil : au-delà, il ne reste presque rien à laisser passer.
Loi log-normale
est log-normale si est normale. Densité asymétrique, étalée à droite, définie sur les valeurs positives. Elle apparaît quand une grandeur est le produit de nombreux facteurs : temps de réponse, taille de fichiers, durée d'une requête qui traverse plusieurs couches.
Sur une série log-normale, moyenne et médiane diffèrent nettement, et la règle des trois sigmas ne tient plus. Un seuil « moyenne + 3σ » y est franchi par bien plus de valeurs ordinaires qu'annoncé, et chacune déclenche une fausse alerte. C'est l'erreur la plus courante de la supervision : appliquer une règle normale à une grandeur qui ne l'est pas.
Les deux formes, l'une sous l'autre. Sur la première, regarder la symétrie : le côté gauche est l'image exacte du côté droit. C'est pour cela que mode, médiane et moyenne y tombent au même point, et que la règle des trois sigmas y est exacte.
La seconde est la loi des temps de réponse, des tailles de fichiers, des durées de traitement. Elle est nulle en dessous de zéro, ce qu'une durée exige, et sa queue s'étire vers la droite sans fin. Deux choses à y regarder : l'écart entre les trois repères, qui mesure l'asymétrie, et le fait que la courbe ne rejoint jamais l'axe à droite. Sur cette loi, une valeur trois fois supérieure à la médiane se produit encore 7 % du temps, soit une minute sur quatorze. C'est ce que veut dire « queue épaisse », et c'est ce qui va mettre en défaut le seuil à trois sigmas.
Sur une loi normale, il reste 0,13 % des valeurs au-delà de . Sur la log-normale de la figure, il en reste 1,85 %, quatorze fois plus. Sur un relevé à la minute, la règle promettait deux fausses alertes par jour ; elle en produit vingt-sept.
La raison se voit en repassant au logarithme, la seule échelle où cette loi est une cloche. La figure a pour moyenne 48 ms et pour écart-type 42 ms : le seuil tombe donc à 175 ms. Or , et sur l'échelle du logarithme la loi est centrée en avec . Le seuil n'est donc qu'à écart-type du centre. Un seuil annoncé « à trois sigmas » n'en vaut que deux, et une cloche laisse 1,85 % de ses valeurs au-delà de 2,1 écarts-types. Le compte est bon, et le « trois » de l'énoncé était une illusion d'échelle : atteindre les 0,13 % promis demanderait un seuil à 347 ms, le double.
Le seuil bas est absurde pour la même raison, en pire : vaut ici , un nombre négatif, là où aucune durée n'existe. Une chute anormale du temps de réponse, signe d'un service qui renvoie des erreurs sans rien traiter, ne serait donc jamais signalée.
La parade tient en une ligne : sur une grandeur positive et étirée, travailler sur le logarithme, ou employer un critère de rang comme l'écart interquartile, qui ne suppose aucune forme.
Loi exponentielle
Densité sur les réels positifs, d'espérance . C'est la loi des durées entre deux événements quand ces événements arrivent au hasard à taux constant, le pendant continu de la loi de Poisson.
Le mot « pendant » se démontre, et le raisonnement tient en trois phrases. Si les incidents suivent une loi de Poisson de taux , la probabilité d'en compter zéro sur une durée vaut , c'est le terme de la loi. Or n'avoir aucun incident avant l'instant revient exactement à dire que le temps d'attente du prochain incident dépasse . Donc , et la fonction de répartition vaut , dont la dérivée est bien .
Compter les événements et mesurer l'attente entre eux sont donc deux lectures du même phénomène : y désigne le même taux, une fois par unité de temps, une fois comme inverse d'une durée moyenne.
Sa propriété caractéristique est l'absence de mémoire :
En clair, le membre de gauche se lit « sachant que le composant a déjà tenu la durée , probabilité qu'il tienne encore la durée ». Le membre de droite est la même probabilité pour un composant neuf. L'égalité dit donc que le passé ne compte pas : un composant qui a déjà tenu mille heures tombera en panne dans l'heure suivante avec la probabilité d'un composant sorti d'usine. C'est un modèle de panne accidentelle, pas d'usure.
Loi de Weibull
Elle généralise l'exponentielle en ajoutant un paramètre de forme , ce qui lui permet de représenter l'usure :
- : taux de panne décroissant, mortalité infantile, les défauts de fabrication se révèlent tôt ;
- : taux constant, c'est exactement l'exponentielle ;
- : taux croissant, usure, la panne devient plus probable avec l'âge.
C'est la loi de référence en fiabilité, et celle qui décrit correctement la durée de vie d'un disque dur.
- Somme de petits effets → normale.
- Produit de facteurs, série étalée à droite → log-normale.
- Durée entre événements à taux constant → exponentielle.
- Durée de vie avec usure → Weibull.
Vérifier la loi d'une série
Supposer une loi sans la vérifier est la fausse piste la plus coûteuse : tout ce qui suit en dépend. La vérification se fait en trois temps, du moins au plus formel.
L'histogramme avec la densité théorique superposée : c'est grossier mais cela élimine les erreurs grossières, qui sont les plus fréquentes.
Le diagramme quantile-quantile (QQ-plot) : on trace les quantiles observés contre les quantiles théoriques. Si la loi est la bonne, les points s'alignent sur la première bissectrice. Les écarts aux extrémités se lisent immédiatement, et ce sont justement les extrémités qui décident des seuils d'alerte.
Le test de Kolmogorov-Smirnov : il mesure l'écart maximal entre la fonction de répartition empirique et la théorique, et en tire une -valeur. Une -valeur inférieure à 0,05 conduit à rejeter l'hypothèse que la série suit la loi testée.
La -valeur est la probabilité d'observer un écart au moins aussi grand que celui mesuré, en supposant que la série suit vraiment la loi testée.
Une -valeur de 0,03 se lit donc : « si la loi était exacte, un écart de cette ampleur ou plus n'arriverait que trois fois sur cent ». Comme c'est peu, on préfère renoncer à l'hypothèse plutôt que d'admettre avoir observé un cas rare.
Une -valeur de 0,03 ne dit pas qu'il y a 3 % de chances que la loi soit la bonne, ni 97 % qu'elle soit fausse. Ce serait , alors que le test calcule . Les deux ne sont pas égales, et le chapitre 2, sur le conditionnement et la formule de Bayes, a montré à quel point elles peuvent différer.
Une -valeur au-dessus de 0,05 ne prouve pas davantage que la loi est bonne : elle dit seulement que ces données-là ne suffisent pas à la rejeter. Absence de preuve n'est pas preuve d'absence.
- Si on estime et sur les données mêmes, la -valeur du test est faussée dans le sens optimiste : le test accepte trop facilement. La correction s'appelle le test de Lilliefors.
- Sur un grand échantillon, le test rejette tout. Avec 10 000 points, le moindre écart devient significatif, or aucune série réelle ne suit exactement une loi théorique. Une -valeur minuscule sur 10 000 mesures ne dit pas que le modèle est inutilisable, elle dit que l'échantillon est grand.
Le code ci-dessous fabrique une journée de supervision (1 440 mesures à la minute) et confronte deux métriques à la loi normale.
Les deux séries brutes sont rejetées, mais pas pour la même raison. L'asymétrie (skewness) le montre : franchement positive pour la latence, dont la queue s'étire à droite ; nulle pour la température, qui est pourtant rejetée elle aussi. Ce qui l'éloigne de la cloche, c'est le cycle jour/nuit. Cette oscillation de 1,5 °C est bien plus forte que le bruit de mesure. Elle étale les valeurs entre le creux et le sommet, et une sinusoïde passe plus de temps près de ses extrêmes qu'au milieu. La série mélange donc les heures chaudes et les heures fraîches, c'est-à-dire deux régimes. Une fois le cycle retiré, le résidu passe le test sans difficulté, comme le logarithme de la latence. Voici les séries brutes en images.
Le QQ-plot de la latence s'écarte nettement de la droite dans le haut : les grandes valeurs observées dépassent de loin celles que prévoit la loi normale, et c'est exactement la zone qui décide des alertes. Celui de la température s'en écarte de l'autre manière, aux deux bouts, en forme de S : ses extrêmes restent en deçà de ceux d'une cloche, parce que le cycle borne la série.
1.Le z-score classique repose sur la moyenne et l'écart-type. Son défaut ?
2.Avant d'appliquer une règle à trois sigmas, il faut…
3.Un temps de réponse est souvent mieux décrit par…
4.Quel levier réduit les fausses alertes sans durcir le seuil ?
5.Une loi exponentielle est sans mémoire. Concrètement ?
Détecter une anomalie
Une anomalie est une observation qui s'écarte assez du comportement habituel pour mériter un regard. Ce chapitre s'en tient à des méthodes fondées sur des statistiques classiques (pas d'apprentissage automatique), et c'est amplement suffisant.
Le z-score
En clair : retrancher la moyenne pour savoir de combien la valeur s'écarte du comportement habituel, puis diviser par l'écart-type pour exprimer cet écart dans l'unité de la série elle-même, sa dispersion ordinaire. Un de 2 se lit « deux fois la dispersion habituelle », et cela veut dire la même chose sur des degrés et sur des millisecondes. On signale généralement .
Ce seuil de 3 n'a rien d'arbitraire : c'est la queue de distribution qu'il laisse passer qui le fixe.
entre -3 et 3, l'aire vaut 0,9973. Déplacer l'écart-type : elle ne bouge pas.
Ce qu'il faut regarder ici, ce n'est pas la cloche, ce sont les deux minces bandes qu'elle laisse en dehors de la zone teintée. La série est normale et rien ne s'y passe : ces bandes ne contiennent donc que des mesures ordinaires, et toute alerte qu'elles déclenchent est fausse. Déplacer le seuil, c'est déplacer la frontière de cette zone, donc changer l'épaisseur des bandes.
Un seuil ne se choisit pas en pourcentage mais en fausses alertes par jour. À 3σ sur une mesure par minute : fausses alertes quotidiennes. À 4σ : , soit une tous les onze jours. C'est ce nombre-là qu'on présente à l'équipe d'exploitation, pas le sigma.
Deux défauts, et ils vont ensemble. D'abord il suppose la normalité : sur une série log-normale, le seuil « moyenne + 3σ » laisse passer plus de dix fois le nombre de valeurs ordinaires annoncé, et le seuil bas tombe sous zéro.
Ensuite, moyenne et écart-type sont calculés en incluant les anomalies. Une valeur extrême gonfle , donc réduit son propre z-score : c'est l'effet de masquage.
Il va jusqu'à plafonner le score. Doubler la taille du pic double son écart à la moyenne, qui est le numérateur, mais double aussi l'écart-type qu'il fabrique presque à lui seul, qui est le dénominateur. Le rapport des deux ne bouge pas. Il ne dépend donc plus de la valeur du pic, seulement du nombre de mesures :
En clair : sur mesures, une valeur isolée ne peut pas obtenir un score plus grand que celui-là, si énorme soit-elle. Ce plafond reste sous le seuil de 3 tant que la série compte moins de onze mesures : en dessous, aucun pic ne peut déclencher l'alerte, quelle que soit son ampleur.
Charge relevée sur sept minutes : et un pic à . Personne n'hésiterait à qualifier ce pic d'anomalie.
Par le z-score. La somme vaut , donc la moyenne . La somme des carrés des écarts à 18 vaut , et l'écart-type , en divisant par comme le fait le code plus bas.
Ce choix suit la règle du chapitre 3 : sept relevés ne sont pas « la série » qu'on décrit, ce sont un échantillon à partir duquel on estime le comportement normal du capteur. C'est le cas de toute supervision, qui juge l'avenir d'après un historique. Sur des milliers de relevés, diviser par ou par ne change d'ailleurs plus rien.
Le pic a tiré la moyenne vers le haut, et surtout il pèse des de la somme des carrés des écarts. Il fournit donc 86 % de la somme dont l'écart-type est tiré : celui contre lequel on va le juger est presque entièrement son œuvre. Son z-score vaut donc
soit en dessous du seuil de 3. L'alerte ne part pas. Et elle ne partirait pas davantage avec un pic à 6 000 : sur sept mesures, le plafond calculé plus haut vaut , et le pic à 60 y est déjà.
Par le z-score robuste. La médiane vaut , et les écarts absolus à la médiane sont , de médiane . Le pic ne peut pas influencer une médiane, puisqu'il n'en déplace pas le rang central. D'où
soit onze fois le seuil. L'alerte part sans ambiguïté.
Par l'écart interquartile. , , donc et la limite haute vaut . Le pic est signalé lui aussi.
Deux méthodes sur trois voient une anomalie que la troisième déclare normale, sur les mêmes sept nombres. La différence ne tient pas au seuil choisi mais à ce qu'on met dans le dénominateur.
L'écart interquartile
On signale les valeurs hors de , la règle de la boîte à moustaches vue au chapitre 3. Quartiles et IQR étant robustes, quelques valeurs extrêmes ne les déplacent pas : pas d'effet de masquage. Et la méthode ne suppose aucune loi.
Le z-score robuste
On remplace moyenne et écart-type par leurs équivalents robustes. La médiane remplace la moyenne. L'écart absolu médian remplace l'écart-type : c'est la médiane des distances à la médiane,
et le score devient
En clair, c'est le même geste que le z-score, avec deux remplacements. L'écart au centre se compte à partir de la médiane et non de la moyenne. La dispersion ordinaire se lit sur le MAD, c'est-à-dire l'écart typique des autres points à cette médiane. Le facteur ramène l'échelle du MAD à celle d'un écart-type sur une loi normale, de sorte que le seuil de 3 garde le même sens qu'avec le z-score classique.
Tout l'intérêt tient au dénominateur : une valeur extrême peut multiplier l'écart-type, elle ne déplace pas une médiane, qui ne dépend que d'un rang. Le seuil ne se laisse donc pas fabriquer par ce qu'il doit détecter.
Le pourcentage du maximum
« Alerte au-delà de 90 % du maximum observé » : simple, immédiat, et sans aucune propriété. Le maximum est la statistique la moins robuste qui soit, il est déterminé par une seule valeur, souvent celle dont on doute le plus. À citer, à ne pas utiliser seul.
Les trois incidents sont réels et massifs, et les trois méthodes les trouvent tous ; pourtant les seuils diffèrent de six points de charge. Le z-score classique place sa limite le plus haut, vers 69 %, parce que les incidents ont eux-mêmes gonflé l'écart-type. Les méthodes robustes, qui les ignorent dans le calcul du seuil, descendent à 63 % et 66 %, et le paient de quelques signalements supplémentaires sur des mesures ordinaires.
Il n'y a pas de méthode gagnante dans l'absolu : il y a un arbitrage entre incidents manqués et fausses alertes, et c'est à l'exploitant de le trancher. Sur une série de cinq cents points, trois incidents gonflent peu l'écart-type ; sur une série courte, ou avec des incidents plus nombreux, le masquage vu plus haut ferait basculer la comparaison.
Régler un seuil de vigilance
Trois méthodes, trois seuils différents sur la même série. Reste à décider lequel poser, et ce choix-là n'est plus statistique.
Un seuil produit deux types d'erreurs : les faux négatifs (incidents manqués) et les faux positifs (fausses alertes). Les baisser tous les deux en même temps est impossible : durcir le seuil réduit les fausses alertes et augmente les incidents manqués.
Les quatre fausses alertes quotidiennes calculées plus haut valent pour une métrique sur un serveur. Avec quatre métriques et vingt serveurs, on atteint plus de 300 alertes par jour, dont presque aucune ne correspond à un incident.
C'est le résultat de Bayes, posé dans Probabilités, sous sa forme opérationnelle : une équipe noyée sous les fausses alertes finit par toutes les ignorer, y compris la vraie. La figure qui l'accompagne se règle exactement sur ce cas : descendre la rareté à quelques dixièmes de pour-cent, et regarder ce que devient la valeur prédictive d'un excellent détecteur.
La figure suivante rend cet arbitrage manipulable. Trois anomalies ont été injectées dans une série par ailleurs normale ; déplacer le seuil fait bouger les deux comptes, et jamais dans le même sens.
anomalies détectées
4 / 4
aucune manquée
fausses alertes
7
sur 1440 relevés
cadence attendue
environ 3,9 par jour
0,270 % hors du seuil
C'est la dernière colonne qu'on présente à une équipe d'exploitation, pas le sigma : à 3σ sur un relevé toutes les minutes, la métrique déclenche environ 3,9 par jour sans qu'il ne se passe rien.
Parcourir les neuf réglages fait apparaître ce qu'aucune formule ne dit : il n'existe pas de seuil sans perte.
À 2σ, la métrique se déclenche 61 fois dans la journée sans que rien ne se passe. À 3σ, elle ne se trompe plus que 7 fois, et attrape encore les quatre anomalies. À 3,5σ, elle ne se trompe presque plus, et laisse passer la dérive à 76 %, cerclée en pointillés sur le dessin. Les trois pics francs, eux, restent détectés jusqu'à 5σ : ce ne sont pas eux qui décident du réglage.
C'est toujours l'anomalie la plus discrète qui fixe le seuil, et c'est pourquoi on ne le règle pas sans savoir ce qu'on cherche à détecter.
À 3σ, la figure annonce une cadence de 3,9 fausses alertes par jour et en compte 7 sur cette journée-là. Les deux nombres sont justes : le premier est une espérance, le second un tirage. Sur une seule journée, l'écart est ordinaire.
C'est la raison pour laquelle on ne règle pas un seuil sur une journée de données. Il faut soit plusieurs semaines, soit le calcul théorique, et de préférence les deux, qui doivent alors se rejoindre.
« 3 sigmas » ne veut rien dire pour une équipe d'exploitation. « Environ quatre réveils par jour et par métrique » veut dire quelque chose, et se discute. Le sigma est un moyen de calcul ; la cadence de fausses alertes est la grandeur qu'on négocie.
Trois leviers, dans l'ordre où on les emploie :
- Exiger une persistance : alerter seulement si le seuil est dépassé pendant minutes consécutives. Un pic isolé disparaît, une dérive réelle passe. C'est le levier le plus efficace et le moins coûteux.
- Corréler plusieurs métriques : CPU et latence simultanément. La probabilité que deux signaux indépendants se déclenchent à tort en même temps est le produit des deux, bien plus petite.
- Choisir le seuil selon le coût : manquer une surchauffe coûte un serveur, manquer un pic de trafic coûte quelques secondes de lenteur. Les deux ne méritent pas le même réglage.
La journée mélange deux régimes, une nuit à 30 % et un plateau diurne à 57 %. Ce mélange gonfle l'écart interquartile, donc pousse le seuil à 86 % : seules les dix minutes les plus violentes de l'incident sont vues. Le même calcul mené sur les seules heures ouvrées descend le seuil à 75 % et détecte les quinze minutes.
Même série, même méthode, même règle. Ce qui change, c'est qu'on a d'abord séparé les régimes. C'est le conseil qui paraissait théorique au début du chapitre, et qui coûte ici cinq minutes d'incident non vues.
Vérification
1.Un seuil durci fait passer les fausses alertes de quatre par jour à une tous les onze jours. Que devient l'autre plateau de la balance ?
2.Pourquoi le z-score robuste emploie-t-il la médiane et le MAD ?
3.Une métrique de latence est fortement asymétrique à droite. Quelle loi la décrit le mieux ?
4.Avant d'appliquer une règle à trois sigmas, quelle vérification s'impose ?
Exercices type
Une série de latences a pour moyenne 45 ms et pour médiane 28 ms. Que peut-on en déduire ?
La moyenne est très supérieure à la médiane : la distribution est fortement asymétrique à droite. Quelques requêtes très lentes tirent la moyenne, tandis que la majorité se situe autour de 28 ms.
C'est la signature d'une loi log-normale, typique des temps de réponse.
Conséquence pratique : ne pas utiliser de z-score sur cette série. Travailler sur , ou passer par des quantiles : c'est la raison d'être des et (les 95ᵉ et 99ᵉ centiles) en supervision applicative.
Sur 1 440 mesures normales par jour, combien de fausses alertes produit un seuil à 2 sigmas ? à 3 sigmas ?
À 2 sigmas : 4,6 % des mesures sortent de l'intervalle, soit 66 fausses alertes par jour. Inexploitable.
À 3 sigmas : 0,27 %, soit 4 par jour. Acceptable pour une métrique, déjà lourd pour dix.
Et ce calcul suppose la série normale et les mesures indépendantes, deux hypothèses fausses sur une série temporelle, où les valeurs successives se ressemblent. En pratique, les fausses alertes arrivent groupées, ce qui est à la fois plus visible et plus facile à filtrer par une règle de persistance.
Pourquoi le z-score détecte-t-il mal une anomalie très grande ?
Parce que la valeur extrême entre dans le calcul de la moyenne et de l'écart-type qui servent à la juger, c'est l'effet de masquage.
Une seule valeur énorme fait exploser , ce qui freine mécaniquement la croissance de son propre z-score. Grossir l'anomalie ne sert donc à rien : le numérateur et le dénominateur grandissent ensemble, et leur rapport reste plafonné à , soit 2,27 sur sept mesures. Sur une série de moins de onze valeurs, ce plafond est sous 3 : aucun pic ne peut déclencher l'alerte. Plusieurs anomalies simultanées se masquent en outre les unes les autres.
Les méthodes robustes (, ) n'ont pas ce défaut : médiane et quartiles ne bougent pas quand quelques points s'envolent.
Un disque a une durée de vie suivant une loi de Weibull de paramètre . Que faut-il en conclure pour la maintenance ?
signifie un taux de panne croissant avec l'âge : c'est un phénomène d'usure, pas d'accident.
Conséquence directe : la maintenance préventive a du sens. Remplacer les disques au-delà d'un certain âge réduit réellement le taux de panne, et l'âge est un bon prédicteur.
Contraste utile : si (exponentielle, sans mémoire), remplacer un composant ancien par un neuf ne changerait rien au risque de panne du mois suivant. La politique de maintenance découle directement de la forme de la loi.
Le test de Kolmogorov-Smirnov donne sur 10 000 mesures de température. Faut-il abandonner le modèle normal ?
Pas nécessairement. Sur un échantillon de cette taille, le test détecte des écarts infimes : aucune série physique réelle ne suit exactement une loi théorique, et le test finit toujours par le voir.
La question utile n'est pas « la loi est-elle exacte ? » mais « l'écart est-il gênant pour l'usage prévu ? ». Si on pose un seuil à 3 sigmas, ce qui compte est la qualité de l'ajustement dans la queue de distribution, et cela se lit sur un QQ-plot, pas sur une -valeur.
Il faut donc regarder l'ampleur de l'écart (la statistique du test, l'écart maximal entre les deux fonctions de répartition) plutôt que sa significativité.
Deux serveurs ont la même charge CPU moyenne de 55 %. Comment savoir lequel est en difficulté ?
La moyenne ne peut pas répondre. Il faut :
- La dispersion : un serveur régulier à 55 % et un autre alternant 10 % et 100 % n'ont pas le même comportement. Écart-type et les séparent.
- La série temporelle : le second est-il saturé pendant les heures ouvrées et inactif la nuit (auquel cas c'est normal) ou ses pics sont-ils erratiques ?
- Les quantiles hauts : et disent la charge dans les pires moments, qui est ce que ressentent les utilisateurs.
- Les métriques corrélées : mémoire, activité de swap, latence. Un CPU à 55 % avec du swap soutenu est un serveur en difficulté ; à 55 % sans swap, c'est un serveur qui travaille.
La méthode
- Tracer la série dans le temps avant tout. Les régimes jour/nuit et les incidents s'y voient à l'œil nu.
- Séparer les régimes s'il y en a plusieurs. Un indicateur global sur deux populations mélangées ne décrit ni l'une ni l'autre.
- Identifier la loi : histogramme, puis QQ-plot, puis test, dans cet ordre, du plus parlant au plus formel.
- Ne jamais appliquer un raisonnement en sigmas à une série qu'on n'a pas vérifiée normale.
- Comparer au moins deux méthodes de détection, et donner les seuils qu'elles produisent.
- Chiffrer le taux de fausses alertes attendu par jour. C'est ce nombre qui rend un seuil acceptable ou non.
- Ajouter une règle de persistance avant de durcir un seuil : c'est plus efficace et cela ne coûte pas de sensibilité.
- Conclure par une recommandation actionnable : quel seuil, sur quelle métrique, avec quelle durée, et pourquoi.
Synthèse
- La charge CPU est une proportion de temps ; ce qui alerte, c'est la file d'attente. La mémoire s'apprécie par le disponible et le swap, pas par l'utilisé.
- Une série temporelle est ordonnée et auto-corrélée : la tracer avant de la résumer.
- Une loi continue se décrit par sa densité ; la probabilité est une aire.
- Normale = somme d'effets. Log-normale = produit d'effets, temps de réponse. Exponentielle = durées entre événements, sans mémoire. Weibull = durées de vie, pour l'usure.
- Règle des trois sigmas : , valable uniquement sur une série normale.
- Vérifier la loi : histogramme → QQ-plot → Kolmogorov-Smirnov. Le test rejette tout sur un grand échantillon.
- z-score : simple, suppose la normalité, souffre de l'effet de masquage. Sur mesures, une valeur isolée plafonne à , donc sous 3 en deçà de onze mesures.
- IQR et z robuste (MAD) : sans hypothèse de loi, insensibles aux valeurs extrêmes.
- Le pourcentage du maximum n'a aucune propriété : à citer, pas à utiliser.
- Un seuil à 3 sigmas produit ~4 fausses alertes par jour et par métrique sur un relevé à la minute.
- Persistance puis corrélation de métriques avant de durcir un seuil.
Et ensuite
Les cinq premiers chapitres ont produit des calculs à faire : une espérance, un intervalle, un seuil. Reste à les écrire, et la façon de les écrire n'est pas neutre : elle décide de ce qu'on pourra tester, paralléliser et corriger six mois plus tard. Paradigmes de programmation ouvre le deuxième temps du parcours.
Mettre en pratique
z-score, IQR, MAD et seuils de vigilance.
- Détecter par l'écart interquartileNiveau 2
- Détecter par le z-scoreNiveau 2
- Le z-score robuste (MAD)Niveau 3
- Ne pas alerter sur un pic isoléNiveau 4
- Prédire l'effet de masquageNiveau 3
- Combien de fausses alertes par jour ?Niveau 4
- Le seuil à trois sigmas d'une salle machineNiveau 1
- Une latence que le z-score ne voit pasNiveau 2
- Ce que coûte et rapporte une règle de persistanceNiveau 3