Typy monitoringu

Push Monitor (Heartbeat) — monitoring zadań cron, backupów i skryptów

Marzec 2026 | Czas czytania: ~16 min

Czym jest Push Monitor i dlaczego warto go znać

Większość narzędzi monitoringu — w tym Uptime Kuma — działa domyślnie w modelu aktywnym: serwer monitoringu regularnie odpytuje (pulluje) monitorowane usługi, sprawdzając czy są dostępne. To doskonale sprawdza się przy monitorowaniu stron www, API czy portów TCP. Ale co z zadaniami, które nie nasłuchują na żadnym porcie? Co z cronjobami, skryptami backupowymi, procesami ETL czy zaplanowanymi zadaniami Windows, które uruchamiają się o 3:00 w nocy, wykonują swoją pracę i kończą działanie?

Tutaj wchodzi Push Monitor (nazywany też Heartbeat Monitor lub Passive Monitor) — odwrócony model monitoringu, w którym to monitorowany skrypt sam wysyła sygnał do Uptime Kuma po zakończeniu pracy. Jeśli sygnał (heartbeat) nie przyjdzie w oczekiwanym czasie — Uptime Kuma uznaje, że coś poszło nie tak, i natychmiast wysyła powiadomienie.

Koncepcja jest prosta jak genialnie prosty jest mechanizm, na którym się opiera: Dead Man's Switch (przełącznik martwego człowieka). Dopóki ktoś regularnie naciska przycisk — wszystko jest w porządku. Gdy przestaje — uruchamia się alarm. W kontekście IT: dopóki skrypt regularnie wysyła heartbeat — monitor jest zielony. Gdy heartbeat przestaje przychodzić — monitor przechodzi w stan DOWN i wysyła alert.

Push Monitor w Uptime Kuma to jedno z najbardziej niedocenianych narzędzi w arsenale administratora. Pozwala monitorować procesy, które są niewidoczne dla tradycyjnego monitoringu — a jednocześnie często krytyczne dla działania całej infrastruktury. Backup, który nie wykonał się w nocy, cronjob odnawiający certyfikat SSL, który się zawiesił, skrypt synchronizacji danych, który cicho przestał działać — to scenariusze, w których push monitoring ratuje sytuację.

Push Monitor w Uptime Kuma

Push Monitor jest dostępny w Uptime Kuma od wersji 1.x i pozostaje jednym z najczęściej używanych typów monitorów. Każdy Push Monitor generuje unikalny URL endpoint, na który monitorowany skrypt wysyła żądania HTTP. Nie wymaga żadnych agentów, dodatkowych zależności ani otwierania portów — wystarczy dostęp HTTP do instancji Uptime Kuma.

Push vs Pull — dwa modele monitoringu

Aby w pełni zrozumieć wartość Push Monitora, warto porównać dwa fundamentalne modele monitoringu. Każdy z nich ma swoje zastosowania — i oba są potrzebne w dobrze zaprojektowanej infrastrukturze monitoringu.

Model Pull (aktywny monitoring)

W modelu Pull to serwer monitoringu inicjuje połączenie do monitorowanej usługi. Uptime Kuma co X sekund wysyła żądanie (HTTP GET, Ping ICMP, zapytanie DNS, połączenie TCP) i sprawdza odpowiedź. To domyślny model dla większości typów monitorów w Uptime Kuma — HTTP(s), Ping, TCP, DNS, SNMP, bazy danych i wielu innych.

Zalety modelu Pull:

  • Monitoring jest niezależny od monitorowanej usługi — nawet jeśli usługa jest całkowicie niedostępna, serwer monitoringu to wykryje
  • Nie wymaga modyfikacji monitorowanych aplikacji — wystarczy, że nasłuchują na porcie
  • Centralna konfiguracja — wszystko zarządzasz z poziomu Uptime Kuma

Ograniczenia modelu Pull:

  • Wymaga, aby monitorowana usługa była dostępna sieciowo (nasłuchuje na porcie)
  • Nie działa dla zadań jednorazowych, cronjobów, skryptów batch ani procesów, które nie mają stałego endpointu
  • Może wymagać konfiguracji firewalla/NAT, jeśli usługa jest za zaporą

Model Push (pasywny monitoring)

W modelu Push to monitorowana usługa inicjuje połączenie do serwera monitoringu. Skrypt, cronjob lub aplikacja po zakończeniu pracy wysyła sygnał HTTP do Uptime Kuma. Serwer monitoringu czeka pasywnie na sygnały i reaguje, gdy sygnał nie przyjdzie w oczekiwanym czasie.

Zalety modelu Push:

  • Idealny dla zadań, które nie mają stałego endpointu — cronjobów, backupów, pipeline'ów ETL, skryptów
  • Działa przez NAT i firewalle — monitorowany host nawiązuje połączenie wychodzące (HTTP)
  • Pozwala monitorować sukces wykonania, nie tylko dostępność — skrypt może wysłać heartbeat dopiero po pomyślnym zakończeniu
  • Umożliwia przesyłanie dodatkowych informacji — status, czas wykonania, komunikat o błędzie

Ograniczenia modelu Push:

  • Wymaga modyfikacji monitorowanych skryptów (dodanie wywołania HTTP na końcu)
  • Jeśli skrypt ma błąd, który nie pozwala mu dojść do linii z heartbeatem — nie wyśle sygnału (ale to właśnie chcemy wykryć)
  • Zależy od łączności sieciowej z Uptime Kuma — jeśli łącze jest niedostępne, heartbeat nie dotrze
CechaPull (aktywny)Push (pasywny)
Kto inicjujeSerwer monitoringuMonitorowany skrypt/usługa
Wymaga nasłuchiwaniaTak (port, URL)Nie
Cronjobs / backupyNiemożliweIdealne zastosowanie
Modyfikacja skryptuNieTak (1 linia kodu)
Za firewallem / NATWymaga konfiguracjiDziała bez zmian
Monitoring sukcesuTylko dostępnośćDostępność + sukces wykonania
Dodatkowe daneBrakStatus, msg, ping (czas)

