Machine learning et valeurs nulles

Bonjour,

J'utilise Machine Learning pour remonter des alertes lorsque des courbes de trafic web sont anormales. Par exemple s'il y a trop de trafic ou pas assez.

Je fait pour ça la somme (count) du nombre de connexions à un site web au cours du temps et déffinit un bucket span de plusieurs minutes.

Ca marche très bien s'il y a trop ou pas assez de trafic par rapport à la normale, tant qu'il y a du trafic.

Par contre, j'ai eu un cas où une absence totale de trafic a été considéré il me semble comme une absence de données, conséquence de quoi l'alerting n'a pas sonné.
Je dis absence de données car quand je clique sur machine learning, j'ai droit à des encarts gris sur les courbes, m'indiquant que le datafeed a manqué 1 517 829 documents à cause de latence en ingestion (avec un B en haut de l'encart : cf capture ecran ci-dessous) entre le 16/03 - 22h00 et le 17/03 - 22h00. Ce qui est étonnant puisque sur cette plage je ne constate aucune latence en allant dans le monitoring (pas d'augmentation de la Latency sous monitoring > nodes, l'indexing rate est à son minimum de la journée pour le seul index qui travaille et son document count est stable. Dans monitoring > overview j'ai même un creux d'indexing latency entre 22h et 8h le lendemain. Pas de sursaut de JVM). Alors qu'en réalité les données sont bien indexées puisque je les vois dans discover. Sauf que comme il n'y a aucun trafic pour ce que je surveille, il n'y a aucune données pour le bucket, logique...

J'aimerai savoir comment solutionner cela car c'est je pense une anomalie dans la mécanique qui devrait être capable de distinguer les cas d'absence de trafic des cas d'absence d'indexation de documents.

Ps sous machine learning j'ai ce message : Datafeed has missed 1,517,829 documents due to ingest latency, latest bucket with missing data is 2020-03-17T18:00:00.000Z. Consider increasing query_delay. Qu est-ce le query delay ?

Par avance merci.

Capture ecran :

@DavidSztykman ? Tu sais ?

Bonjour,

Par défaut quand on fait un job de machine learning; on scan et scroll les données du cluster avec un delay compris entre 60s et 120s.
Plus d'infos ici : https://www.elastic.co/guide/en/machine-learning/current/ml-delayed-data-detection.html
Et ici : https://www.elastic.co/guide/en/elasticsearch/reference/7.6/ml-put-datafeed.html#ml-put-datafeed-request-body

Globalement si vous avez de la latence sur l'ingestion des logs ML ne va pas lire les données et indiqués avec l'annotation que vous avez eu que les données sont arrivés en dehors de la fenêtre du query delay.

Ce n'est pas forcément du à une latence au niveau d'Elasticsearch mais peut être que les logs eux mêmes sont écrits avec un delay sur la machine par exemple.

Si vous savez que votre ingestion peut prendre un plus de temps typiquement 1h de retard par exemple vous pouvez indiquer un query delay dans la configuration de ML. Attention ça signifie également que vous ne serez pas notifié en temps réel d'anomalies.
Il faut trouver un compromis entre le query delay et la latence maximum autorisé dans l'ingestion des données.

1 Like

Merci David,

Je pense avoir compris le problème.
Certains documents ont un horodatage avec un décalage horaire car ils proviennent de plusieurs pays. Du coup je suppose qu'il faut que je crée un nouvel index kibana qui prend l'horodatage d'injection (@timestamp) et non l'horodatage de création de ma log.
La zone en erreur correspond bien à un fort trafic d'un autre pays.

Les documents sont "ingestés" par salves, toutes les 5 minutes, et mettent entre 30 et 60 secondes à être indexées (elles sont assez nombreuses), donc sans doute mettre un delay assez élevé.

Merci encore.