New to Kestra?
Use blueprints to kickstart your first workflows.
Check several endpoints in parallel on a schedule with Kestra, treat any non-200 as unhealthy, and alert Slack with the status code of every site.
The simplest monitor most teams never get around to building: hit a handful of endpoints on a schedule and shout if any of them answer with something other than HTTP 200. This blueprint probes three sites in parallel every thirty minutes and sends one Slack message that names every endpoint together with the status it actually returned, so the person reading the alert knows which site to look at before they open anything.
The one detail that makes it work is options.allowFailed: true on each probe. Without it the HTTP task fails outright on any non-2xx response, the flow jumps straight to the errors block, and you lose the status code you wanted to report. With it, a 503 is a result to evaluate rather than a crash.
every_30_minutes trigger (io.kestra.plugin.core.trigger.Schedule) starts a run on the half hour.check_all_sites task (io.kestra.plugin.core.flow.Parallel) fires three io.kestra.plugin.core.http.Request probes at once, each with a thirty second timeout and options.allowFailed: true, so one slow endpoint neither delays nor masks the others.evaluate_results task (io.kestra.plugin.core.flow.If) reads outputs.<probe>.code for each site and treats anything other than 200 as unhealthy.then branch posts a Slack message listing every site and its status code. The else branch logs a one line all clear so the execution history reads cleanly.errors block sends a different message for the case where a probe could not run at all, such as a DNS failure or a hard timeout, which is a different kind of problem from a site returning a bad status.A cron script that curls three URLs and pipes to a webhook is thirty lines, and it loses the thing that matters: history. Kestra keeps every probe's status code on every run, shows the three checks side by side in the Gantt view, retries the Slack send if the webhook hiccups, and gives you a second alert path for the case where the probe itself breaks. When a site has been flapping for a week, the execution list already contains the evidence.
SLACK_WEBHOOK: incoming webhook URL used for both the unhealthy alert and the probe failure alert.SLACK_WEBHOOK secret to your Kestra namespace.site_* input defaults with your own endpoints, or leave them to see the flow run against public sites first.evaluate_results output to confirm you see a status code per site.check_site_* tasks under the Parallel block, or switch to io.kestra.plugin.core.flow.Loop over an ARRAY input when the list grows.io.kestra.plugin.pagerduty.alerts.Create for endpoints that should page someone.http.Request to chart uptime over time.