Пульсары
Пульсары (или heartbeats) — это проверки, которые ожидают регулярные «сигналы» от ваших автоматизированных задач и сообщают, если сигнал не пришёл вовремя.
Что такое Пульсар
Пульсар — это пассивная проверка: Pingera ничего не запрашивает сама, а ждёт HTTP-запросы от вашей задачи. Если очередной сигнал не поступил в ожидаемое время, Pingera отправляет оповещение.
Используйте Пульсары для мониторинга:
- резервного копирования;
- импорта и выгрузки данных;
- периодических скриптов и cron-задач;
- ETL-процессов и очередей.
Пульсары не расходуют кредиты, но учитываются в лимите количества проверок вашего тарифа.
Создание Пульсара

- Название — укажите осмысленное имя, чтобы легко найти пульсар в списке.
- Ожидаемая частота (period) — как часто ваша задача должна отправлять сигнал.
- Допустимая задержка (grace period) — дополнительное время ожидания после истечения периода, прежде чем пульсар будет считаться недоступным. По умолчанию — 1 час.
- Каналы оповещений — куда отправлять уведомления.
После создания на странице пульсара появится его URL вида:
https://api.pingera.ru/v1/heartbeats/<ID пульсара>/ping
Как выбрать период и задержку
Указывайте в качестве периода интервал запуска задачи, а в качестве задержки — время, которого с запасом хватит на её выполнение.
| Задача | Период | Допустимая задержка |
|---|---|---|
| Скрипт каждые 5 минут | 5 минут | 5–10 минут |
| Ежечасная синхронизация | 1 час | 15–30 минут |
| Ночное резервное копирование | 1 день | 1–2 часа |
| Еженедельный отчёт | 7 дней | 6–12 часов |
Как работает таймер
Таймер запускается при создании пульсара и перезапускается при каждом полученном сигнале.
- Пока с момента последнего сигнала (или создания пульсара) не истёк период, пульсар в статусе Работает (
up). - После истечения периода начинается допустимая задержка — статус Ожидание (
grace). Оповещение на этом этапе не отправляется. - Если сигнал не пришёл и за время задержки, статус меняется на Недоступен (
down) и отправляется оповещение. - Как только приходит новый сигнал, статус возвращается в Работает и отправляется уведомление о восстановлении.
Пример: период — 60 минут, допустимая задержка — 15 минут.
- Сигнал получен в 10:00 → следующий ожидается до 11:00.
- В 11:00 сигнала нет → статус «Ожидание».
- В 11:15 сигнала всё ещё нет → статус «Недоступен», отправляется оповещение.
- Сигнал получен в 11:40 → статус «Работает», отправляется уведомление о восстановлении. Следующий сигнал ожидается до 12:40.
Статус пульсаров пересчитывается каждые 30 секунд, поэтому оповещение может прийти с небольшой задержкой.
Сразу после создания таймер уже идёт. Если задача запускается реже, чем указанный период, или вы ещё не настроили отправку сигналов, пульсар перейдёт в статус «Недоступен».
Отправка сигнала
Отправьте GET или POST запрос на URL пульсара. Аутентификация не требуется. Другие методы не поддерживаются.
Отправляйте сигнал после успешного выполнения задачи. Если задача упала, не отправляйте сигнал — пульсар перейдёт в статус «Недоступен», и вы получите оповещение. Отдельного сигнала об ошибке нет.
Используйте таймаут и повторные попытки, чтобы кратковременные сетевые проблемы не приводили к ложным оповещениям.
- cron
- systemd
- Kubernetes
- Python
- Node.js
- PowerShell
- GitHub Actions
# Сигнал отправляется, только если backup.sh завершился успешно
0 3 * * * /opt/scripts/backup.sh && curl -fsS -m 10 --retry 3 https://api.pingera.ru/v1/heartbeats/<ID>/ping > /dev/null
# /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup
OnSuccess=backup-heartbeat.service
[Service]
Type=oneshot
ExecStart=/opt/scripts/backup.sh
# /etc/systemd/system/backup-heartbeat.service
[Service]
Type=oneshot
ExecStart=/usr/bin/curl -fsS -m 10 --retry 3 https://api.pingera.ru/v1/heartbeats/<ID>/ping
OnSuccess= поддерживается в systemd версии 249 и новее.
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-backup
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: backup
image: registry.example.com/backup:latest
command:
- /bin/sh
- -c
- /app/backup.sh && curl -fsS -m 10 --retry 3 https://api.pingera.ru/v1/heartbeats/<ID>/ping
import requests
HEARTBEAT_URL = "https://api.pingera.ru/v1/heartbeats/<ID>/ping"
def main():
run_import() # ваша задача; при исключении сигнал не отправится
requests.post(HEARTBEAT_URL, json={"rows_imported": 1250}, timeout=10)
if __name__ == "__main__":
main()
const HEARTBEAT_URL = "https://api.pingera.ru/v1/heartbeats/<ID>/ping";
await runImport(); // ваша задача; при ошибке сигнал не отправится
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10_000) });
& C:\Scripts\backup.ps1
if ($LASTEXITCODE -eq 0) {
Invoke-RestMethod -Uri "https://api.pingera.ru/v1/heartbeats/<ID>/ping" -TimeoutSec 10
}
on:
schedule:
- cron: "0 3 * * *"
jobs:
backup:
runs-on: ubuntu-latest
steps:
- run: ./backup.sh
- name: Pingera heartbeat
if: success()
run: curl -fsS -m 10 --retry 3 https://api.pingera.ru/v1/heartbeats/${{ secrets.PINGERA_HEARTBEAT_ID }}/ping
Передача данных с сигналом
В POST-запросе можно передать JSON — например, количество обработанных записей или длительность задачи. Укажите заголовок Content-Type: application/json, иначе тело запроса не сохранится.
curl -fsS -m 10 -X POST https://api.pingera.ru/v1/heartbeats/<ID>/ping \
-H "Content-Type: application/json" \
-d '{"duration_seconds": 512, "rows": 1250}'
Переданные данные, время, IP-адрес и User-Agent каждого сигнала отображаются в истории сигналов на странице пульсара.
Ответ
{
"status": "ok",
"message": "Ping received successfully",
"check_id": "h7j3k9l2m4n6",
"next_expected_ping": "2026-10-09T03:00:12.345678"
}
next_expected_ping — время в UTC, до которого ожидается следующий сигнал (без учёта допустимой задержки).
Ограничения
- Не более 5 сигналов в минуту на один пульсар. При превышении вернётся ошибка
429. - Сигналы приостановленного пульсара не принимаются: вернётся ошибка
404.
Оповещения
Каналы оповещений для пульсара выбираются в его настройках, отдельные правила оповещений не нужны. Pingera отправляет уведомление, когда пульсар переходит в статус «Недоступен», и уведомление о восстановлении, когда приходит новый сигнал.
Создать и настроить каналы можно в разделе Оповещения → Каналы оповещений. Формат вебхуков для пульсаров описан в разделе Вебхуки.
Частые проблемы
- Пульсар перешёл в «Недоступен» сразу после создания. Таймер начинается при создании. Отправьте первый сигнал вручную или увеличьте период.
- Ошибка
429. Задача отправляет сигналы слишком часто, например в цикле. Отправляйте один сигнал после завершения задачи. - Ошибка
404. Проверьте ID в URL и что пульсар не приостановлен. - Ложные оповещения. Увеличьте допустимую задержку, если время выполнения задачи сильно меняется, и используйте повторные попытки при отправке сигнала.
API
Пульсарами можно управлять через API: GET/POST /v1/heartbeats, GET/PATCH/DELETE /v1/heartbeats/{id}, история сигналов — GET /v1/heartbeats/{id}/pings. Подробнее — в документации API.