W praktyce najlepsze podejście to kombinacja obu modeli. Pull monitoring dla usług ciągłych (serwery www, API, bazy danych), push monitoring dla zadań okresowych (cronjobs, backupy, synchronizacje). Uptime Kuma obsługuje oba modele natywnie, co czyni ją kompletnym narzędziem monitoringu.

Dead Man's Switch — mechanizm heartbeat

Dead Man's Switch (DMS) to mechanizm bezpieczeństwa znany z kolei i przemysłu — maszynista musi regularnie naciskać pedał lub przycisk, aby pociąg kontynuował jazdę. Jeśli przestanie (np. z powodu zasłabnięcia), system automatycznie zatrzyma pojazd. W IT ten sam koncept stosuje się do monitoringu procesów, które powinny regularnie dawać znać, że żyją.

Push Monitor w Uptime Kuma działa dokładnie na tej zasadzie:

1

Rejestracja heartbeat

Tworzysz Push Monitor w Uptime Kuma i otrzymujesz unikalny Push URL, np. https://twoja-instancja.uptimekuma.eu/api/push/abc123XYZ?status=up&msg=OK&ping=. Ten URL jest Twoim „przyciskiem" — każde żądanie HTTP GET lub POST na ten adres to sygnał „jestem żywy".

2

Regularne sygnały

Monitorowany skrypt (cronjob, backup, ETL) po pomyślnym zakończeniu pracy wysyła żądanie HTTP na Push URL. Uptime Kuma rejestruje heartbeat, zapisuje timestamp i opcjonalne dane (status, wiadomość, czas odpowiedzi) i oznacza monitor jako UP (zielony).

3

Oczekiwanie na kolejny sygnał

Uptime Kuma zna skonfigurowany Heartbeat Interval — oczekiwany czas między sygnałami (np. 300 sekund = 5 minut). Po otrzymaniu heartbeatu zaczyna odliczanie. Jeśli kolejny sygnał przyjdzie przed upływem interwału — wszystko OK, timer resetuje się.

4

Brak sygnału — alarm

Jeśli heartbeat nie przyjdzie w oczekiwanym czasie (interwał + graceful period), Uptime Kuma zmienia status monitora na DOWN i wysyła powiadomienia przez wszystkie skonfigurowane kanały — e-mail, Telegram, Slack, Discord czy dowolny z 91 obsługiwanych serwisów. Skrypt się zawiesił? Cronjob nie wykonał się? Backup nie doszedł do końca? Dowiesz się natychmiast.

Kluczowa różnica w stosunku do tradycyjnego monitoringu: Push Monitor nie sprawdza stanu usługi aktywnie. Czeka na sygnały i reaguje na ich brak. To odwrócona logika — „brak wiadomości" to zła wiadomość.

Hosting Uptime Kuma na SmartX — push monitoring gotowy od razu

Na SmartXHosting.pl Twoja instancja Uptime Kuma jest dostępna publicznie pod stałym adresem HTTPS (np. twoja-firma.uptimekuma.eu) — co oznacza, że Push URL jest dostępny z dowolnego miejsca. Skrypty na serwerach, w chmurze, za firewallami i na urządzeniach IoT mogą wysyłać heartbeaty bez żadnej dodatkowej konfiguracji.

Konfiguracja Push Monitora w Uptime Kuma krok po kroku

Dodanie Push Monitora w Uptime Kuma to kilka minut. Poniżej pełna instrukcja krok po kroku — od utworzenia monitora do skonfigurowania pierwszego heartbeatu.

1

Dodaj nowy monitor

Zaloguj się do Uptime Kuma i kliknij przycisk „Add New Monitor" (lub „Dodaj nowy monitor" w polskiej wersji językowej). Otworzy się formularz konfiguracji monitora.

2

Wybierz typ: Push

Z rozwijanej listy „Monitor Type" wybierz „Push". Po wybraniu tego typu Uptime Kuma automatycznie wygeneruje unikalny Push URL — skopiuj go i zachowaj. To jedyny typ monitora, który nie wymaga podania adresu URL ani hosta — bo to monitorowane usługi będą się łączyć z Uptime Kuma, nie na odwrót.

3

Nadaj nazwę (Friendly Name)

Wpisz opisową nazwę, np. „Backup nocny — serwer DB", „Cron: odnawianie certyfikatów SSL", „ETL: import danych z hurtowni". Dobra nazwa pozwoli szybko zidentyfikować monitor na dashboardzie i w powiadomieniach.

4

Skonfiguruj Heartbeat Interval

Ustaw Heartbeat Interval — oczekiwany maksymalny czas (w sekundach) między sygnałami heartbeat. Jeśli Twój cronjob uruchamia się co 5 minut, ustaw interwał na 300 sekund. Jeśli backup działa raz dziennie o 3:00 — ustaw interwał na 86400 sekund (24 godziny). Uptime Kuma oznaczy monitor jako DOWN, jeśli nie otrzyma heartbeatu w ciągu tego czasu (plus opcjonalny grace period).

5

Skonfiguruj Retries i Grace Period

Ustaw liczbę ponownych prób (Max Retries) — ile razy monitor może „przegapić" heartbeat, zanim przejdzie w stan DOWN. Wartość 0 oznacza natychmiastową reakcję po upływie interwału. Dla zadań, które mogą się lekko opóźnić (np. backup dużej bazy danych), warto ustawić 1-2 retries z odpowiednim interwałem retries, co daje dodatkowy bufor czasowy.

6

Skonfiguruj powiadomienia

Przypisz kanały powiadomień — Telegram, e-mail, Discord, Slack lub dowolny inny z 91 obsługiwanych. Możesz przypisać wiele kanałów jednocześnie. Włącz opcję „Resend Notification", jeśli chcesz otrzymywać powtarzane alerty co X minut, dopóki problem nie zostanie rozwiązany.

7

Skopiuj Push URL i zintegruj ze skryptem

Skopiuj wygenerowany Push URL (widoczny na stronie szczegółów monitora). URL ma format: https://twoja-instancja/api/push/TOKEN?status=up&msg=OK&ping=. Dodaj wywołanie tego URL na końcu swojego skryptu — szczegóły integracji opisane są w kolejnych sekcjach artykułu.

