AutomationFlowsDevOps › Hourly App Health Monitor with Alerts

Hourly App Health Monitor with Alerts

Original n8n title: Health Monitor

Health-Monitor. Uses httpRequest. Scheduled trigger; 6 nodes.

Cron / scheduled trigger★★★★☆ complexity6 nodesHTTP Request
DevOps Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "_meta": {
    "name": "System Health Monitor",
    "description": "Hourly check of all GARZA OS services, alerts on failure",
    "usage": "Import into n8n Cloud, activate"
  },
  "nodes": [
    {
      "name": "Hourly Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        250,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      }
    },
    {
      "name": "Check Fly Apps",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        450,
        200
      ],
      "parameters": {
        "method": "GET",
        "url": "https://garza-home-mcp.fly.dev/health",
        "options": {
          "timeout": 10000
        }
      }
    },
    {
      "name": "Check CF MCP",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        450,
        400
      ],
      "parameters": {
        "method": "GET",
        "url": "https://mcp-cf.garzahive.com/health",
        "options": {
          "timeout": 10000
        }
      }
    },
    {
      "name": "Aggregate Results",
      "type": "n8n-nodes-base.code",
      "position": [
        650,
        300
      ],
      "parameters": {
        "jsCode": "const results = $input.all();\nconst failures = results.filter(r => r.json.statusCode >= 400 || r.json.error);\n\nreturn [{\n  json: {\n    total: results.length,\n    healthy: results.length - failures.length,\n    failed: failures.length,\n    failures: failures.map(f => f.json),\n    timestamp: new Date().toISOString()\n  }\n}];"
      }
    },
    {
      "name": "Has Failures?",
      "type": "n8n-nodes-base.if",
      "position": [
        850,
        300
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.failed }}",
              "operation": "larger",
              "value2": 0
            }
          ]
        }
      }
    },
    {
      "name": "Send Alert",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1050,
        200
      ],
      "parameters": {
        "method": "POST",
        "url": "={{ $env.BEEPER_WEBHOOK }}",
        "body": "\ud83d\udea8 GARZA OS Alert: {{ $json.failed }} service(s) down\n\n{{ $json.failures }}"
      }
    }
  ],
  "connections": {
    "Hourly Schedule": {
      "main": [
        [
          {
            "node": "Check Fly Apps",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check CF MCP",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Fly Apps": {
      "main": [
        [
          {
            "node": "Aggregate Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check CF MCP": {
      "main": [
        [
          {
            "node": "Aggregate Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Results": {
      "main": [
        [
          {
            "node": "Has Failures?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Failures?": {
      "main": [
        [
          {
            "node": "Send Alert",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Health-Monitor. Uses httpRequest. Scheduled trigger; 6 nodes.

Source: https://github.com/itsablabla/garza-os-github/blob/a37285214c74cbec3b156f88003169b6359eb24b/templates/n8n/health-monitor.json — original creator credit. Request a take-down →

More DevOps workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

DevOps

This workflow acts as a CI/CD quality gate for mobile app crash-symbolication artifacts. Whenever a new commit is pushed to GitHub, the workflow automatically checks the corresponding Sentry release a

Github Trigger, HTTP Request
DevOps

Display Project Data On A Smashing Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.

HTTP Request, GitHub
DevOps

Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.

HTTP Request, GitHub
DevOps

Comprehensive LLM Usage Tracker & Cost Monitor with Node-Level Analytics. Uses n8n, executeWorkflowTrigger, stopAndError. Event-driven trigger; 19 nodes.

n8n, Execute Workflow Trigger, Stop And Error
DevOps

Backup Workflows To Github. Uses github, httpRequest. Scheduled trigger; 11 nodes.

GitHub, HTTP Request