feat(monitoring): surveillance réseau active via blackbox_exporter

Sondes actives ICMP/HTTP/DNS qui complètent le monitoring passif
(node_exporter + up{}) : joignabilité hôtes/passerelle, accès internet,
santé DNS *.lab.local + forwarding, latence LAN, services de bout en
bout via Traefik.

- blackbox_exporter (chart 11.13.0, ArgoCD, ns monitoring) — ICMP via
  NET_RAW, DNS du pod = dnsmasq (chemin réel lab → Traefik)
- 3 jobs blackbox-icmp/-http/-dns (additionalScrapeConfigs)
- alerts-network.yaml : internet, DNS, passerelle, hôtes, services,
  latence, exporter (→ pipeline AlertManager existant)
- Asa : outil network_status + contexte présélectionnable reseau
- doc admin/infra/reseau.md + CLAUDE.md + progress

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rc3dLKfqEPHexvFCCx5ZEF
This commit is contained in:
Claude 2026-06-25 12:43:13 +00:00
parent ebb2eec184
commit 649c6fde8e
No known key found for this signature in database
11 changed files with 527 additions and 5 deletions

View file

@ -131,6 +131,11 @@ async def _cluster_status(args: dict, deps: ToolDeps) -> str:
return await sources.cluster_block(deps.client)
async def _network_status(args: dict, deps: ToolDeps) -> str:
# Réutilise le bloc surveillance réseau (sondes actives blackbox).
return await sources.network_block(deps.client)
async def _prometheus_query(args: dict, deps: ToolDeps) -> str:
expr = (args.get("expr") or "").strip()
if not expr:
@ -243,6 +248,21 @@ _TOOLS: dict[str, tuple[dict, object]] = {
},
_cluster_status,
),
"network_status": (
{
"type": "function",
"function": {
"name": "network_status",
"description": "État LIVE du réseau du homelab (sondes actives blackbox) : "
"joignabilité des hôtes et de la passerelle, accès internet, santé DNS "
"(*.lab.local), latence LAN et services injoignables. À utiliser pour "
"« est-ce que le réseau / internet / le DNS fonctionne ? » ou "
"« quel hôte ne répond plus ? ».",
"parameters": {"type": "object", "properties": {}},
},
},
_network_status,
),
"prometheus_query": (
{
"type": "function",