Pierwszy heartbeat

Po zapisaniu Push Monitora Uptime Kuma będzie czekać na pierwszy heartbeat. Monitor będzie w stanie PENDING (oczekujący), dopóki nie otrzyma pierwszego sygnału. Po pierwszym heartbeat przejdzie w stan UP i rozpocznie normalne odliczanie. Jeśli chcesz od razu sprawdzić, czy URL działa — otwórz go w przeglądarce lub wyślij curl z terminala.

Push URL, interwał i graceful period

Push URL to serce Push Monitora. Każdy monitor generuje unikalny URL z tokenem, który służy jako endpoint do odbierania heartbeatów. Zrozumienie jego struktury i parametrów jest kluczowe dla prawidłowej konfiguracji.

Struktura Push URL

Format Push URL w Uptime Kuma wygląda następująco:

https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK&ping=

Parametry URL:

  • TOKEN — unikalny identyfikator monitora, generowany automatycznie. Traktuj go jak hasło — nie udostępniaj publicznie
  • status — status heartbeatu: up (domyślny, wszystko OK) lub down (skrypt zgłasza błąd)
  • msg — opcjonalna wiadomość tekstowa, np. „Backup zakończony pomyślnie" lub „Błąd: brak miejsca na dysku"
  • ping — opcjonalny czas w milisekundach, np. czas wykonania skryptu. Wyświetlany na wykresie Response Time w Uptime Kuma

Heartbeat Interval — jak dobrać wartość

Heartbeat Interval to najważniejszy parametr Push Monitora. Określa maksymalny oczekiwany czas między sygnałami. Zbyt krótki interwał generuje fałszywe alarmy. Zbyt długi — opóźnia wykrycie problemu.

Zasada kciuka: ustaw interwał na czas cyklu zadania + margines bezpieczeństwa. Przykłady:

ZadanieCyklSugerowany interwałUzasadnienie
Cronjob co 5 minut5 min600 s (10 min)Podwójny czas cyklu — bufor na opóźnienia
Cronjob co godzinę60 min4200 s (70 min)Cykl + 10 minut marginesu
Backup nocny (3:00)24 h90000 s (25 h)Dobowy cykl + 1h na opóźnienia backupu
Backup tygodniowy7 dni648000 s (7.5 dnia)Tygodniowy cykl + 12h marginesu
Heartbeat IoT co 1 min1 min120 s (2 min)Podwójny czas cyklu

Graceful Period i Retry Logic

Poza Heartbeat Interval, Uptime Kuma oferuje dodatkowe mechanizmy, które pomagają uniknąć fałszywych alarmów:

  • Max Retries — liczba cykli, które monitor może „przegapić" przed przejściem w stan DOWN. Przy interwale 300s i max retries = 2, monitor przejdzie w DOWN dopiero po 900 sekundach (3 × 300s) bez heartbeatu
  • Retry Interval — czas (w sekundach) między sprawdzeniami po pierwszym przegapieniu. Domyślnie równy heartbeat interval
  • Resend Notification — opcja ponownego wysyłania powiadomień co X sekund, dopóki monitor jest w stanie DOWN. Przydatne, gdy chcesz eskalację — np. powtarzany alert co 30 minut

Przykład konfiguracji dla nocnego backupu:

# Konfiguracja Push Monitora:
# Heartbeat Interval: 86400 sekund (24 godziny)
# Max Retries: 1
# Retry Interval: 3600 sekund (1 godzina)
#
# Logika:
# - Backup powinien zakończyć się codziennie do ~4:00
# - Jeśli do 3:00 następnego dnia nie ma heartbeatu → pierwsze sprawdzenie
# - Po dodatkowej godzinie (4:00) bez heartbeatu → status DOWN + alert
# - Łączny czas tolerancji: ~25 godzin od ostatniego heartbeatu

Zastosowania Push Monitora — praktyczne scenariusze

Push Monitor w Uptime Kuma jest niezwykle wszechstronny. Poniżej opisujemy najczęstsze zastosowania z konkretnymi przykładami konfiguracji i integracji.

Monitoring zadań cron (Linux/macOS)

Cron to scheduler zadań w systemach Unix/Linux. Zadania cron uruchamiają się automatycznie według harmonogramu — ale domyślnie nikt nie wie, czy się wykonały pomyślnie. Cron wysyła e-mail z outputem (jeśli skonfigurowano MTA), ale w praktyce większość serwerów nie ma skonfigurowanej poczty, a nawet jeśli ma — kto czyta e-maile z crona?

Push Monitor rozwiązuje ten problem elegancko. Dodaj curl na końcu komendy w crontab — i masz monitoring:

# Przykład: cronjob wykonujący cleanup logów co godzinę
0 * * * * /usr/local/bin/cleanup-logs.sh && curl -fsS -m 10 --retry 3 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK" > /dev/null

# Kluczowe flagi curl:
# -f  → fail silently (zwróć kod błędu przy HTTP 4xx/5xx)
# -sS → cichy tryb, ale pokaż błędy
# -m 10 → timeout 10 sekund
# --retry 3 → ponów 3 razy przy błędach sieciowych

Dlaczego && zamiast ;? Operator && oznacza, że curl wykona się tylko jeśli poprzedni skrypt zakończy się sukcesem (kod wyjścia 0). Jeśli skrypt zwróci błąd — heartbeat nie zostanie wysłany — i Uptime Kuma zaalarmuje. To właśnie esencja push monitoringu: heartbeat wysyłamy tylko po sukcesie.

Bardziej zaawansowany wariant z raportowaniem statusu:

# Cronjob z raportowaniem sukcesu/porażki
0 * * * * /usr/local/bin/cleanup-logs.sh \
  && curl -fsS -m 10 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=Cleanup+OK" > /dev/null \
  || curl -fsS -m 10 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=down&msg=Cleanup+FAILED" > /dev/null

W tym wariancie operator || powoduje, że jeśli skrypt się nie powiedzie, wyślemy heartbeat ze statusem down — Uptime Kuma natychmiast oznaczy monitor jako DOWN i wyśle alert, nie czekając na upłynięcie interwału.

