AI Log Monitor
Tento dokument popisuje funkčnost, nasazení a zdrojový kód skriptu log_monitor.py, který sbírá logy z databáze Loki, nechává je analyzovat umělou inteligencí (Google Gemini Flash) a v případě nalezení kritických chyb zakládá GitHub Issues a odesílá report na Telegram.
[!NOTE] Dříve existovaly také skripty
loki_search.py(CLI vyhledávání) acheck_homelab.py(korelace issues s logy). Oba byly smazány — jejich funkcionalitu plně nahrazují Grafana MCP tools (query_loki_logs,query_loki_stats,query_loki_patterns) dostupné přímo v AI agentu.
Architektura
- Kde to běží: LXC kontejner
debian-services(192.168.20.20), složka/opt/scripts/. - Spouštění: Nativní
systemdtimer (spouští se automaticky ve 08:00 a 20:00). - Vstupy:
- Dotaz do API služby Loki (
http://localhost:3100/loki/api/v1/query_range), která beží na stejném serveru v Dockeru. - Konfigurační soubor
/opt/scripts/log_monitor.env(obsahuje API klíče).
- Dotaz do API služby Loki (
- Výstupy:
- Telegram Bot API (zpráva odeslána definovanému uživateli) + GitHub Issues.
- Vlastní strukturované logy (modul
logging): INFO → stdout, WARNING/ERROR → stderr. Pod systemd jde obojí do journald, takže chyby samotného monitoru (selhání Loki, Gemini, GitHubu, Telegramu, nevalidní JSON z Gemini) jsou dohledatelné v journalu (a odtud v Loki) —journalctl -u log-monitor.service, ne jen v Telegramu.
1. Zdrojový kód
Skript žije v repu — jediný zdroj pravdy:
scripts/log_monitor.py
(čistý Python, jen urllib/json, bez venv). Needituj kopii v dokumentaci —
tahle stránka popisuje jen architekturu, nasazení a provoz.
Co dělá: dotáhne logy z Loki za posledních N hodin → odfiltruje šum a dedupuje → pošle do Gemini k triáži → výsledek jde na Telegram a zakládá GitHub Issues (s denním limitem). Při selhání všech Loki dotazů pošle varování, ne falešné „čisto".
Triáž a re-surface (proč seznam issues neroste donekonečna)
- Nové issue se založí jen pro reálný problém, ne pro šum. Přechodné jednorázovky
(např. Tailscale „context canceled"), boot-only selhání na hostu s dlouhým uptime
(např.
systemd-networkd-wait-online) a známý benigní log šum (např. UniFiwevent Resource busy) Gemini klasifikuje jako P2 — a P2 issue nezakládá. - Už otevřené issue se při dalším 12h běhu znovu nekomentuje. Re-surface (komentář
- Telegram) nastane jen při seriózním opakování: priorita P0 vždy, P1 až když
počet výskytů v okně překročí
SERIOUS_RECURRENCE_THRESHOLD(default 50). Tím se totéž neomílá každých 12 h. - Zavírání issues je ruční — monitor je sám nezavírá.
2. Plánování pomocí Systemd
Aby skript běžel asynchronně na pozadí, nevyužívá se klasický cron, ale systemd timers, což zabezpečuje lepší sběr logů a kontrolu timeoutů.
/etc/systemd/system/log-monitor.service
Tento soubor definuje, jak se má skript spustit. Důležité je specifikovat EnvironmentFile, odkud skript čerpá API klíče. Argument --hours 12 určuje ohlédnutí o 12 hodin dozadu.
[Unit]
Description=AI Log Monitor - Analyzes Loki logs with Gemini Flash
After=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/opt/scripts/log_monitor.env
ExecStart=/usr/bin/python3 /opt/scripts/log_monitor.py --hours 12
TimeoutSec=120
[Install]
WantedBy=multi-user.target
/etc/systemd/system/log-monitor.timer
Timer určuje kadenci spouštění (08:00 ráno a 20:00 večer).
[Unit]
Description=Run AI Log Monitor every 12 hours
[Timer]
OnCalendar=*-*-* 08,20:00:00
Persistent=true
RandomizedDelaySec=300
[Install]
WantedBy=timers.target
3. Nasazení a Údržba (Deployment)
Jelikož se skript nespouští z gitu, ale z izolované složky na serveru, je nutné po každé úpravě lokálního souboru scripts/log_monitor.py vynutit jeho přenos na Debian server:
# Z PC (ha-config repozitáře)
scp scripts/log_monitor.py root@192.168.20.20:/opt/scripts/log_monitor.py
Při změně parametrů timeru nebo služby je nutné na serveru provést daemon-reload:
# Na serveru
systemctl daemon-reload
4. Prvotní instalace
- Vytvoření prostředí na serveru:
mkdir -p /opt/scripts/ # Vytvořit .env soubor (musí obsahovat citlivé tokeny) cat <<EOF > /opt/scripts/log_monitor.env GEMINI_API_KEY="AIza...<doplň-svůj-klíč>" TELEGRAM_BOT_TOKEN="<bot-token>" TELEGRAM_CHAT_ID="<chat-id>" GITHUB_TOKEN="ghp_<doplň-svůj-token>" GITHUB_REPO="docek/ha-config" EOF chmod 600 /opt/scripts/log_monitor.env - Kopírování souborů: Přenos scriptu, timeru a service souborů na jejich místa.
- Povolení a start:
systemctl daemon-reload systemctl enable log-monitor.timer systemctl start log-monitor.timer - Ad-hoc spuštění:
systemctl start log-monitor.service # Sledování průběhu: journalctl -u log-monitor.service -f