Gatus
Gatus can deliver its health-check alerts to a Pinglet topic today using its custom alerting provider. The body is fully yours to shape, so no rewrite or glue service is needed.
Setup
In your Gatus configuration:
alerting:
custom:
url: "https://pinglet.dev/acme/uptime"
method: "POST"
headers:
Content-Type: application/json
Authorization: "Bearer pinglet_<your key>"
body: |
{
"title": "[ENDPOINT_NAME]",
"message": "[ALERT_DESCRIPTION]",
"level": "[ALERT_TRIGGERED_OR_RESOLVED]"
}
placeholders:
ALERT_TRIGGERED_OR_RESOLVED:
TRIGGERED: "error"
RESOLVED: "success"
endpoints:
- name: website
url: "https://example.org"
interval: 60s
conditions:
- "[STATUS] == 200"
alerts:
- type: custom
description: "example.org health check failed"
send-on-resolved: true
Replace acme/uptime with your namespace and preferred topic name. The topic is created on the first alert. Subscribe to it in the Pinglet app using the share link from your dashboard.
The placeholders block is the trick: it remaps Gatus’s TRIGGERED/RESOLVED states onto Pinglet’s levels, so a failure arrives red and a recovery arrives green.
Notes
- Give each alert a
description: it becomes the push body, and since themessagefield is required, an alert without one won’t publish. - Keep descriptions to plain text. The custom provider substitutes them into the JSON body verbatim, so a
"in the description would break the payload. send-on-resolved: truegets you the green recovery push; leave it off if you only want the bad news.- Other placeholders you can work into the body:
[ENDPOINT_GROUP],[ENDPOINT_URL],[RESULT_ERRORS], for example as badges.
A native
pingletalerting provider for Gatus, with per-state priority and no JSON to hand-write, is in the works. This recipe works on any current Gatus version in the meantime.