Monitoring skryptów backupowych

Backup, który nie wykonał się w nocy, to jeden z najczęstszych i najgroźniejszych problemów w administracji IT. Odkrywany zazwyczaj dopiero, gdy dane są potrzebne — czyli w najgorszym możliwym momencie. Push Monitor zamienia cichy błąd w natychmiastowy alert.

#!/bin/bash
# backup-database.sh — backup bazy danych z push monitoring

PUSH_URL="https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"
START_TIME=$(date +%s)

# Wykonaj backup
mysqldump --all-databases --single-transaction \
  | gzip > /backup/db-$(date +%Y%m%d-%H%M%S).sql.gz

BACKUP_EXIT=$?
END_TIME=$(date +%s)
DURATION=$(( END_TIME - START_TIME ))
DURATION_MS=$(( DURATION * 1000 ))

if [ $BACKUP_EXIT -eq 0 ]; then
    # Sprawdź rozmiar pliku backupu
    BACKUP_SIZE=$(ls -lh /backup/db-*.sql.gz | tail -1 | awk '{print $5}')

    curl -fsS -m 10 --retry 3 \
      "${PUSH_URL}?status=up&msg=Backup+OK+(${BACKUP_SIZE})+w+${DURATION}s&ping=${DURATION_MS}" \
      > /dev/null
else
    curl -fsS -m 10 --retry 3 \
      "${PUSH_URL}?status=down&msg=Backup+FAILED+(exit+code+${BACKUP_EXIT})" \
      > /dev/null
fi

Ten skrypt nie tylko monitoruje, czy backup się wykonał, ale też raportuje rozmiar pliku i czas wykonania do Uptime Kuma. Dzięki parametrowi ping z czasem w milisekundach, na wykresie Response Time w Uptime Kuma zobaczysz historyczny trend czasu trwania backupu — i wykryjesz, jeśli backup zaczyna trwać niepokojąco długo.

Monitoring procesów batch i ETL

Procesy ETL (Extract-Transform-Load) i zadania batch processing to kręgosłup wielu firm — przetwarzanie zamówień, synchronizacja danych między systemami, generowanie raportów, import z hurtowni. Ich awaria często pozostaje niezauważona godzinami lub dniami.

#!/bin/bash
# etl-pipeline.sh — pipeline ETL z monitoringiem push

PUSH_URL="https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"
PROCESSED=0
ERRORS=0

# Etap 1: Extract
python3 /etl/extract.py --source warehouse
[ $? -ne 0 ] && { curl -fsS -m 10 "${PUSH_URL}?status=down&msg=ETL+EXTRACT+FAILED"; exit 1; }

# Etap 2: Transform
python3 /etl/transform.py --validate
[ $? -ne 0 ] && { curl -fsS -m 10 "${PUSH_URL}?status=down&msg=ETL+TRANSFORM+FAILED"; exit 1; }

# Etap 3: Load
PROCESSED=$(python3 /etl/load.py --target production | grep "records" | awk '{print $1}')
[ $? -ne 0 ] && { curl -fsS -m 10 "${PUSH_URL}?status=down&msg=ETL+LOAD+FAILED"; exit 1; }

# Sukces — raportuj liczbę przetworzonych rekordów
curl -fsS -m 10 "${PUSH_URL}?status=up&msg=ETL+OK:+${PROCESSED}+rekordow"

Każdy etap pipeline'u może zgłosić błąd niezależnie — w wiadomości push zobaczysz, który konkretnie etap się nie powiódł. To znacznie przyspiesza diagnozę problemów.

Monitoring zaplanowanych zadań na Windows (Task Scheduler)

Windows Task Scheduler to odpowiednik crona w środowisku Windows. Monitoring jest równie ważny — i równie prosty dzięki PowerShell:

# W Task Scheduler utwórz nowe zadanie, które na końcu wykonuje:
# Program: powershell.exe
# Arguments: -ExecutionPolicy Bypass -File C:\Scripts\backup-with-heartbeat.ps1

# Zawartość backup-with-heartbeat.ps1:
$PushUrl = "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"
$StartTime = Get-Date

try {
    # Twoje zadanie backupowe
    & "C:\Scripts\backup-sqlserver.ps1"

    $Duration = [math]::Round(((Get-Date) - $StartTime).TotalMilliseconds)
    Invoke-RestMethod -Uri "${PushUrl}?status=up&msg=Backup+OK&ping=$Duration" -Method Get
}
catch {
    $ErrorMsg = $_.Exception.Message -replace ' ', '+'
    Invoke-RestMethod -Uri "${PushUrl}?status=down&msg=FAILED:+$ErrorMsg" -Method Get
}

Monitoring urządzeń IoT

Urządzenia IoT (Internet of Things) — czujniki, sterowniki, bramy sieciowe — często działają w trudnych warunkach sieciowych: za NATem, na LTE, z ograniczoną łącznością. Tradycyjny pull monitoring jest często niemożliwy. Push Monitor jest idealnym rozwiązaniem:

# Przykład: ESP32 (MicroPython) wysyłający heartbeat co minutę
import urequests
import time

PUSH_URL = "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"

while True:
    try:
        temp = read_temperature_sensor()
        response = urequests.get(
            f"{PUSH_URL}?status=up&msg=Temp:{temp}C&ping="
        )
        response.close()
    except Exception as e:
        pass  # Brak łączności — Uptime Kuma wykryje brak heartbeatu

    time.sleep(60)  # Heartbeat co 60 sekund

W Uptime Kuma ustaw interwał na 120 sekund (podwójny czas cyklu). Jeśli urządzenie IoT straci łączność na dłużej niż 2 minuty — otrzymasz alert. Dzięki parametrowi msg możesz nawet przesyłać dane telemetryczne (temperaturę, wilgotność, stan baterii) bezpośrednio do interfejsu Uptime Kuma.

Monitoruj swoje skrypty i cronjobs z Uptime Kuma

