SMS, Telegram or Bale? Choosing Alert Channels Without Alert Fatigue
Which downtime alerts should go by SMS and which to Telegram or Bale, how to route by urgency, and how to keep the important alerts from drowning in noise.
On most modern Linux servers, services log to the systemd journal. journalctl is the tool for reading it, and a handful of options turn thousands of lines into the few you need.
journalctl -u nginx shows one service; -f follows new lines live.--since and --until narrow by time; -p err shows only errors and worse.-b limits output to the current boot, -b -1 to the previous one.--vacuum-size or SystemMaxUse to keep the journal from filling the disk.noc724 checks your websites, servers and APIs around the clock and alerts you by SMS, Telegram or Bale the moment something breaks.
journalctl # everything, oldest first, in a pager
journalctl -r # newest first
journalctl -n 100 # last 100 lines
journalctl -f # follow new entries live (like tail -f)Reading the full journal usually needs root or membership in the systemd-journal group.
journalctl -u nginx
journalctl -u nginx -u php-fpm # several units together
journalctl -u myapp -f # follow one serviceIf a unit has a different name than you expect, list them with systemctl list-units --type=service.
journalctl --since "2026-10-18 02:00" --until "2026-10-18 03:30"
journalctl --since "1 hour ago"
journalctl --since today
journalctl --since yesterday --until todayCombine with a unit to answer "what did the app log around the outage?":
journalctl -u myapp --since "02:50" --until "03:10"Journal priorities follow the syslog levels:
| Number | Name | Meaning |
|---|---|---|
| 0 | emerg | system unusable |
| 1 | alert | immediate action needed |
| 2 | crit | critical |
| 3 | err | error |
| 4 | warning | warning |
| 5 | notice | normal but significant |
| 6 | info | informational |
| 7 | debug | debug |
journalctl -p err -b # errors and worse since boot
journalctl -p warning..err # a rangejournalctl --list-boots
journalctl -b # current boot
journalctl -b -1 # previous boot - useful after an unexpected restart
journalctl -k -b -1 # kernel messages from the previous boot (out-of-memory, disk errors)journalctl _PID=4211
journalctl _COMM=sshd
journalctl -g "timeout|refused" # grep the message text (newer systemd)
journalctl -u myapp -o json-pretty # every field, structured
journalctl -u myapp -o cat # message text onlyOn some distributions the journal lives in /run and disappears at reboot - exactly when you need it most. Make it persistent:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journaldOr set Storage=persistent in /etc/systemd/journald.conf.
journalctl --disk-usage
sudo journalctl --vacuum-size=1G # shrink to 1 GB
sudo journalctl --vacuum-time=14d # drop entries older than 14 daysFor a permanent limit, set SystemMaxUse=1G in journald.conf.
The journal tells you what happened on one server. For incidents, pair it with:
Either the journal isn't persistent (logs vanished at reboot) or it was rotated by size or time limits. Check journalctl --list-boots and journalctl --disk-usage.
journalctl -u name -n 200 --no-pager shows the last lines across restarts. systemctl status name also shows the exit code and the most recent lines.
On many systems both exist: rsyslog may still write text files such as /var/log/syslog from the journal. Either works; the journal has richer filtering.
Written by
The noc724 team
Uptime monitoring engineers
We build and run noc724, an uptime monitoring service that checks websites, servers and APIs from several cities in Iran. These guides come from the problems we and our users run into while keeping services online.
Contact the teamExpert on:Logging
Which downtime alerts should go by SMS and which to Telegram or Bale, how to route by urgency, and how to keep the important alerts from drowning in noise.
Why uptime monitors raise false alarms - network blips, timeouts, rate limits, content changes - and the settings that remove them while keeping real alerts fast.
How to set up a simple on-call rotation and escalation policy so every critical alert is answered, without burning out a small team.