Meilleure approche pour la détection d’anomalies non supervisée dans les journaux et les métriques d’un service



Hé les gens,

Je me cogne donc la tête contre le mur en essayant de construire un système de détection d’anomalie pour notre service. Nous avons à la fois des journaux et des métriques (CPU, mémoire, temps de réponse) et je dois comprendre quand les choses vont de côté.

J’ai essayé un tas d’approches différentes mais je suis coincé. Quelqu’un ici a travaillé avec la détection des anomalies de journal ou des trucs de séries chronologiques qui pourraient partager une certaine sagesse?

Avec quoi je travaille

Nos journaux ne sont pas basés sur le texte (donc pas de magie NLP), juste des modèles prédéfinis comme TPL_A, TPL_B, etc. Chaque journal a deux champs de classification: – exception_type: catégorie de problèmes généraux – Sous-catégorie: Détails plus spécifiques

Il existe des ID de corrélation aux journaux de groupe, mais la plupart des groupes ont simplement une seule entrée de journal (ennuyeux, non?). Parfois, le même journal répète des centaines de fois dans un événement, ce qui est … amusant.

Nous avons également des métriques système échantillonnés toutes les 5 minutes, mais ils ne sont pas liés à des événements spécifiques.

La partie délicate? Je ne sais pas quoi "anormal" On dirait ici. Les journaux rares ne sont pas nécessairement mauvais et les journaux courants à des moments étranges pourraient être importants. Les anomalies pourraient être en séquences, fréquences ou corrélations avec les mesures.

Les barrages

Le plus gros problème est que la plupart des groupes de corrélation n’ont qu’un seul journal, ce qui rend les modèles de séquence comme LSTMS assez inutiles. Sans séquences réelles, ils n’ont pas grand-chose à apprendre.

La détection régulière des valeurs aberrantes (forêt d’isolement, SVM à une classe) ne fonctionne pas bien non plus parce que rare ≠ anormal dans ce cas.

Les identifiants de corrélation ne sont pas si utiles avec cette structure, donc je pense que l’analyse basée sur le temps pourrait mieux fonctionner.

Ma réflexion actuelle: approche des fenêtres temporelles

Au lieu d’analyser par événement, j’envisage de tout traiter comme des données de séries chronologiques:

  1. Le groupe se connecte dans des fenêtres de 5 à 10 minutes plutôt que par ID de corrélation
  2. Convertir les journaux en fonctionnalités numériques (un hot, sac de log, word2vec?)
  3. Fusionner avec les métriques du système à partir des mêmes périodes
  4. Appliquer des modèles de détection d’anomalies de la série chronologique

Pour les modèles, je pèse des options comme: – LSTM Autoencoder (bon pour les modèles, mais a besoin de séquences structurées) – LSTM VAE (gère la variabilité meilleure mais plus difficile à former) – Prophet + Analyse résiduelle (bonne pour les tendances mais pourrait manquer des dépendances complexes) – Forêt d’isolement sur les fenêtres de temps (ignore les dépendances à temps) simples)

Approche actuelle

Ce que je fais actuellement, c’est que j’ai essentiellement un dataframe avec chaque colonne = un modèle de journal, plus les mesures que j’observe. Chaque entrée est le nombre pour chaque modèle pendant 5 minutes et donc la valeur moyenne de chaque métrique pendant ces mêmes 5 minutes. Je fais ensuite cela pour tout mon ensemble de données (échantillonné à 5 minutes comme vous vous y attendez) et je forment donc un autoencoder LSTM dessus (j’ai transformé mes données en séquences avant, bien sûr).

Si quelqu’un a abordé quelque chose de similaire, j’aimerais entendre ce qui a fonctionné / n’a pas fonctionné pour vous. Cela me rend fou depuis des semaines!

soumis par / u / roux55
(lien) (Commentaires)



Source link

Related post

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *