louislam/uptime-kuma · warning · Error

Failed: ${result.rawOutput}

Error message

Failed: ${result.rawOutput}

What it means

Thrown by the Globalping monitor after a measurement completes with result.status === "failed". The probe executed but reported a failure (network unreachable, DNS failure on the target from the probe, timeout reaching the target). rawOutput carries the probe's verbatim failure log, prefixed with the probe location via formatResponse.

Source

Thrown at server/monitor-types/globalping.js:118

                throw new Error(`Failed to create measurement: ${this.formatTooManyRequestsError(hasAPIToken)}`);
            }
            throw new Error(`Failed to create measurement: ${this.formatApiError(res.data.error)}`);
        }

        log.debug("monitor", `Globalping fetch measurement: ${res.data.id}`);
        let measurement = await client.awaitMeasurement(res.data.id);

        if (!measurement.ok) {
            throw new Error(
                `Failed to fetch measurement (${res.data.id}): ${this.formatApiError(measurement.data.error)}`
            );
        }

        const probe = measurement.data.results[0].probe;
        const result = measurement.data.results[0].result;

        if (result.status === "failed") {
            throw new Error(this.formatResponse(probe, `Failed: ${result.rawOutput}`));
        }

        if (!result.timings?.length) {
            throw new Error(this.formatResponse(probe, `Failed: ${result.rawOutput}`));
        }

        heartbeat.ping = result.stats.avg || 0;
        heartbeat.msg = this.formatResponse(probe, "OK");
        heartbeat.status = UP;
    }

    /**
     * Handles HTTP monitors.
     * @param {Client} client - The client object.
     * @param {Monitor} monitor - The monitor object.
     * @param {Heartbeat} heartbeat - The heartbeat object.
     * @param {boolean} hasAPIToken - Whether the monitor has an API token.
     * @returns {Promise<void>} A promise that resolves when the HTTP monitor is handled.

View on GitHub (pinned to 6b5ea01557)

Solutions

  1. Treat this as a real DOWN condition first; verify the target independently from a third network.
  2. If the target is up, switch to a different Globalping location/region closer to or reachable from the target.
  3. For ping failures, confirm ICMP is permitted from the probe's network to the target.
  4. Read rawOutput for the exact probe-side error to distinguish routing from firewalling.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  await gp.monitor(client, monitor, heartbeat, hasToken);
} catch (e) {
  if (/Failed:/.test(e.message)) { heartbeat.status = DOWN; heartbeat.msg = e.message; return; }
  throw e;
}

Prevention

When it happens

Trigger: Target is down or unreachable from the selected Globalping probe; target blocks ICMP for a ping measurement; TCP port closed for a TCP measurement; DNS name does not resolve at the probe. The measurement object itself is well-formed; the measurement outcome is the failure.

Common situations: Monitoring a target that is genuinely down (this is the expected DOWN signal for the monitor). Probe in a region with no route to the target (geo-blocking, firewall). Firewall rules blocking the Globalping probe ASN. ICMP rate-limiting on the target.

Related errors


AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12). Data as JSON: /api/errors/5e12d2ae6e3fe29a. Report an issue: GitHub.