n8n + AI: automatyczne wzbogacanie i opisywanie alarmów
Systemy monitoringu (Zabbix, Prometheus, itp.) wysyłają alarmy, które dla człowieka o 3 w nocy są mało czytelne: „Interface port18-TX down". n8n to narzędzie do automatyzacji (open-source, self-hosted), którym można te alarmy przechwycić, dociągnąć kontekst na żywo z API urządzeń, a następnie kazać modelowi AI napisać zrozumiały opis: co się stało, kogo dotyczy i jak pilne to jest. Pokażę szkielet takiego workflow.
Architektura workflow
Przepływ, który się sprawdza w praktyce:
- Trigger IMAP — n8n czyta skrzynkę, na którą monitoring wysyła alarmy.
- Filtr — reagujemy tylko na maile alarmowe (po temacie/nadawcy).
- Debounce (opcjonalnie) — węzeł
Waitnp. 15 min; jeśli w tym czasie przyjdzie „Resolved", nie zawracamy nikomu głowy (odsiewa krótkie mignięcia łącza). - Wzbogacanie (HTTP Request + Code) — logujemy się do API urządzenia i dociągamy stan na żywo.
- Model AI — węzeł Anthropic/OpenAI dostaje alarm + dane i pisze opis.
- Wyjście — mail/Slack/ticket z gotowym, czytelnym opisem.
Krok 1: wzbogacanie danymi z API
Sam alarm to za mało. Zanim oddamy sprawę modelowi, dociągamy fakty. Przykład węzła Code, który po zalogowaniu do API pobiera stan urządzenia i skleja czytelny blok tekstu:
// węzeł Code (typeVersion 2) — po węźle logowania do API
const token = $('API login').first().json.access_token;
const alarm = $('Filtr').first().json;
const info = await this.helpers.httpRequest({
method: 'GET',
url: `https://api.example.net/device/${alarm.deviceId}`,
headers: { Authorization: 'Bearer ' + token },
json: true,
// dla self-signed certów:
skipSslCertificateValidation: true,
});
const live =
`Urządzenie: ${info.name} (${info.model})\n` +
`Uptime: ${info.uptime}\n` +
`Temperatura: ${info.temp}°C\n` +
`Aktywni klienci: ${info.activeClients}`;
return [{ json: { ...alarm, live } }];
To najważniejszy krok — jakość opisu = jakość danych, które tu zbierzesz. Warto dołożyć np. liczbę dotkniętych klientów, czy interfejs to uplink (wpływ na całe urządzenie), historię innych alarmów na tym hoście, ping ICMP.
Krok 2: węzeł modelu AI
Do wzbogaconych danych podpinamy model. W n8n jest gotowy węzeł Anthropic (LangChain). Kluczowe: instrukcję systemową daj w polu system, a same fakty w wiadomości użytkownika. Przykład promptu systemowego:
Jesteś inżynierem NOC. Na podstawie surowego alarmu i danych na żywo napisz zwięzły opis po polsku: (1) co się stało, (2) prawdopodobny zasięg/kogo dotyczy, (3) priorytet (P1–P4) z uzasadnieniem. Nie zmyślaj — jeśli danych brak, napisz „brak danych". Maks. 6 zdań.
W treści wiadomości przekazujesz np. {{ $json.live }} oraz surowy tekst alarmu. Model zwróci gotowy akapit, który wstawiasz do maila/ticketu.
Krok 3: praktyczne pułapki
- Puste
textPlain— wiele systemów (np. Zabbix) wysyła alarmy jako HTML, a pole tekstowe jest puste. Czytaj temat itextHtml, wyciągając ID problemu regexem, zamiast polegać natextPlain. - Self-signed certy w API — ustaw
skipSslCertificateValidation: truewhttpRequest(albo „Allow Unauthorized Certs" w węźle HTTP), inaczej logowanie padnie. - Import/eksport workflow — CLI
n8n import:workflowpotrafi zdezaktywować workflow; po imporcie aktywuj go z powrotem i zrestartuj usługę. - Sekrety — klucze API trzymaj w Credentials n8n, nie na sztywno w węzłach Code.
VPS albo mini-PC pod n8n i automatyzacje
n8n w Dockerze pociągnie tani VPS (2 vCPU / 2–4 GB) albo domowy mini-PC. Jeśli automatyzacje mają działać 24/7 i być dostępne z zewnątrz, VPS jest wygodniejszy.
Zobacz hosting/VPS pod n8n ›Podsumowanie
- n8n przechwytuje alarm, dociąga kontekst z API i oddaje modelowi fakty, nie domysły.
- Debounce (
Wait) odsiewa krótkie migotania i ogranicza szum. - Instrukcja systemowa pilnuje, żeby model streszczał, a nie zmyślał.
- Największą wartość daje krok wzbogacania — im lepsze dane, tym lepszy opis.