에러를 기록하고 이메일을 많이 보내지 않도록 합니다
고급
이것은Engineering, AI, IT Ops분야의자동화 워크플로우로, 16개의 노드를 포함합니다.주로 If, Code, Postgres, Pushover, EmailSend 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. PostgreSQL 로그 기록과 제한 속도 알림을 포함한 에러 처리 시스템
사전 요구사항
- •PostgreSQL 데이터베이스 연결 정보
사용된 노드 (16)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "YybYYc430rmZWJPJ",
"meta": {
"instanceId": "febfa0961d1e55a48938f0337f348b73a50538aa16673607611ead85d95f662c",
"templateCredsSetupCompleted": true
},
"name": "Log errors and avoid sending too many emails",
"tags": [
{
"id": "7YoU4oTsaGGEtWJj",
"name": "sample",
"createdAt": "2025-01-31T16:41:27.407Z",
"updatedAt": "2025-01-31T16:41:27.407Z"
}
],
"nodes": [
{
"id": "0e44df4c-00d2-4545-89ae-844a590de369",
"name": "오류 트리거",
"type": "n8n-nodes-base.errorTrigger",
"position": [
-1180,
40
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7101542a-5146-4917-a1f2-13686cad197e",
"name": "로그 삽입",
"type": "n8n-nodes-base.postgres",
"position": [
-960,
-10
],
"parameters": {
"table": {
"__rl": true,
"mode": "list",
"value": "N8Err",
"cachedResultName": "N8Err"
},
"schema": {
"__rl": true,
"mode": "name",
"value": "p1gq6ljdsam3x1m"
},
"columns": {
"value": {
"URL": "={{ $json.execution.url }}",
"json": "={{ JSON.stringify($json) }}",
"Stack": "={{ $json.execution.error.stack }}",
"title": "={{ $json.workflow.name }}",
"Message": "={{ $json.execution.error.message }}",
"LastNode": "={{ $json.execution.lastNodeExecuted }}",
"created_at": "={{ $now }}"
},
"schema": [
{
"id": "id",
"type": "number",
"display": true,
"removed": true,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "created_at",
"type": "dateTime",
"display": true,
"required": false,
"displayName": "created_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "updated_at",
"type": "dateTime",
"display": true,
"removed": true,
"required": false,
"displayName": "updated_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "created_by",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "created_by",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "updated_by",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "updated_by",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "nc_order",
"type": "number",
"display": true,
"removed": true,
"required": false,
"displayName": "nc_order",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL",
"type": "string",
"display": true,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stack",
"type": "string",
"display": true,
"required": false,
"displayName": "Stack",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "json",
"type": "object",
"display": true,
"required": false,
"displayName": "json",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LastNode",
"type": "string",
"display": true,
"required": false,
"displayName": "LastNode",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"credentials": {
"postgres": {
"id": "2VsRB7eDnG0FA3z2",
"name": "Postgres Nocodb"
}
},
"typeVersion": 2.6
},
{
"id": "8fb1201c-353e-466c-8d08-fd969e6b10b1",
"name": "5분간 카운트",
"type": "n8n-nodes-base.postgres",
"position": [
-960,
-210
],
"parameters": {
"query": "SELECT count(*) FROM p1gq6ljdsam3x1m.\"N8Err\" where created_at >= $1;\n",
"options": {
"queryReplacement": "={{ $now.minus(5, 'minutes').toString() }}"
},
"operation": "executeQuery"
},
"credentials": {
"postgres": {
"id": "2VsRB7eDnG0FA3z2",
"name": "Postgres Nocodb"
}
},
"typeVersion": 2.6
},
{
"id": "89f836dc-8141-4c20-a758-bf7ff261a87b",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2260,
-300
],
"parameters": {
"color": 5,
"width": 820,
"height": 1140,
"content": "# Log errors and avoid sending too many emails\n\n## Use case\n\nMost of the time, it’s necessary to log all errors that occur. However, in some cases, a scheduled task or service consuming excessive resources might trigger a surge of errors.\n\nTo address this, we can log all errors but limit alerts to a maximum of one notification every 5 minutes.\n\n## What this workflow does\n\nThis workflow can be configured to receive error events, or you can integrate it **before your own error-handling logic.** \n\nIf used as the **primary error handler**, note that this flow will **only add a database log entry** and take no further action. You’ll need to add your own alerts (e.g., email or push notifications). Below is an example of a notification setup I prefer to use. \n\nAt the end, there’s an **error cleanup** option. This feature is particularly useful in development environments. \n\nIf you already have an error-handling workflow, you can call this one as a **sub-workflow**. Its final steps include cleanup logic to reset the execution state and terminate the workflow.\n\n## Setup\n\n**Verify all Postgres nodes and credentials when using the 'Error Handling Sample'**\n\n## How to adjust it to your needs\n\n1) You can set this workflow as a sub-workflow within your existing error-handling setup.\n\n2) Alternatively, you can add the \"Error Handling Sample\" at the end of this workflow, which sends email and push notifications.\n\nConfiguration Requirements:\n\n⚠️ You must create a database table for this to work!\n\n\n\nDDL of this sample:\n\ncreate table p1gq6ljdsam3x1m.\"N8Err\"\n(\n id serial\n primary key,\n created_at timestamp,\n updated_at timestamp,\n created_by varchar,\n updated_by varchar,\n nc_order numeric,\n title text,\n \"URL\" text,\n \"Stack\" text,\n json json,\n \"Message\" text,\n \"LastNode\" text\n);\n\nalter table p1gq6ljdsam3x1m.\"N8Err\"\n owner to postgres;\n\ncreate index \"N8Err_order_idx\"\n on p1gq6ljdsam3x1m.\"N8Err\" (nc_order);\n\nby Davi Saranszky Mesquita\nhttps://www.linkedin.com/in/mesquitadavi/"
},
"typeVersion": 1
},
{
"id": "fba7fec5-5285-46bd-9cc7-270b7dcc8c5f",
"name": "기본 이메일",
"type": "n8n-nodes-base.emailSend",
"onError": "continueErrorOutput",
"disabled": true,
"position": [
-960,
300
],
"webhookId": "d76d2e82-b0a8-4e35-88f9-1815d4ce6c79",
"parameters": {
"text": "={{ $(\"Error Trigger\").item.json.execution.url }}\n\n{{ $(\"Error Trigger\").item.json.execution.lastNodeExecuted }}\n\n{{ $(\"Error Trigger\").item.json.execution.error.message }}\n{{ $(\"Error Trigger\").item.json.execution.error.stack }}",
"options": {
"appendAttribution": false
},
"subject": "=Erro - {{ $(\"Error Trigger\").item.json.workflow.name }}",
"toEmail": "davimesquita@gmail.com",
"fromEmail": "suporte@ideias.casa",
"emailFormat": "text"
},
"credentials": {
"smtp": {
"id": "0YIoKeISQNR2kxwO",
"name": "SMTP Resent"
}
},
"typeVersion": 2.1
},
{
"id": "979d0e82-42e8-450a-95b1-3c204ad61a50",
"name": "대체 이메일",
"type": "n8n-nodes-base.emailSend",
"disabled": true,
"position": [
-740,
300
],
"webhookId": "d76d2e82-b0a8-4e35-88f9-1815d4ce6c79",
"parameters": {
"text": "={{ $(\"Error Trigger\").item.json.execution.url }}\n\n{{ $(\"Error Trigger\").item.json.execution.lastNodeExecuted }}\n\n{{ $(\"Error Trigger\").item.json.execution.error.message }}\n{{ $(\"Error Trigger\").item.json.execution.error.stack }}",
"options": {
"appendAttribution": false
},
"subject": "=Erro - {{ $(\"Error Trigger\").item.json.workflow.name }}",
"toEmail": "davimesquita@gmail.com",
"fromEmail": "contato@ideias.casa",
"emailFormat": "text"
},
"credentials": {
"smtp": {
"id": "UvWloRL7Jyqt8tm9",
"name": "SMTP Contato"
}
},
"typeVersion": 2.1
},
{
"id": "6c073c03-e00e-45b1-8f14-faa29fd58472",
"name": "모바일 푸시 알림",
"type": "n8n-nodes-base.pushover",
"disabled": true,
"position": [
-960,
500
],
"parameters": {
"message": "={{ $(\"Error Trigger\").item.json.workflow.name }} - {{ $(\"Error Trigger\").item.json.execution.url }}\n\n{{ $(\"Error Trigger\").item.json.execution.lastNodeExecuted }}\n\n{{ $(\"Error Trigger\").item.json.execution.error.message }}\n{{ $(\"Error Trigger\").item.json.execution.error.stack }}",
"userKey": "=u4RMqXQR9EFdeSQBfaL1riBy1Qd953",
"additionalFields": {}
},
"credentials": {
"pushoverApi": {
"id": "ae8Jsj87n2hSWDbs",
"name": "Pushover account"
}
},
"typeVersion": 1
},
{
"id": "4ca939e4-dcb1-40bd-b5eb-4cd00cb403fb",
"name": "로그 데이터베이스 비우기",
"type": "n8n-nodes-base.postgres",
"position": [
-960,
900
],
"parameters": {
"table": {
"__rl": true,
"mode": "list",
"value": "N8Err",
"cachedResultName": "N8Err"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "p1gq6ljdsam3x1m",
"cachedResultName": "p1gq6ljdsam3x1m"
},
"options": {},
"operation": "deleteTable",
"restartSequences": true
},
"credentials": {
"postgres": {
"id": "2VsRB7eDnG0FA3z2",
"name": "Postgres Nocodb"
}
},
"typeVersion": 2.6
},
{
"id": "1eaf67ca-fb77-4b76-8ee3-ae65d4b79182",
"name": "가끔은... 그냥 정리",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1200,
900
],
"parameters": {},
"typeVersion": 1
},
{
"id": "01e5a7dd-41a2-43f1-bbf5-241e6791cf18",
"name": "이 샘플 호출 - 오류 포착기에 앞서 추가",
"type": "n8n-nodes-base.executeWorkflow",
"disabled": true,
"position": [
-1180,
400
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"typeVersion": 1.2
},
{
"id": "4386788d-5f10-468a-8a02-cff45a4a7ed5",
"name": "오류 처리 시 아래 내용을 앞에 추가하려면 참조",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-1180,
-260
],
"parameters": {
"inputSource": "passthrough"
},
"typeVersion": 1.1
},
{
"id": "d6aed974-4a36-4edd-809d-867a95d0f6ef",
"name": "5분 내 로그가 없는 경우",
"type": "n8n-nodes-base.if",
"position": [
-740,
-210
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "a17b915d-f581-4774-a78a-48bc386aebc9",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $json.count }}",
"rightValue": 0
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "3c49f611-f1a6-409a-a4c6-903dadb27165",
"name": "정리 실행. 이 워크플로우를 앞에 추가할 경우 아래 참조",
"type": "n8n-nodes-base.code",
"position": [
-520,
-210
],
"parameters": {
"jsCode": "return [];"
},
"typeVersion": 2
},
{
"id": "192443fc-c032-4815-acc7-c8cf6040cc34",
"name": "이 후에 오류 처리 로직 삽입",
"type": "n8n-nodes-base.noOp",
"position": [
-300,
-210
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2f87907f-816f-4054-8517-bb713a203131",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1300,
240
],
"parameters": {
"width": 840,
"height": 460,
"content": "# Error handling sample\n"
},
"typeVersion": 1
},
{
"id": "b173898f-d1d8-4f83-b7b7-ba52cab7651e",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1300,
720
],
"parameters": {
"width": 1140,
"height": 340,
"content": "# Database Cleanup: Useful in DEV, but DO NOT run in production"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {
"Error Trigger": [
{
"json": {
"workflow": {
"id": "1",
"name": "Example Workflow"
},
"execution": {
"id": 231,
"url": "https://work.ideias.casa/execution/workflow/1/231",
"mode": "manual",
"error": {
"stack": "Stacktrace",
"message": "Example Error Message"
},
"retryOf": "34",
"lastNodeExecuted": "Node With Error"
}
}
}
]
},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"saveManualExecutions": false,
"saveExecutionProgress": false,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "none"
},
"versionId": "f5e80ccb-c64f-47bd-89a6-55cf3e85a572",
"connections": {
"7101542a-5146-4917-a1f2-13686cad197e": {
"main": [
[]
]
},
"0e44df4c-00d2-4545-89ae-844a590de369": {
"main": [
[
{
"node": "7101542a-5146-4917-a1f2-13686cad197e",
"type": "main",
"index": 0
},
{
"node": "8fb1201c-353e-466c-8d08-fd969e6b10b1",
"type": "main",
"index": 0
}
]
]
},
"fba7fec5-5285-46bd-9cc7-270b7dcc8c5f": {
"main": [
[],
[
{
"node": "979d0e82-42e8-450a-95b1-3c204ad61a50",
"type": "main",
"index": 0
}
]
]
},
"8fb1201c-353e-466c-8d08-fd969e6b10b1": {
"main": [
[
{
"node": "d6aed974-4a36-4edd-809d-867a95d0f6ef",
"type": "main",
"index": 0
}
]
]
},
"1eaf67ca-fb77-4b76-8ee3-ae65d4b79182": {
"main": [
[
{
"node": "4ca939e4-dcb1-40bd-b5eb-4cd00cb403fb",
"type": "main",
"index": 0
}
]
]
},
"d6aed974-4a36-4edd-809d-867a95d0f6ef": {
"main": [
[],
[
{
"node": "3c49f611-f1a6-409a-a4c6-903dadb27165",
"type": "main",
"index": 0
}
]
]
},
"01e5a7dd-41a2-43f1-bbf5-241e6791cf18": {
"main": [
[
{
"node": "fba7fec5-5285-46bd-9cc7-270b7dcc8c5f",
"type": "main",
"index": 0
},
{
"node": "6c073c03-e00e-45b1-8f14-faa29fd58472",
"type": "main",
"index": 0
}
]
]
},
"4386788d-5f10-468a-8a02-cff45a4a7ed5": {
"main": [
[
{
"node": "7101542a-5146-4917-a1f2-13686cad197e",
"type": "main",
"index": 0
},
{
"node": "8fb1201c-353e-466c-8d08-fd969e6b10b1",
"type": "main",
"index": 0
}
]
]
},
"3c49f611-f1a6-409a-a4c6-903dadb27165": {
"main": [
[
{
"node": "192443fc-c032-4815-acc7-c8cf6040cc34",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 엔지니어링, 인공지능, IT 운영
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
API 아키텍처 추출기
API 아키텍처 추출기
If
Set
Code
+
If
Set
Code
88 노드Polina Medvedieva
엔지니어링
자동화된 Discord 스팸 메시지 심사
AI와 인간-기계 협업을 결합한 자동화된 Discord 스팸 모더레이션
If
Set
Code
+
If
Set
Code
30 노드Jimleuk
인공지능
Redis와 GPT-4를 기반으로 한 효율적인 메시지 버퍼 시스템
Redis와 GPT-4를 기반으로 한 효율적인 메시지 버퍼 시스템
If
Set
Code
+
If
Set
Code
30 노드Edisson Garcia
엔지니어링
🤖 고급 슬랙본트(n8n)
🤖 고급 슬랙본트(n8n)
If
Set
Code
+
If
Set
Code
34 노드Mutasem
엔지니어링
ComfyUI를 사용하여 AI 미디어 생성: 이미지, 비디오, 3D 및 오디오 브리지
ComfyUI를 사용하여 AI 미디어 생성: 이미지, 비디오, 3D 및 오디오 브리지
If
Set
Code
+
If
Set
Code
51 노드Nielo
디자인
대기 노드를 포함한 장기 실행 워크플로우 상태 관리 시스템
대기 노드를 포함한 장기 실행 워크플로우 상태 관리 시스템
If
Set
Code
+
If
Set
Code
42 노드Lucas Peyrin
엔지니어링