Zamów hosting Uptime Kuma na SmartXHosting.pl i skonfiguruj push monitoring w kilka minut. Stały adres HTTPS, dostępny z każdego miejsca — Twoje skrypty, backupy i urządzenia IoT mogą wysyłać heartbeaty bez żadnej konfiguracji sieciowej.

Zamów hosting Uptime Kuma

Integracja ze skryptami — curl, Python, PowerShell, Docker

Push Monitor w Uptime Kuma akceptuje żądania HTTP GET i POST. Integracja jest trywialna w dowolnym języku programowania i środowisku. Poniżej kompletne przykłady dla najpopularniejszych technologii.

Bash / curl

Najprostszy i najczęściej używany sposób — jedna linia na końcu skryptu:

# Minimalny heartbeat (GET)
curl -fsS -m 10 --retry 3 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK" > /dev/null

# Heartbeat z czasem wykonania
START=$(date +%s%N)
# ... twój skrypt ...
END=$(date +%s%N)
PING=$(( (END - START) / 1000000 ))  # nanosekundy → milisekundy
curl -fsS -m 10 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK&ping=${PING}"

# Heartbeat z dodatkowym kontekstem (POST z body)
curl -fsS -m 10 -X POST \
  -H "Content-Type: application/json" \
  -d '{"status":"up","msg":"Przetworzone: 1523 rekordów","ping":4521}' \
  "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"

Python (requests)

Idealne dla skryptów Python — ETL, data science, automatyzacja:

import requests
import time

PUSH_URL = "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"

def send_heartbeat(status="up", msg="OK", ping=None):
    """Wyślij heartbeat do Uptime Kuma Push Monitora."""
    params = {"status": status, "msg": msg}
    if ping is not None:
        params["ping"] = int(ping)
    try:
        response = requests.get(PUSH_URL, params=params, timeout=10)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"Heartbeat failed: {e}")

# Użycie w skrypcie:
start = time.time()
try:
    # Twoja logika biznesowa
    result = process_data()
    duration_ms = int((time.time() - start) * 1000)
    send_heartbeat(
        status="up",
        msg=f"Przetworzono {result['count']} rekordów",
        ping=duration_ms
    )
except Exception as e:
    send_heartbeat(
        status="down",
        msg=f"Błąd: {str(e)[:100]}"
    )

Python — dekorator do automatycznego monitoringu funkcji

Elegancki wzorzec dla wielu monitorowanych zadań:

import requests
import time
import functools

def push_monitor(push_url):
    """Dekorator do automatycznego wysyłania heartbeatu po wykonaniu funkcji."""
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start = time.time()
            try:
                result = func(*args, **kwargs)
                duration_ms = int((time.time() - start) * 1000)
                requests.get(push_url, params={
                    "status": "up",
                    "msg": f"{func.__name__} OK",
                    "ping": duration_ms
                }, timeout=10)
                return result
            except Exception as e:
                requests.get(push_url, params={
                    "status": "down",
                    "msg": f"{func.__name__} FAILED: {str(e)[:80]}"
                }, timeout=10)
                raise
        return wrapper
    return decorator

# Użycie:
@push_monitor("https://twoja-instancja.uptimekuma.eu/api/push/TOKEN_BACKUP")
def run_backup():
    # ... logika backupu ...
    pass

@push_monitor("https://twoja-instancja.uptimekuma.eu/api/push/TOKEN_ETL")
def run_etl():
    # ... logika ETL ...
    pass

PowerShell (Windows)

Natywne rozwiązanie dla środowisk Windows Server i Active Directory:

# Prosty heartbeat
$PushUrl = "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"

try {
    # Twoje zadanie
    & "C:\Scripts\maintenance-task.ps1"

    Invoke-RestMethod -Uri "$PushUrl`?status=up&msg=Task+completed" -Method Get -TimeoutSec 10
}
catch {
    $ErrMsg = $_.Exception.Message.Substring(0, [Math]::Min(100, $_.Exception.Message.Length))
    $ErrMsg = $ErrMsg -replace ' ', '+' -replace '&', '%26'
    Invoke-RestMethod -Uri "$PushUrl`?status=down&msg=FAILED:+$ErrMsg" -Method Get -TimeoutSec 10
}

# Wersja z pomiarem czasu (jako Scheduled Task)
$Stopwatch = [System.Diagnostics.Stopwatch]::StartNew()

# ... zadanie ...

$Stopwatch.Stop()
$PingMs = $Stopwatch.ElapsedMilliseconds
Invoke-RestMethod -Uri "$PushUrl`?status=up&msg=OK&ping=$PingMs" -Method Get

Docker Healthcheck — integracja z kontenerami

Docker HEALTHCHECK pozwala zdefiniować komendę sprawdzającą zdrowie kontenera. Połączenie tego z Push Monitorem daje podwójne zabezpieczenie — Docker restartuje kontener, a Uptime Kuma alarmuje:

# Dockerfile
FROM your-app:latest

# Healthcheck wysyła heartbeat do Uptime Kuma
HEALTHCHECK --interval=60s --timeout=10s --retries=3 \
  CMD curl -fsS -m 5 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=Container+healthy" || exit 1

Alternatywnie w docker-compose.yml:

services:
  my-app:
    image: your-app:latest
    healthcheck:
      test: ["CMD", "curl", "-fsS", "-m", "5",
             "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=healthy"]
      interval: 60s
      timeout: 10s
      retries: 3
      start_period: 30s

W tej konfiguracji kontener co 60 sekund wysyła heartbeat do Uptime Kuma. Jeśli kontener się zawiesi, healthcheck nie wykona się, heartbeat przestanie przychodzić — i Uptime Kuma poinformuje Cię o problemie, nawet jeśli Docker nie zdoła zrestartować kontenera.

wget — alternatywa dla curl

Na niektórych systemach curl nie jest zainstalowany, ale wget jest dostępny domyślnie:

# wget jako alternatywa dla curl
wget -q --spider --timeout=10 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK"

# W crontab:
0 * * * * /usr/local/bin/myscript.sh && wget -q --spider --timeout=10 "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up" 2>/dev/null

Zaawansowane: wiadomości, status i body w push

