From d496e1d188c3737a4537e4d0e76a8bee4305c96d Mon Sep 17 00:00:00 2001 From: sylvain Date: Thu, 2 Apr 2026 09:42:25 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20stockage=20rapports=20DB=20+=20filtres?= =?UTF-8?q?=20affin=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Table 'reports' : stockage des rapports LLM (machine, date, contenu, nb erreurs) - logwatch report [hostname] [date] : relire un rapport stocké - Filtres refactorisés : tier 1 (uppercase exacts) + tier 2 (contextuels précis) - EXCLUDE_PATTERNS : exclure le bruit connu (Started, LogWatch lui-même...) - Déduplication : max 5 occurrences de la même ligne par collecte - Résultat : 0.7% de rétention vs 33% avant Co-Authored-By: Claude Sonnet 4.6 --- __pycache__/agent_logwatch.cpython-313.pyc | Bin 40488 -> 43600 bytes agent_logwatch.py | 116 ++++++++++++++++---- config/system_prompt.txt | 1 + data/logwatch.db | Bin 40960 -> 1196032 bytes data/omemo.db | Bin 86016 -> 86016 bytes data/queue.db | Bin 12288 -> 12288 bytes skills/__pycache__/logwatch.cpython-313.pyc | Bin 13955 -> 16192 bytes skills/logwatch.py | 49 +++++++++ 8 files changed, 147 insertions(+), 19 deletions(-) diff --git a/__pycache__/agent_logwatch.cpython-313.pyc b/__pycache__/agent_logwatch.cpython-313.pyc index ed5b8ec5b3690adf3ec0c1538466640d9bbd031d..ee744241dc9268c829151e3cb8ebad3c0dbe141a 100644 GIT binary patch delta 8405 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 delta 6263 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'), # syslog prio 0-3 + + # Tier 2 : patterns précis avec contexte re.compile(r'\bsegfault\b|\bSegmentation fault\b', re.IGNORECASE), - re.compile(r'\bout of memory\b|\bOOM killer\b|\bOOM-killer\b', re.IGNORECASE), - re.compile(r'\b(failed|failure)\b', re.IGNORECASE), - re.compile(r'\bkilled\b', re.IGNORECASE), - re.compile(r'\b(BUG|Oops):\s'), - re.compile(r'<[0-3]>'), # syslog priorities 0=emerg, 1=alert, 2=crit, 3=err + re.compile(r'\bout of memory\b|\bOOM[ -]killer\b', re.IGNORECASE), re.compile(r'\bcore dumped\b', re.IGNORECASE), - re.compile(r'\bpanic\b', re.IGNORECASE), - re.compile(r'\bdenied\b.*\bpermission\b|\bpermission\b.*\bdenied\b', re.IGNORECASE), - re.compile(r'\bauthentication failure\b|\bfailed login\b|\bfailed password\b', re.IGNORECASE), - re.compile(r'\bdisk full\b|\bno space left\b', re.IGNORECASE), - re.compile(r'\bconnection refused\b|\bconnection timed out\b', re.IGNORECASE), - re.compile(r'\bssh.*invalid user\b|\binvalid user.*ssh\b', re.IGNORECASE), + re.compile(r'\b(BUG|Oops):\s'), # kernel bugs + + # systemd : "Failed to start X" ou "failed with result" + re.compile(r'systemd.*:\s+Failed\b', re.IGNORECASE), + re.compile(r'\bfailed with result\b', re.IGNORECASE), + re.compile(r'\.service.*failed\b', re.IGNORECASE), + + # kernel : OOM kill, panic noyau + re.compile(r'kernel:.*[Kk]ill\b.*\bprocess\b'), + re.compile(r'kernel:.*[Pp]anic\b'), + + # Authentification : patterns précis, pas juste "failed" + re.compile(r'\bauthentication failure\b', re.IGNORECASE), + re.compile(r'\bFailed password\b|\bFailed publickey\b'), # sshd exact + re.compile(r'\bInvalid user\b'), # sshd exact + + # Disque / espace + re.compile(r'\bno space left on device\b', re.IGNORECASE), + re.compile(r'\bdisk full\b', re.IGNORECASE), + + # Réseau : refus explicite (pas les retries normaux) + re.compile(r'\bconnection refused\b', re.IGNORECASE), +] + +# Lignes à exclure même si un pattern matche (bruit connu) +EXCLUDE_PATTERNS = [ + re.compile(r'\bsystemd\b.*\bStarted\b', re.IGNORECASE), + re.compile(r'\bLogWatch\b', re.IGNORECASE), # éviter de s'auto-analyser + re.compile(r'^\s*$'), ] SEVERITY_RANK = { 'EMERG': 0, 'ALERT': 1, 'CRIT': 2, 'CRITICAL': 2, 'FATAL': 2, 'PANIC': 2, - 'ERROR': 3, 'ERR': 3, - 'FAILED': 4, 'FAILURE': 4, 'DENIED': 4, + 'ERROR': 3, + 'FAILED': 4, 'FAILURE': 4, 'EXCEPTION': 5, 'TRACEBACK': 5, - 'KILLED': 6, 'OOM': 6, 'SEGFAULT': 6, 'CORE': 6, + 'OOM': 6, 'SEGFAULT': 6, 'CORE': 6, + 'INVALID USER': 7, 'AUTH': 7, } +# Déduplication : max N occurrences de la même signature par session de filtrage +MAX_DUPLICATES = 5 + CHUNK_SIZE = 150 # lignes envoyées au LLM par appel @@ -155,6 +185,16 @@ class LogWatchAgent(BaseAgent): INSERT OR IGNORE INTO agent_config VALUES ('enabled', '1'); INSERT OR IGNORE INTO agent_config VALUES ('log_retention_days', '7'); INSERT OR IGNORE INTO agent_config VALUES ('local_collect_time', ''); + + CREATE TABLE IF NOT EXISTS reports ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + machine_id INTEGER NOT NULL, + report_date TEXT NOT NULL, + content TEXT NOT NULL, + logs_count INTEGER DEFAULT 0, + created_at TEXT NOT NULL, + FOREIGN KEY (machine_id) REFERENCES machines(id) + ); """) def _cfg(self, key: str, default: str = '') -> str: @@ -255,16 +295,47 @@ class LogWatchAgent(BaseAgent): logger.error(f"[_on_log_received] {e}", exc_info=True) def _prefilter(self, lines: list) -> list: - """Filtre les lignes, retourne [(line, severity)].""" - result = [] + """ + Filtre les lignes, retourne [(line, severity)]. + - Applique les patterns d'exclusion en premier + - Déduplique les lignes similaires (même signature, max MAX_DUPLICATES) + """ + result = [] + seen_sigs = {} # signature → count + for line in lines: line = str(line).strip() if not line: continue + + # Exclusions d'abord + if any(ex.search(line) for ex in EXCLUDE_PATTERNS): + continue + + # Test des patterns d'inclusion + matched = False for pat in FILTER_PATTERNS: if pat.search(line): - result.append((line, _detect_severity(line))) + matched = True break + if not matched: + continue + + # Déduplication : signature = partie fixe de la ligne (sans timestamp/PID) + sig = re.sub(r'\b\d+\b', 'N', line) # remplace les nombres + sig = re.sub(r'\[[\w/]+\]', '[X]', sig) # remplace les identifiants entre [] + sig = sig[:120] + + count = seen_sigs.get(sig, 0) + if count >= MAX_DUPLICATES: + continue + seen_sigs[sig] = count + 1 + + # Annoter si répétition + sev = _detect_severity(line) + entry = line if count == 0 else f"{line} [×{count+1}]" + result.append((entry, sev)) + return result def _register_machine(self, hostname: str) -> int: @@ -644,6 +715,13 @@ class LogWatchAgent(BaseAgent): ) report += '\n\n'.join(all_reports) self._notify_admin(report) + # Stocker le rapport en DB + with self._get_db() as conn: + conn.execute( + "INSERT INTO reports (machine_id, report_date, content, logs_count, created_at) " + "VALUES (?,?,?,?,?)", + (machine_id, today, report, len(logs_list), datetime.now().isoformat()) + ) else: self._notify_admin(f"ℹ️ LogWatch: **{hostname}** — LLM n'a pas retourné de rapport.") diff --git a/config/system_prompt.txt b/config/system_prompt.txt index 99fcc30..df4a126 100644 --- a/config/system_prompt.txt +++ b/config/system_prompt.txt @@ -25,6 +25,7 @@ Tu reçois des instructions via MQTT (depuis Nexus) ou XMPP (directement). - `retention ` : durée de conservation des logs filtrés - `analyze ` : lancer l'analyse d'une machine spécifique maintenant - `analyze_all` : lancer l'analyse complète de toutes les machines + - `report [hostname] [YYYY-MM-DD]` : relire un rapport stocké (sans hostname = liste tous) - `collect [since]` : collecter maintenant les logs locaux (ex: collect "1 hour ago") - `logs [N]` : voir les N derniers logs filtrés d'une machine - `reset ` : réinitialiser l'analyse d'une machine diff --git a/data/logwatch.db b/data/logwatch.db index 087a83c3be088ee43960972fd3b915e435d7e076..90d59501f223c8e3aacd3883b0e4e0e3eb834e4f 100644 GIT binary patch literal 1196032 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 delta 4273 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 diff --git a/data/queue.db b/data/queue.db index 9c95e65f9e14a06be5b18834ea415e75a0b69e34..cd9b228e2548d30cff1e152ff9fc2bb2ebf4339f 100644 GIT binary patch delta 827 zcmaJHV%6n6p&5P~A63IXZ~1|Z1cY{$X2_-KU$sz@YAfv&#TFR_JlZhhxcGT<;E zF;X$Hv%rEXHrDbFFtbJCPw2qLvzt^MN~gQid%utOdpB_>?uUz|%J!uPrOJ-`xqiA_ z>nZiSwcgIg!&>$(D4$ch-R_0w3u5v8t&3zXPO@lVlWgnE=^Hr;|@92Qp$_5aJ1$kc4?M+{C-Y zIuMgUl0cdWG6*A??0x}3n3TYMG(vnN*!`MwG0vjbA}==ysXj%dh|_?D62{ZX_GX+S z0SgnDPQKm8hN?;$jTdp4kcj2XP*AZfXO_@tV4FkS)yFHHjx%?++U^N_!!8YT!OO^ z+{-npE8Gt;pfM3)zVlJOqCyQ<8uR%^a7oRjwV!YP{=V|-?NX_R|6RF;|NW|>eC#a# cIJu|P_r9Mef9l&$Dre7>PArrp6E8*iAGy~PY5)KL delta 57 zcmZojXh@hK&B#1a#+i|MW5N=CHb#D127cSkf(pj`lWpZsvV3FU{|4ke;hz}5!NtMI MEY4YySe#u90LJwXzyJUM diff --git a/skills/__pycache__/logwatch.cpython-313.pyc b/skills/__pycache__/logwatch.cpython-313.pyc index 9b4ddba960f98043df047c0d87cc658828563223..164ecd2dc6df897e00ec01dba1afa8814b4a6f60 100644 GIT binary patch delta 2291 zcmaJ>ZA@F&89v9?;7@S;g>9g4S_8($HokU}1_~h#xNF*A7R+rFLGV1=B@}pIJ0(o#j!wj>&Dx*%mgwsQ;? zL7R4T^_=%TAMg7<&pGEl8DITY{mr^MIUw!*p3BqUyzkX|23{_xm}c0@M`x3K8jYVw zrqYQ}JbE0BA0y2%JnR@6Ixfc$>Iz+A8-(rn;hLX8E0)z>fDZiYTHmhq1^_1Eq-&C$ zbiW8VfYmA%U)Cw{nB)!U!vB&K395BEd_}6SSgwLa_AaERLRa5O%ONe~0$|KlP%C~S zVc0Pi|4K6eS^RI!Aro5<0^=U04RGebL=9OQcXNp02Ba$Y7BT9M-_IGldZ_OO|hxYQLQS}L8|h~40TU))=gdI-w(!_JjUu>KSZcF~=4&_K zRQB0`@33!h48@(*$7M&nb8|8n38kadjU}g2!EiE@NK-G&N6C037)qo2M@NRy=He9M z(Ssw0{3sp@pO{WWQz(u`i07P+^z+WG!QgZRjf@WYMn}=XVbheCeqQ0DwRJ}MX-504YQ@!PKAy>;2ZT-1tMDX4~i z4x9bT|4DjB&bl4Pg0HsQ{cNWBzjRIW$;`=1=h193!y`)>TC!pki=r|d&(Q0RK0UR7 zvWluo$K~>}WQ%R#osPFe(1R0JJ3Lu<*;)fT%Tjt(f~hpm2g&9#xm~GDEX~s&5#L7P zAc2$zzhiUbf7n!tW#Y1Q=nF+b)|HWpjUP))xW#RrUo&?sf9%H#BE9=2BQ|O_q(Ix0@5Hus8Bpst7@%pn zr35--$O(2D$g{KAlMpToPV zT|KfocQGgoaRPT-&`sWAL~6}v3}|Rvmx4OY^M{{4ESUTsD@RIN!(vaqXNmir)+{K^ zc*=cX{#HHMWh^x`F2?e)brIB$!9VL8a_Rihr4xeAa#JEUY?t~ODOIVwtQ zxd(SHrL1%tcY*rGTb*E+wxnlQI#(Jmu!6S#lZPi)cfTiH%?jSpqE9;|JQ^=*?*L;g-~zoG15KQQIzPI+mm723M3td%w`N|3dt|LE+2C-uDX+jSH#?K{`?RhNl*a zf>L~H_uTw`BIQfXw>J<;erDqK#{G~O&rRG;t&s!#O{2Ht(O%{Q2|J?%AN14{yex$T zKQtc{&oqN#r;6e}iXTbqDHHg|+#x2a>I=v#&{k>N{Ba>WH%4bZ>H6x_hET6G5*E%6Z zyL_gHxwa2d?32f2%ylWGsFcT=B-dM%F(-4~0V%TbIFQ_67xJ;*B62G#;EmBykSkn|Yb{zM0v5J~GxP z{>aJ_5FOs&!im$tSrNk>-HaWe$I~hS%E+W~4!op+djfv4%^l1xvmg|QxD=P;%1snQ zCxYxFXwWS#n zN_S-MWdWgHH71eqyce|YkhPg|!ur=($2t`%q&h!pVcsU@jSR%RbUsK=c02#6p{s^0 zXL{x2{N5zpb(pKonq1X8*R+)Hw$|B*Dv{Q#| z*9Dh|+u?)DJG??h9OdSTD05FTw-fbVCHIR8F&`c!ZymE3hY!$bC6h&&*bqKU!bL6& z;T6(WR3e1$HR58_0~ObF*?GhSuk~TK-2k8TX|KniAFFz7fFR*yKMd;CvJsqGJAKV1 zPD`eSPMy(sy3ooPS}0OM(y0V(O-)T2`!$xZHq@`p&>8(!DD^X4f20hV9%MFvVU#0c z{Y zIcg>Pke8#@qmTa5q=1)=#YqQRt_dV1{8=ie{2B=K0A6u78)#Uq6;z&I6NH3XfYnGD8h3lhPZH6p_>~NQS50wW6qi+Kv;5MBAt}PRQf0M$qVLFR}o9Ny^ OEZ$0O??f$=mj3}i8`*3C diff --git a/skills/logwatch.py b/skills/logwatch.py index 44439e4..250421b 100644 --- a/skills/logwatch.py +++ b/skills/logwatch.py @@ -26,6 +26,7 @@ USAGE = ( "SKILL:logwatch ARGS:overage \n" "SKILL:logwatch ARGS:analyze \n" "SKILL:logwatch ARGS:analyze_all\n" + "SKILL:logwatch ARGS:report [hostname] [YYYY-MM-DD]\n" "SKILL:logwatch ARGS:collect [since]\n" "SKILL:logwatch ARGS:retention \n" "SKILL:logwatch ARGS:logs [N]\n" @@ -260,6 +261,54 @@ def run(args: str, context) -> str: ) return "\n".join(lines) + # ── report [date] ────────────────────────────────────────────── + if action == 'report': + p = rest.split(None, 1) + hostname = p[0].strip() if p else '' + date_str = p[1].strip() if len(p) > 1 else '' + + if not hostname: + # Sans hostname : liste les derniers rapports toutes machines + with _db(context) as conn: + rows = conn.execute( + "SELECT m.hostname, r.report_date, r.logs_count, r.created_at " + "FROM reports r JOIN machines m ON m.id=r.machine_id " + "ORDER BY r.id DESC LIMIT 20" + ).fetchall() + if not rows: + return "Aucun rapport stocké." + lines = ["── Rapports disponibles ──────────────────────"] + for r in rows: + lines.append( + f" {r['report_date']} | {r['hostname']:<30s} | {r['logs_count']} erreurs" + ) + lines.append("\nUtilise : logwatch report [YYYY-MM-DD]") + return "\n".join(lines) + + with _db(context) as conn: + m = conn.execute( + "SELECT id FROM machines WHERE hostname=?", (hostname,) + ).fetchone() + if not m: + return f"Machine '{hostname}' introuvable." + + if date_str: + row = conn.execute( + "SELECT content, report_date, logs_count FROM reports " + "WHERE machine_id=? AND report_date=? ORDER BY id DESC LIMIT 1", + (m['id'], date_str) + ).fetchone() + else: + row = conn.execute( + "SELECT content, report_date, logs_count FROM reports " + "WHERE machine_id=? ORDER BY id DESC LIMIT 1", + (m['id'],) + ).fetchone() + + if not row: + return f"Aucun rapport trouvé pour '{hostname}'" + (f" le {date_str}" if date_str else "") + "." + return f"[{row['report_date']} — {row['logs_count']} erreurs]\n\n{row['content']}" + # ── collect [since] ─────────────────────────────────────────────────────── if action == 'collect': since = rest.strip() or 'yesterday'