Docs menu

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 the message field 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: true gets 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 pinglet alerting 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.