Push Monitor w Uptime Kuma obsługuje znacznie więcej niż prosty sygnał „jestem żywy". Parametry status, msg i ping pozwalają na budowanie zaawansowanego monitoringu z bogatym kontekstem.

Parametr status: up vs down

Domyślny push (bez parametru status lub ze status=up) oznacza sukces. Ale możesz też aktywnie zgłosić błąd, wysyłając status=down. To natychmiast przełącza monitor w stan DOWN — nie musisz czekać na upłynięcie interwału:

# Skrypt zgłaszający błąd aktywnie
if ! /usr/local/bin/critical-task.sh; then
    curl -fsS "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=down&msg=Task+failed"
    exit 1
fi
curl -fsS "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=Task+OK"

To kluczowa różnica: bez aktywnego zgłaszania błędu musisz czekać, aż heartbeat interval upłynie. Ze status=down alert jest natychmiastowy.

Parametr msg: kontekst w wiadomości

Parametr msg pozwala przekazać dodatkowy kontekst, który jest widoczny w historii heartbeatów w interfejsie Uptime Kuma. Przydatne zastosowania:

  • Rozmiar backupu: msg=Backup+OK+(12.4+GB)
  • Liczba przetworzonych rekordów: msg=ETL:+15420+records+processed
  • Wersja aplikacji: msg=Deployed+v2.4.1
  • Stan zasobów: msg=Disk+usage:+73%25 (uwaga: % musi być zakodowane jako %25 w URL)
  • Komunikat błędu: msg=FAILED:+Connection+timed+out

Pamiętaj o kodowaniu URL — spacje zastępuj + lub %20, znaki specjalne koduj odpowiednio. W curl możesz użyć --data-urlencode dla automatycznego kodowania.

Parametr ping: czas wykonania na wykresie

Parametr ping przyjmuje wartość w milisekundach i wyświetla ją na wykresie Response Time w Uptime Kuma — tak samo jak czas odpowiedzi HTTP w pull monitorach. To pozwala na:

  • Trend czasu wykonania — widzisz, czy Twój backup trwa coraz dłużej
  • Wykrywanie anomalii — nagły skok czasu wykonania może sygnalizować problem (rosnąca baza, pełny dysk, degradacja dysku)
  • Planowanie capacity — gdy backup zajmuje 5 godzin z 8 dostępnych, czas na optymalizację lub zwiększenie zasobów
# Pomiar czasu z precyzją milisekundową
START_MS=$(date +%s%3N)
/usr/local/bin/heavy-task.sh
END_MS=$(date +%s%3N)
PING=$((END_MS - START_MS))

curl -fsS "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN?status=up&msg=OK&ping=${PING}"

Push z body (POST request)

Oprócz parametrów URL, Push Monitor akceptuje również żądania POST z body w formacie JSON:

# POST z JSON body
curl -fsS -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "status": "up",
    "msg": "Backup completed: 15.2 GB, 1523 files",
    "ping": 184200
  }' \
  "https://twoja-instancja.uptimekuma.eu/api/push/TOKEN"

POST z body jest wygodniejszy przy dłuższych wiadomościach i eliminuje problemy z kodowaniem URL. Format JSON jest czytelniejszy w kodzie i łatwiejszy do generowania programistycznie.

Alerting — co się dzieje, gdy heartbeat nie przychodzi

Cały sens Push Monitora polega na wykrywaniu braku heartbeatu i szybkim alertowaniu. Oto co dzieje się w Uptime Kuma, gdy heartbeat nie przychodzi:

Sekwencja zdarzeń

1

Ostatni heartbeat zarejestrowany

Monitor jest w stanie UP (zielony). Uptime Kuma zapisuje timestamp ostatniego heartbeatu i rozpoczyna odliczanie do następnego oczekiwanego sygnału (heartbeat interval).

2

Heartbeat Interval upływa

Oczekiwany czas minął, a nowy heartbeat nie przyszedł. Uptime Kuma oznacza monitor jako PENDING (oczekujący/niestabilny) — jeszcze nie DOWN, bo może być skonfigurowane retry.

3

Retry logic

Jeśli ustawiono Max Retries > 0, Uptime Kuma czeka kolejne cykle (retry interval). Każdy cykl bez heartbeatu to kolejne „przegapienie". Monitor przechodzi w stan DOWN dopiero po wyczerpaniu wszystkich retries.

4

Status DOWN — wysyłka alertów

Monitor przechodzi w stan DOWN (czerwony). Uptime Kuma natychmiast wysyła powiadomienia przez wszystkie przypisane kanały. Wiadomość zawiera nazwę monitora, czas ostatniego heartbeatu i czas przestoju. Jeśli włączono Resend Notification — alerty będą powtarzane w ustalonych interwałach.

5

Heartbeat wraca — recovery

Gdy skrypt ponownie wyśle heartbeat (np. po naprawie problemu), monitor przechodzi z powrotem w stan UP (zielony). Uptime Kuma wysyła powiadomienie recovery — „Monitor XYZ is back online". W historii heartbeatów widoczny jest dokładny czas przestoju.

Specjalny przypadek: status=down w heartbeat

Warto pamiętać, że alert może nastąpić na dwa sposoby:

  • Brak heartbeatu — skrypt się nie wykonał, zawiesił się lub stracił łączność z Uptime Kuma. Alert po upływie interwału + retries
  • Heartbeat ze status=down — skrypt się wykonał, ale wykrył błąd i aktywnie zgłosił problem. Alert natychmiastowy, bez czekania na upłynięcie interwału

Kombinacja obu mechanizmów daje kompletne pokrycie: wykrywasz zarówno ciche awarie (skrypt nie wykonał się w ogóle), jak i wykryte błędy (skrypt wykonał się, ale napotkał problem).

Konfiguracja kanałów powiadomień

Push Monitor obsługuje wszystkie 91 kanałów powiadomień dostępnych w Uptime Kuma. Dla monitoringu zadań krytycznych (backupy, procesy biznesowe) zalecamy skonfigurować minimum 2 kanały z eskalacją:

  • Pierwszy alert (natychmiast): Telegram / Slack / Discord — szybkie powiadomienie push na telefon
  • Eskalacja (po 30 min): E-mail + SMS — jeśli nikt nie zareagował na pierwszy alert
  • Krytyczny (po 1h): PagerDuty / OpsGenie — integracja z systemem dyżurów on-call
