﻿﻿{"id":1823,"date":"2025-12-16T11:31:22","date_gmt":"2025-12-16T10:31:22","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/cordon-loutil-qui-trouve-les-aiguilles-dans-vos-meules-de-logs\/"},"modified":"2025-12-16T11:31:22","modified_gmt":"2025-12-16T10:31:22","slug":"cordon-loutil-qui-trouve-les-aiguilles-dans-vos-meules-de-logs","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/cordon-loutil-qui-trouve-les-aiguilles-dans-vos-meules-de-logs\/","title":{"rendered":"Cordon &#8211; L&#8217;outil qui trouve les aiguilles dans vos meules de logs"},"content":{"rendered":"<p>Vous avez d\u00e9j\u00e0 pass\u00e9 des heures \u00e0 \u00e9plucher des fichiers de logs de plusieurs millions de lignes pour trouver ce qui cloche ? Genre une pauvre erreur bizarre qui se produit une fois sur 100 000, noy\u00e9e dans un oc\u00e9an de messages r\u00e9p\u00e9titifs et d&#8217;infos inutiles ? Moi, oui plein de fois !<\/p>\n<p>Mais \u00e7a c&#8217;\u00e9tait avant de tomber sur<br \/>\n<a href=\"https:\/\/github.com\/calebevans\/cordon\">Cordon<\/a><br \/>\n!<\/p>\n<p>Cordon est un outil en Python qui utilise des mod\u00e8les de transformers et du scoring k-NN pour d\u00e9tecter les anomalies s\u00e9mantiques dans vos logs. En gros, au lieu de chercher des mots-cl\u00e9s comme un bourrin avec grep, Cordon comprend le sens des messages et rep\u00e8re ce qui sort de l&#8217;ordinaire.<\/p>\n<p>Les patterns r\u00e9p\u00e9titifs sont alors consid\u00e9r\u00e9s comme du bruit de fond normal, m\u00eame si ce sont des erreurs parce que si vous avez la m\u00eame erreur FATALE qui se r\u00e9p\u00e8te 10 000 fois, c&#8217;est probablement un probl\u00e8me connu. Et vous, ce que vous voulez trouver, c&#8217;est l&#8217;\u00e9v\u00e9nement rare, celui qui se produit une seule fois et qui est s\u00e9mantiquement diff\u00e9rent du reste.<\/p>\n<p>L&#8217;installation est simple comme bonjour. Un petit <code>pip install cordon<\/code> et c&#8217;est r\u00e9gl\u00e9. Pour l&#8217;utilisation de base, vous balancez juste votre fichier de logs en argument :<\/p>\n<p><code>cordon system.log<\/code><\/p>\n<p>Et hop, Cordon va analyser tout \u00e7a et vous sortir uniquement les trucs int\u00e9ressants. Par d\u00e9faut, il garde les 10% les plus &#8220;anormaux&#8221; s\u00e9mantiquement. Vous pouvez ajuster ce pourcentage avec <code>--anomaly-percentile 0.05<\/code> pour \u00eatre plus s\u00e9lectif (top 5%).<\/p>\n<p>Sous le capot, \u00e7a utilise le mod\u00e8le all-MiniLM-L6-v2 de sentence-transformers pour vectoriser les logs. Le fichier est d\u00e9coup\u00e9 en fen\u00eatres de N lignes (4 par d\u00e9faut), chaque fen\u00eatre est transform\u00e9e en vecteur, puis un score de densit\u00e9 k-NN est calcul\u00e9. Les fen\u00eatres qui ont des vecteurs tr\u00e8s diff\u00e9rents du reste sont marqu\u00e9es comme anomalies.<\/p>\n<p>Et si vous avez un GPU, Cordon peut l&#8217;utiliser automatiquement avec l&#8217;option <code>--device cuda<\/code>. D&#8217;apr\u00e8s les benchmarks, \u00e7a donne un speedup de 5 \u00e0 15x sur le scoring pour les gros datasets. Sur des logs HDFS de 1 \u00e0 5 millions de lignes, l&#8217;outil arrive \u00e0 r\u00e9duire le volume de 98%. Autant dire que \u00e7a filtre s\u00e9v\u00e8re.<\/p>\n<p>Y&#8217;a aussi un mode &#8220;range&#8221; qui est pratique pour explorer par tranches. Genre si vous voulez exclure le top 5% (trop bizarre, probablement du garbage) mais garder le top 5-15%, vous faites :<\/p>\n<p><code>cordon --anomaly-range 0.05 0.15 app.log<\/code><\/p>\n<p>\u00c7a permet d&#8217;affiner l&#8217;investigation de mani\u00e8re it\u00e9rative.<\/p>\n<p>Pour les environnements conteneuris\u00e9s, Cordon propose \u00e9galement une image Docker avec un backend llama.cpp au lieu de sentence-transformers. Pratique si vous voulez utiliser des mod\u00e8les GGUF ou si vous \u00eates dans un contexte o\u00f9 les d\u00e9pendances PyTorch posent probl\u00e8me.<\/p>\n<p>L&#8217;outil peut aussi s&#8217;utiliser<br \/>\n<a href=\"https:\/\/pypi.org\/project\/cordon\/\">comme biblioth\u00e8que Python<\/a><br \/>\nsi vous voulez l&#8217;int\u00e9grer dans vos propres scripts :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">analyzer = SemanticLogAnalyzer()\n<\/span><\/span><span class=\"line\"><span class=\"cl\">output = analyzer.analyze_file(Path(\"system.log\"))\n<\/span><\/span><\/code><\/pre>\n<p>C&#8217;est top moumoute pour le pr\u00e9traitement de logs avant de les balancer \u00e0 un LLM (pour r\u00e9duire le contexte), le triage initial de fichiers de logs inconnus, ou la d\u00e9couverte de patterns inattendus. Par contre, si vous cherchez une erreur sp\u00e9cifique que vous connaissez d\u00e9j\u00e0, grep reste votre ami. Et si vous avez besoin d&#8217;un historique complet pour la conformit\u00e9, oubliez Cordon qui est volontairement &#8220;lossy&#8221;.<\/p>\n<p>Notez qu&#8217;au premier lancement, Cordon t\u00e9l\u00e9chargera le mod\u00e8le d&#8217;embedding (environ 80 Mo) donc ce sera un peu lent, mais ensuite, \u00e7a sera quasi instantan\u00e9 car les lancements suivants utiliseront le cache. Et si vos logs sont tr\u00e8s verbeux avec de longues lignes, le mod\u00e8le par d\u00e9faut (256 tokens max) risque de tronquer les lignes, dans ce cas, passez \u00e0 un mod\u00e8le plus costaud comme BAAI\/bge-base-en-v1.5 qui supporte 512 tokens avec le param\u00e8tre <code>--model-name<\/code>.<\/p>\n<p>Voil\u00e0, j&#8217;esp\u00e8re que \u00e7a vous sera utile ! C&#8217;est open source sous licence Apache 2.0 et<br \/>\n<a href=\"https:\/\/github.com\/calebevans\/cordon\">\u00e7a se trouve sur GitHub<\/a><br \/>\n.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez d\u00e9j\u00e0 pass\u00e9 des heures \u00e0 \u00e9plucher des fichiers de logs de plusieurs millions de lignes pour trouver ce qui cloche ? Genre une pauvre erreur bizarre qui se produit une fois sur 100 000, noy\u00e9e dans un oc\u00e9an de messages r\u00e9p\u00e9titifs et d&#8217;infos inutiles ? Moi, oui plein de fois ! Mais \u00e7a c&#8217;\u00e9tait avant de tomber sur Cordon ! Cordon est un outil en Python qui utilise des mod\u00e8les de transformers et du scoring k-NN pour d\u00e9tecter les anomalies s\u00e9mantiques dans vos logs. En gros, au lieu de chercher des mots-cl\u00e9s comme un bourrin avec grep, Cordon comprend le sens des messages et rep\u00e8re ce qui sort de l&#8217;ordinaire. Les patterns r\u00e9p\u00e9titifs sont alors consid\u00e9r\u00e9s comme du bruit de fond normal, m\u00eame si ce sont des erreurs parce que si vous avez la m\u00eame erreur FATALE qui se r\u00e9p\u00e8te 10 000 fois, c&#8217;est probablement un probl\u00e8me connu. Et vous, ce que vous voulez trouver, c&#8217;est l&#8217;\u00e9v\u00e9nement rare, celui qui se produit une seule fois et qui est s\u00e9mantiquement diff\u00e9rent du reste. L&#8217;installation est simple comme bonjour. Un petit pip install cordon et c&#8217;est r\u00e9gl\u00e9. Pour l&#8217;utilisation de base, vous balancez juste votre fichier de logs en argument : cordon system.log Et hop, Cordon va analyser tout \u00e7a et vous sortir uniquement les trucs int\u00e9ressants. Par d\u00e9faut, il garde les 10% les plus &#8220;anormaux&#8221; s\u00e9mantiquement. Vous pouvez ajuster ce pourcentage avec &#8211;anomaly-percentile 0.05 pour \u00eatre plus s\u00e9lectif (top 5%). Sous le capot, \u00e7a utilise le mod\u00e8le all-MiniLM-L6-v2 de sentence-transformers pour vectoriser les logs. Le fichier est d\u00e9coup\u00e9 en fen\u00eatres de N lignes (4 par d\u00e9faut), chaque fen\u00eatre est transform\u00e9e en vecteur, puis un score de densit\u00e9 k-NN est calcul\u00e9. Les fen\u00eatres qui ont des vecteurs tr\u00e8s diff\u00e9rents du reste sont marqu\u00e9es comme anomalies. Et si vous avez un GPU, Cordon peut l&#8217;utiliser automatiquement avec l&#8217;option &#8211;device cuda. D&#8217;apr\u00e8s les benchmarks, \u00e7a donne un speedup de 5 \u00e0 15x sur le scoring pour les gros datasets. Sur des logs HDFS de 1 \u00e0 5 millions de lignes, l&#8217;outil arrive \u00e0 r\u00e9duire le volume de 98%. Autant dire que \u00e7a filtre s\u00e9v\u00e8re. Y&#8217;a aussi un mode &#8220;range&#8221; qui est pratique pour explorer par tranches. Genre si vous voulez exclure le top 5% (trop bizarre, probablement du garbage) mais garder le top 5-15%, vous faites : cordon &#8211;anomaly-range 0.05 0.15 app.log \u00c7a permet d&#8217;affiner l&#8217;investigation de mani\u00e8re it\u00e9rative. Pour les environnements conteneuris\u00e9s, Cordon propose \u00e9galement une image Docker avec un backend llama.cpp au lieu de sentence-transformers. Pratique si vous voulez utiliser des mod\u00e8les GGUF ou si vous \u00eates dans un contexte o\u00f9 les d\u00e9pendances PyTorch posent probl\u00e8me. L&#8217;outil peut aussi s&#8217;utiliser comme biblioth\u00e8que Python si vous voulez l&#8217;int\u00e9grer dans vos propres scripts : analyzer = SemanticLogAnalyzer() output = analyzer.analyze_file(Path(&#8220;system.log&#8221;)) C&#8217;est top moumoute pour le pr\u00e9traitement de logs avant de les balancer \u00e0 un LLM (pour r\u00e9duire le contexte), le triage initial de fichiers de logs inconnus, ou la d\u00e9couverte de patterns inattendus. Par contre, si vous cherchez une erreur sp\u00e9cifique que vous connaissez d\u00e9j\u00e0, grep reste votre ami. Et si vous avez besoin d&#8217;un historique complet pour la conformit\u00e9, oubliez Cordon qui est volontairement &#8220;lossy&#8221;. Notez qu&#8217;au premier lancement, Cordon t\u00e9l\u00e9chargera le mod\u00e8le d&#8217;embedding (environ 80 Mo) donc ce sera un peu lent, mais ensuite, \u00e7a sera quasi instantan\u00e9 car les lancements suivants utiliseront le cache. Et si vos logs sont tr\u00e8s verbeux avec de longues lignes, le mod\u00e8le par d\u00e9faut (256 tokens max) risque de tronquer les lignes, dans ce cas, passez \u00e0 un mod\u00e8le plus costaud comme BAAI\/bge-base-en-v1.5 qui supporte 512 tokens avec le param\u00e8tre &#8211;model-name. Voil\u00e0, j&#8217;esp\u00e8re que \u00e7a vous sera utile ! C&#8217;est open source sous licence Apache 2.0 et \u00e7a se trouve sur GitHub .<\/p>\n","protected":false},"author":1,"featured_media":1824,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-1823","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=1823"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1823\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/1824"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=1823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}