Dina automationer fallerar. Det verkliga problemet är vad som händer sedan: antingen märker ingen något förrän kunderna klagar, eller så blir alla nedskräpade med “fel”-mejl tills de börjar ignorera dem.
Den här typen av upplägg för Postgres e-postaviseringar slår hårdast mot Ops-team, men även byråägare som kör klientflöden och marknadsteam som är beroende av schemalagda jobb drabbas. Du kommer att logga varje fel för senare analys, samtidigt som aviseringarna förblir lugna och användbara.
Det här arbetsflödet gör om brusiga felfändelser till en strukturerad Postgres-logg plus ett aviseringsmönster: “skicka högst ett mejl var 5:e minut”. Du får se hur det fungerar, vad du behöver och var du kan anpassa det på ett säkert sätt.
Så fungerar automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Postgres + e-post: felloggar utan varningsspam
flowchart LR
subgraph sg0["Failure Event Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Failure Event Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Write Error Log"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Count Recent Logs"]
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Inbound Error Handler", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Recent Log Count", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Finalize Execution Cleanup"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Add Custom Error Actions", pos: "b", h: 48 }
n1 --> n11
n0 --> n1
n0 --> n2
n2 --> n10
n10 --> n12
n10 --> n11
n9 --> n1
n9 --> n2
end
subgraph sg1["Flow 2"]
direction LR
n3@{ icon: "mdi:message-outline", form: "rounded", label: "Primary Email Alert", pos: "b", h: 48 }
n4@{ icon: "mdi:message-outline", form: "rounded", label: "Secondary Email Alert", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/pushover.svg' width='40' height='40' /></div><br/>Mobile Push Notice"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Run Sub-Workflow (Configure ..", pos: "b", h: 48 }
n3 --> n4
n8 --> n3
n8 --> n5
end
subgraph sg2["Manual Cleanup Start Flow"]
direction LR
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Clear Log Table"]
n7@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Cleanup Start", pos: "b", h: 48 }
n7 --> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n9,n7 trigger
class n10 decision
class n1,n2,n6 database
class n11 code
class n3 disabled
class n4 disabled
class n5 disabled
class n8 disabled
classDef customIcon fill:none,stroke:none
class n1,n2,n11,n5,n6 customIcon
Problemet: brusiga aviseringar, saknad kontext och återkommande fel
Felhantering börjar ofta med goda intentioner: “Mejla mig bara när det går sönder.” Sedan lanserar du några flöden, lägger till scheman, integrerar API:er, och plötsligt skapar ett enda avbrott uppströms 50 fel på 10 minuter. Inkorgen blir övervakningssystemet. Folk tystar tråden. Samtidigt ligger det viktiga (vad som gick fel, var och hur ofta) utspritt i enskilda körningsloggar, så att hitta återkommande problem blir en manuell skattjakt. Och om du jobbar med kunder blir det ännu värre: du reagerar på brus i stället för att åtgärda rotorsaker.
Det eskalerar snabbt. Här är var det vanligtvis brister.
- När ett API blir instabilt kan du få en kaskad av aviseringar som ser olika ut men kommer från samma rotproblem.
- Kritisk kontext finns inne i n8n:s körningsdetaljer, vilket betyder mer klickande när du redan är i “brandkårs”-läge.
- Manuellt “logga det någonstans senare” händer aldrig, så mönster syns först efter tredje eller fjärde incidenten.
- En enkel regel som “skicka mejl vid fel” tränar teamet att ignorera mejl, inklusive det som faktiskt är viktigt.
Lösningen: logga allt till Postgres, avisera med ett vettigt intervall
Det här flödet använder n8n:s felfändelser för att göra två saker samtidigt. Först blir varje fel en strukturerad post i Postgres, så att du alltid har en sökbar historik med titel, meddelande, stack trace, senaste nod, en URL tillbaka till körningen och den råa JSON-payloaden. Sedan kontrollerar det hur många fel som har inträffat nyligen och skickar bara aviseringar när det är rimligt (exempel: “högst en avisering var 5:e minut”). Det ger full insyn utan konstant mejlbombardemang. Det finns även en valfri städrutin som är praktisk i utveckling, där du kan vilja återställa status efter att ha testat fel.
Flödet startar när en felfändelse fångas (antingen från den inbyggda fel-triggern eller från ett annat flöde som anropar det). Det skriver felet till Postgres, räknar nyligen skapade loggrader och använder en If-kontroll för att avgöra mellan “skicka en avisering nu” eller “logga tyst och gå vidare”. Till sist kör det en städrutin för att avsluta körningen och undvika att lämna saker halvt öppna.
Det här får du: automation vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du kör 12 schemalagda arbetsflöden. Ett externt API börjar tajma ut och triggar 30 fel på 10 minuter. Manuell avisering kan innebära 30 separata mejl plus cirka 5 minuter varje gång för att öppna körningen och plocka detaljer, vilket blir ungefär 2 timmar av avbrott. Med det här flödet loggas felen automatiskt, och du får högst två aviseringsmejl under samma 10-minutersfönster (ett per 5 minuter) med den viktigaste kontexten. Du ser fortfarande problemet, men du drunknar inte i det.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- PostgreSQL för att lagra en sökbar fellogg
- E-postleverantör för att skicka aviseringsnotiser
- Postgres-inloggningsuppgifter (skapa en användare med tabellåtkomst)
Svårighetsgrad: Medel. Du ska vara bekväm med att lägga in inloggningsuppgifter i n8n och skapa en Postgres-tabell från angiven SQL.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En felfändelse startar flödet. Flödet kan starta från n8n:s inbyggda fel-trigger, eller anropas av ett annat flöde som ett dedikerat del-flöde för felhantering.
Felet loggas till Postgres. Steget “Write Error Log” lägger in en rad i din N8Err-tabell och sparar meddelandet, stacken, senaste noden och rå JSON så att du kan felsöka senare utan att öppna gamla körningar igen.
En volymkontroll förhindrar aviseringsspam. En andra Postgres-fråga räknar hur många loggar som skapats nyligen, och sedan avgör en If-villkor om din “Primary Email Alert” ska triggas eller om flödet ska ligga lågt just nu.
Aviseringar och städning sker på slutet. Om tröskeln säger “avisera” skickas mejl (och valfritt en pushnotis). Den avslutande städkoden återställer körningsstatus och avslutar korrekt. Det finns också en manuell trigger-väg för att rensa loggtabellen, vilket är användbart i utveckling.
Du kan enkelt ändra regeln “var 5:e minut” så att den matchar din tolerans (eller eskalera efter upprepade fel). Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera feltriggern
Det här arbetsflödet startar när en körning misslyckas, samlar in feldata för loggning och strypt avisering.
- Lägg till och öppna Failure Event Trigger för att lyssna på arbetsflödesfel.
- Behåll standardinställningarna i Failure Event Trigger (inga parametrar krävs).
- Notera den parallella routningen: Failure Event Trigger skickar utdata parallellt till både Write Error Log och Count Recent Logs.
Steg 2: anslut Postgres och logga fel
Dessa noder skriver feldetaljer till Postgres och frågar efter nyliga fel för att tillämpa strypning av aviseringar.
- Öppna Write Error Log och ställ in Schema till
p1gq6ljdsam3x1moch Table tillN8Err. - Bekräfta att kolumnmappningarna i Write Error Log använder uttryck som
{{$json.execution.url}},{{JSON.stringify($json)}},{{$json.execution.error.stack}},{{$json.workflow.name}},{{$json.execution.error.message}},{{$json.execution.lastNodeExecuted}}och{{$now}}. - Inloggning krävs: Anslut era postgres-uppgifter till Write Error Log.
- Öppna Count Recent Logs och ställ in Query till
SELECT count(*) FROM p1gq6ljdsam3x1m."N8Err" where created_at >= $1;. - Ställ in Query Replacement till
{{$now.minus(5, 'minutes').toString()}}och behåll Operation somexecuteQuery. - Inloggning krävs: Anslut era postgres-uppgifter till Count Recent Logs.
Steg 3: konfigurera strypningslogik och anpassade åtgärder
Det här steget styr när aviseringar ska gå vidare och ger en hook för extra felåtgärder.
- Öppna Check Recent Log Count och verifiera att villkoret använder
{{$json.count}}med operatornlteoch Right Value0. - Koppla true-utgången från Check Recent Log Count till Add Custom Error Actions och false-utgången till Finalize Execution Cleanup.
- Använd Add Custom Error Actions som en platshållare för ytterligare felhanteringssteg som ni kan lägga till senare.
- Öppna Finalize Execution Cleanup och behåll JavaScript Code som
return [];för att avsluta körningen på ett säkert sätt.
count, justera villkoret i Check Recent Log Count därefter.Steg 4: konfigurera aviseringar och routning till sub-arbetsflöde
Aviseringar skickas via e-post och mobil push, och kan vid behov triggas av en körning av ett sub-arbetsflöde.
- Öppna Run Sub-Workflow (Configure Required) och välj målflödets ID i Workflow ID.
- Notera den parallella routningen: Run Sub-Workflow (Configure Required) skickar utdata parallellt till både Primary Email Alert och Mobile Push Notice.
- I Primary Email Alert, ställ in To Email och From Email till
[YOUR_EMAIL], och behåll uttrycken för Text och Subject som angivet (till exempel{{ $("Failure Event Trigger").item.json.execution.error.message }}). - Inloggning krävs: Anslut era smtp-uppgifter till Primary Email Alert.
- I Secondary Email Alert, behåll samma fält och uttryck, och ställ in To Email/From Email till den adress ni vill använda.
- Inloggning krävs: Anslut era smtp-uppgifter till Secondary Email Alert.
- I Mobile Push Notice, ställ in User Key till
[CONFIGURE_YOUR_TOKEN]och behåll Message-uttrycket. - Inloggning krävs: Anslut era pushoverApi-uppgifter till Mobile Push Notice.
- Aktivera de avstängda aviseringsnoderna (Primary Email Alert, Secondary Email Alert och Mobile Push Notice) när ni är redo att ta emot notiser.
Steg 5: lägg till manuell städning och inkommande felhantering
Manuell städning gör att ni kan rensa loggtabellen, och inkommande hantering gör att andra arbetsflöden kan vidarebefordra sina fel till detta arbetsflöde.
- Öppna Manual Cleanup Start för att aktivera en manuell trigger för underhållskörningar.
- I Clear Log Table, ställ in Schema till
p1gq6ljdsam3x1moch Table tillN8Err, med Operation somdeleteTableoch Restart Sequences aktiverat. - Inloggning krävs: Anslut era postgres-uppgifter till Clear Log Table.
- Öppna Inbound Error Handler och behåll Input Source inställt på
passthroughför att ta emot fel från sub-arbetsflöden. - Notera den parallella routningen: Inbound Error Handler skickar utdata parallellt till både Write Error Log och Count Recent Logs.
Steg 6: testa och aktivera ert arbetsflöde
Verifiera felinsamling, strypningslogik och leverans av aviseringar innan ni aktiverar det här arbetsflödet för produktionsanvändning.
- Kör manuellt ett arbetsflöde som förväntas misslyckas så att Failure Event Trigger triggas.
- Bekräfta att Write Error Log lägger in en rad i
p1gq6ljdsam3x1m.N8Erroch att Count Recent Logs returnerar ett antal. - Verifiera att Check Recent Log Count routar till Add Custom Error Actions när antalet uppfyller villkoret
lte 0. - Om aviseringar är aktiverade, validera leverans från Primary Email Alert, Secondary Email Alert och Mobile Push Notice.
- Kör Manual Cleanup Start för att bekräfta att Clear Log Table fungerar som förväntat.
- Slå på arbetsflödet med Active för produktion när testerna passerar.
Vanliga fallgropar
- Postgres-inloggningsuppgifter kan gå ut eller sakna tabellbehörigheter. Om inserts misslyckas, kontrollera n8n-credential, schemanamn och att användaren kan skriva till
"N8Err". - Om du lägger in waits eller är beroende av externa tjänster (som pushnotiser) kan tiderna variera. Öka eventuell väntetid om noder längre ned kör innan data finns tillgängligt.
- AI-genererade sammanfattningar (om du aktiverar AI Agent/OpenAI-delarna) kan bli intetsägande. Sätt formatet tidigt, annars kommer du fortsätta skriva om “vad som hände” i varje avisering.
Vanliga frågor
Cirka 30 minuter om Postgres är klart.
Nej. Du klistrar mest in inloggningsuppgifter och kör SQL:en för att skapa tabellen en gång.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för e-postleverantör och eventuell OpenAI-användning om du aktiverar AI-sammanfattningen (oftast bara några ören per dag vid låg volym).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, men behåll logiken konsekvent. Ändra tidsfönstret i Postgres-frågan “Count Recent Logs” och uppdatera If-villkoret “Check Recent Log Count” så att det matchar din nya tröskel. Vanliga anpassningar är att eskalera till Secondary Email Alert först efter upprepade fel, lägga till en annan kanal (som Slack) i “Add Custom Error Actions” eller byta mejlinnehållet så att det inkluderar en kort AI-genererad sammanfattning från AI Agent/OpenAI Chat Model.
Oftast handlar det om behörigheter eller att schema/tabell inte matchar. Bekräfta att tabellen "N8Err" finns i samma schema som din Postgres-nod pekar på, och att databasanvändaren kan göra inserts och skapa index om du använder exempel-DDL:en. Om det fungerade en gång och sedan slutade, kontrollera roterade lösenord eller en uppdaterad brandväggs-/VPC-regel. Dubbelkolla även citattecken, eftersom kolumnnamn med blandad skiftläge som "LastNode" kan vara känsliga.
Väldigt många, eftersom det mesta är enkla inserts och en count-fråga.
Ofta, ja, särskilt för felhantering. Zapier och Make fungerar bra för raka automationer, men de blir klumpiga när du behöver villkorsstyrd throttling, en riktig databaslogg och städlogik som kör tillförlitligt efter fel. n8n ger dig också ett alternativ för egen drift, så du betalar inte mer bara för att ett avbrott genererade många händelser. Nackdelen är att du lägger lite mer tid i början på att sätta upp Postgres och inloggningsuppgifter. Om du är osäker, prata med en automationsexpert så kartlägger vi det mot din volym och din risktolerans.
Du får full insyn i fel utan att träna teamet att ignorera aviseringar. Sätt upp det en gång, så blir nästa avbrott helt enkelt enklare att hantera.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.