Powiadomienia na stronę statusu

Push Monitory mogą być dodane do publicznej strony statusu w Uptime Kuma. Dzięki temu Twoi klienci lub zespół widzą w czasie rzeczywistym, czy procesy batch, backupy i zaplanowane zadania działają prawidłowo. Strona statusu aktualizuje się automatycznie — bez ręcznej interwencji.

Best practices — jak skonfigurować push monitoring prawidłowo

Push monitoring jest prosty koncepcyjnie, ale łatwo go źle skonfigurować — zbyt agresywne interwały generują fałszywe alarmy, zbyt luźne opóźniają wykrycie problemów. Oto sprawdzone praktyki.

1. Interwał = cykl zadania × 2 (minimum)

Ustaw heartbeat interval na co najmniej dwukrotność cyklu zadania. Cronjob co 5 minut? Interwał 10 minut. Backup co 24h? Interwał 48h (lub 25-26h, jeśli chcesz szybszą reakcję, ale dodaj retries). Zbyt ciasny interwał + jitter w czasie wykonania = fałszywe alarmy, które prowadzą do ignorowania alertów (alert fatigue).

2. Heartbeat wysyłaj TYLKO po sukcesie

Najczęstszy błąd: heartbeat na końcu skryptu niezależnie od wyniku. Używaj && zamiast ; w crontab. W skryptach sprawdzaj kody wyjścia. Heartbeat powinien być potwierdzeniem sukcesu, nie dowodem uruchomienia. Wyjątek: aktywne zgłaszanie błędu ze status=down — to celowe i wartościowe.

3. Używaj timeout w wywołaniach HTTP

Zawsze ustawiaj timeout dla wywołań heartbeat: curl -m 10, requests.get(..., timeout=10), -TimeoutSec 10 w PowerShell. Bez timeout'u, jeśli Uptime Kuma jest chwilowo niedostępna, Twój skrypt może zawisnąć na minuty, czekając na odpowiedź — co zablokuje cały cronjob.

4. Dodaj retry w wywołaniu heartbeat

Chwilowy problem sieciowy nie powinien powodować fałszywego alarmu. curl --retry 3 --retry-delay 5 ponowi próbę 3 razy z 5-sekundowym odstępem. W Pythonie użyj biblioteki tenacity lub prostego try/except z pętlą.

5. Nazewnictwo monitorów — bądź opisowy

Zamiast „Push Monitor 1" napisz „Backup nocny — MySQL prod — serwer db01". W alertach i na dashboardzie od razu wiesz, co się zepsuło. Stosuj konwencję: [Typ] [Co] — [Gdzie], np. „[Cron] Cleanup logów — srv-web03", „[Backup] PostgreSQL — db-master".

6. Tagowanie i grupowanie monitorów

Używaj tagów Uptime Kuma do kategoryzacji push monitorów: backup, cron, etl, iot. Twórz grupy monitorów per serwer lub per środowisko (production, staging). Ułatwia to filtrowanie na dashboardzie i przypisywanie kanałów powiadomień per grupa.

7. Monitoruj monitor — watchdog pattern

Jeśli Twoja instancja Uptime Kuma przestanie działać, push monitory nie wykryją problemów — bo nie ma kto odebrać heartbeat. Rozwiązanie: skonfiguruj zewnętrzny monitoring samej instancji Uptime Kuma (np. prosty uptime check z innej usługi lub drugiej instancji). Na hostingu zarządzanym SmartXHosting.pl ten problem nie istnieje — monitoring infrastruktury jest po stronie dostawcy.

8. Przechowuj Push URL bezpiecznie

Push URL zawiera token, który pozwala wysyłać heartbeaty do Twojego monitora. Traktuj go jak hasło — przechowuj w zmiennych środowiskowych, secret managerze (Vault, AWS Secrets Manager) lub plikach konfiguracyjnych z ograniczonymi uprawnieniami. Nie commituj tokenów do repozytoriów Git.

# Zamiast hardcoded URL w skrypcie:
# curl "https://instancja/api/push/TOKEN_W_JAWNYM_TEKSCIE"

# Użyj zmiennej środowiskowej:
export UPTIME_KUMA_PUSH_URL="https://instancja/api/push/TOKEN"
# W skrypcie:
curl -fsS -m 10 "${UPTIME_KUMA_PUSH_URL}?status=up&msg=OK"

# Lub z pliku:
PUSH_URL=$(cat /etc/uptime-kuma/backup-monitor.url)
curl -fsS -m 10 "${PUSH_URL}?status=up&msg=OK"

9. Testuj push monitoring po konfiguracji

Po dodaniu Push Monitora zawsze przetestuj cały flow: wyślij ręczny heartbeat (curl z terminala), upewnij się że monitor przechodzi w UP, poczekaj na upłynięcie interwału bez heartbeatu i sprawdź czy alert dochodzi. Jeden test uchroni Cię przed fałszywym poczuciem bezpieczeństwa.

10. Dokumentuj, co jest monitorowane

Utrzymuj listę push monitorów z informacją: co monitorują, na jakim serwerze działa skrypt, jaki jest oczekiwany harmonogram, kto jest odpowiedzialny. Bez dokumentacji push monitory stają się „magicznymi" elementami — nikt nie wie co robią, ale wszyscy boją się ich dotknąć.

SmartXHosting.pl — push monitoring bez kłopotów

Na SmartXHosting.pl Twoja instancja Uptime Kuma ma stały, publiczny adres HTTPS z automatycznym certyfikatem SSL. Push URL jest dostępny 24/7 z dowolnego miejsca na świecie. Automatyczne aktualizacje, codzienny backup, wsparcie techniczne — Ty skupiasz się na monitorowaniu, my dbamy o infrastrukturę.

Podsumowanie

