A dashboard is useful when you are investigating a problem. For the rest of the day, a message on your phone can tell you when an application needs attention and when it recovers.

I develop StatLite, a small self-hosted metrics dashboard from PVR Labs. Its external API already exposes application health. A scheduled shell script can use that information to send Telegram notifications.

What arrives in the chat

StatLite Example Bot in Telegram: a collection-failure alert at 11:14 AM followed by an application UP recovery at 11:15 AM, both labelled my-app health on my VPS (pvrlabs-prod-01).
Real messages from the controlled Linux VM test: a collection-failure alert, then recovery with application health UP. The server label is illustrative. Screenshot cropped for space.

The screenshot shows messages from a real test using StatLite and Telegram. The alert reports a collection failure; the recovery reports application health UP. Each message identifies the application and server and includes a short reason.

A small extension to an existing setup

StatLite status API → shell script → Telegram

The script checks periodically, sends an alert when collection fails or the application reports an unhealthy status, and sends a recovery when things return to normal. It avoids repeated notifications while the same condition continues.

For an existing StatLite deployment, this adds a check script, a Telegram wrapper, and a small local state file. There is no additional monitoring stack, database, or dedicated alerting service to run. Telegram delivery is external automation around the API, configured separately from StatLite.

I tested personal-chat delivery and the documented systemd timer in a Linux VM. The screenshot captures the resulting messages, with an illustrative server label.

Try it on your VPS

Start with a StatLite target whose integration reports application health. Create your own Telegram bot, configure the destination chat and server label, and run the recipe's launcher manually. Once that works, schedule it with cron or the supplied systemd timer.

For example, the launcher can run every minute from the scheduling user's crontab:

PATH=/usr/local/bin:/usr/bin:/bin
* * * * * /home/statlite-alerts/check-health

This is not independent uptime monitoring. If the host running StatLite and the script goes offline, it cannot send notifications. Use an independent uptime check when you need to detect that failure.

Follow the complete Telegram recipe for bot setup, protected credentials, the launcher, and scheduling. It also covers missing health data, retries, and troubleshooting.