Push Monitor (Heartbeat) w Uptime Kuma to potężne narzędzie do monitorowania procesów, które są niewidoczne dla tradycyjnego monitoringu aktywnego. Dzięki odwróconej logice — to skrypt wysyła sygnał do Uptime Kuma, nie odwrotnie — możesz monitorować dosłownie każde zadanie, które da się zakończyć wywołaniem HTTP.

Kluczowe wnioski z tego artykułu:

  • Push monitoring uzupełnia pull monitoring — oba modele są potrzebne w dobrze zaprojektowanej infrastrukturze
  • Dead Man's Switch — brak heartbeatu oznacza problem. Prosta, ale niezwykle skuteczna logika
  • Jedno wywołanie HTTP — integracja to dosłownie jedna linia kodu (curl, requests.get(), Invoke-RestMethod)
  • Bogaty kontekst — parametry status, msg i ping pozwalają na raportowanie sukcesu/błędu, wiadomości i czasu wykonania
  • Uniwersalne zastosowanie — cronjobs, backupy, ETL, Windows Task Scheduler, Docker healthcheck, urządzenia IoT
  • Natychmiastowy alert — ze status=down nie musisz czekać na upłynięcie interwału
  • Best practices — odpowiedni interwał, heartbeat tylko po sukcesie, timeout, retry, bezpieczne przechowywanie tokenów

Push Monitor jest jedną z tych funkcji, które wydają się proste — bo takie są. Ale ich wartość jest ogromna. Ile razy backup nie wykonał się w nocy i nikt o tym nie wiedział? Ile razy cronjob cicho przestał działać? Push monitoring w Uptime Kuma eliminuje te scenariusze — za cenę jednej linii kodu na końcu skryptu.

Zacznij monitorować swoje zadania i skrypty

Zamów hosting Uptime Kuma na SmartXHosting.pl — gotowa instancja pod własną domeną, stały adres HTTPS do push monitoringu, automatyczne aktualizacje i codzienny backup. Skonfiguruj pierwszy Push Monitor w 5 minut.

Zamów hosting Uptime Kuma

Najczęściej zadawane pytania

Czy Push Monitor wymaga otwartych portów na monitorowanym serwerze?
Nie. Push Monitor działa w odwrotnym kierunku — to monitorowany skrypt nawiązuje połączenie wychodzące (HTTP GET/POST) do Uptime Kuma. Nie wymaga otwierania żadnych portów przychodzących na monitorowanym serwerze. Działa przez NAT, firewalle i VPN bez żadnej konfiguracji sieciowej — wystarczy, że serwer ma dostęp HTTP/HTTPS do instancji Uptime Kuma.
Ile Push Monitorów mogę utworzyć w Uptime Kuma?
Nie ma sztucznego limitu na liczbę Push Monitorów w Uptime Kuma. Możesz mieć ich setki — każdy z unikalnym Push URL. Jedynym ograniczeniem są zasoby serwera (RAM, dysk na dane heartbeatów). Na praktyce kilkadziesiąt-kilkaset push monitorów nie stanowi żadnego problemu wydajnościowego, ponieważ push monitory są „pasywne" — nie generują ruchu wychodzącego, tylko odbierają heartbeaty.
Co się stanie, jeśli moja instancja Uptime Kuma jest chwilowo niedostępna, gdy skrypt wysyła heartbeat?
Heartbeat nie zostanie zarejestrowany. Dlatego zalecamy: (1) dodanie --retry 3 w curl dla automatycznego ponowienia próby, (2) ustawienie heartbeat interval z zapasem (np. podwójny czas cyklu) i (3) skonfigurowanie Max Retries > 0 w Uptime Kuma, co da dodatkowy bufor. Krótkotrwała niedostępność Uptime Kuma nie spowoduje fałszywego alarmu, jeśli konfiguracja ma odpowiednie marginesy. Na hostingu zarządzanym SmartXHosting.pl uptime instancji jest monitorowany i utrzymywany na najwyższym poziomie.
Czy mogę monitorować zadanie, które uruchamia się raz w tygodniu?
Tak. Ustaw Heartbeat Interval na wartość większą niż tydzień (np. 648 000 sekund = 7.5 dnia). Push Monitor w Uptime Kuma obsługuje interwały do wielu dni. Pamiętaj o odpowiednim marginesie — jeśli backup tygodniowy uruchamia się w niedzielę o 3:00, ale czasem trwa do 6:00, interwał powinien to uwzględniać.
Czym różni się Push Monitor od Docker Container Monitor w Uptime Kuma?
Docker Container Monitor to monitor aktywny (pull) — Uptime Kuma łączy się z Docker socket i sprawdza stan kontenera (Running, Healthy). Push Monitor jest pasywny — kontener sam musi wysłać heartbeat. Docker Monitor sprawdza czy kontener żyje; Push Monitor sprawdza czy aplikacja w kontenerze działa prawidłowo. Najlepsza praktyka to użycie obu: Docker Monitor dla stanu kontenera + Push Monitor (przez HEALTHCHECK) dla zdrowia aplikacji.
Czy Push URL jest bezpieczny? Co jeśli ktoś pozna mój token?
Push URL zawiera unikalny token, który pełni rolę klucza autoryzacji. Jeśli ktoś pozna Twój token, może wysyłać fałszywe heartbeaty (utrzymując monitor w stanie UP nawet gdy usługa nie działa). Dlatego traktuj Push URL jak hasło: przechowuj w zmiennych środowiskowych lub secret managerze, nie commituj do repozytoriów Git, używaj HTTPS (nigdy HTTP). Jeśli token zostanie skompromitowany, możesz usunąć monitor i utworzyć nowy — wygeneruje się nowy token.
Czy mogę wysłać Push heartbeat bez curl — np. z aplikacji Node.js, Go lub Java?
Tak. Push Monitor akceptuje standardowe żądania HTTP GET lub POST na Push URL. Możesz użyć dowolnej biblioteki HTTP w dowolnym języku: fetch() w Node.js, http.Get() w Go, HttpClient w Javie, HttpWebRequest w C#. To zwykłe żądanie HTTP — wystarczy wykonać GET na URL z parametrami status, msg i ping. Nic więcej nie jest wymagane — żadne SDK, biblioteki ani agenty.