Skip to main content

Heartbeat

Перейти в личный кабинет

Heartbeat - монитор предназначен для отслеживания регулярных сигналов от сервисов, работающих в закрытых сетях, IoT устройств или фоновых процессов.


Принцип работы

  1. Вы создаёте Heartbeat монитор и задаёте ожидаемый интервал сигналов
  2. Ваше приложение периодически отправляет сигнал ping
  3. Если сигнал не приходит в течение заданного времени — отправляется уведомление
┌─────────────┐    ping      ┌─────────────┐
│ Ваш сервис │ ──────────▶ │ Tuna │
│ (каждые │ │ Monitor │
│ N минут) │ │ │
└─────────────┘ └─────────────┘
│ │
│ Нет ping? │
│ ▼
│ ┌─────────────┐
│ │ Алерт! │
│ └─────────────┘

Параметры

Описание

ПараметрОписаниеОбязательный
НазваниеУникальное имя монитораДа
ОписаниеПримечание о назначении задачиНет
скриншот с о�писанием монитора

Детали

Указываем ожидаемый интервал между задачами и опционально максимальное время выполнения.

скриншот с деталями heartbeat монитора скриншот с деталями heartbeat монитора

Интервал

Поддерживается два типа расписания:

Ожидаемый интервал между сигналами:

ЗначениеОписание
1 минутаСигнал ожидается каждую минуту
5 минутСигнал ожидается каждые 5 минут
15 минутСигнал ожидается каждые 15 минут
30 минутСигнал ожидается каждые 30 минут
60 минутСигнал ожидается каждый час

Уведомления

Задача монитор отправляет уведомления в следующих случаях:

ПричинаОписание
Not RunningЗадача не запустилась в течение Grace Period
RecoveryЗадача восстановилась после ошибки

Здесь можно указать группы контактов для уведомлений, если не указывать, то используется Email пользователя.

Также задаётся период ожидания - Grace Period. Добавляется к ожидаемому времени следующего сигнала. Например, если интервал 5 минут и Grace Period 2 минуты, то алерт будет отправлен через 7 минут после последнего сигнала. Повтор уведомлений напоминает о проблеме, можно задать интервал этих напоминаний и их количество.

скриншот с деталями job монитора

Использование

Через CLI

# Простой ping
tuna monitor ping MONITOR_ID

# С указанием хоста (полезно для идентификации источника)
tuna monitor ping MONITOR_ID --host=server-01

# С сообщением
tuna monitor ping MONITOR_ID --message="All systems operational"

Через HTTP

Помимо tuna cli, можно отправлять сигналы напрямую через HTTP запросы. Это полезно когда CLI недоступен или вы используете другие языки программирования.

Формат URL:

https://monitor.tuna.am/{MONITOR_ID}/{slug-name}
tip

{slug-name} - опционален и нужен скорее для простой идентификации монитора в коде.

# Простой ping
curl -s "https://monitor.tuna.am/MONITOR_ID/test"

# С указанием статуса
curl -s "https://monitor.tuna.am/MONITOR_ID/test?status=ping"
curl -s "https://monitor.tuna.am/MONITOR_ID/test?status=start"
curl -s "https://monitor.tuna.am/MONITOR_ID/test?status=finish"
curl -s "https://monitor.tuna.am/MONITOR_ID/test?status=fail"

# С сообщением (корректная кодировка UTF-8)
curl -G "https://monitor.tuna.am/MONITOR_ID/test" \
--data-urlencode "message=Backup completed successfully"

# С указанием хоста и сообщением
curl -G "https://monitor.tuna.am/MONITOR_ID/test?host=server-01" \
--data-urlencode "message=Все системы работают"

Параметры запроса

ПараметрОписание
statusСтатус сигнала: ping, start, finish, fail
hostИдентификатор хоста (полезно при нескольких источниках)
messageПроизвольное сообщение

В systemd сервисе

# /etc/systemd/system/my-heartbeat.service
[Unit]
Description=Heartbeat ping to Tuna
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/tuna monitor ping MONITOR_ID

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/my-heartbeat.timer
[Unit]
Description=Run heartbeat every 5 minutes

[Timer]
OnBootSec=1min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target
systemctl enable --now my-heartbeat.timer

В crontab

# Heartbeat каждые 5 минут
*/5 * * * * /usr/local/bin/tuna monitor ping MONITOR_ID

Статусы

СтатусОписание
NewМонитор создан, ожидается первый сигнал
UpСигналы приходят регулярно
DownСигнал не пришёл в ожидаемое время

Примеры использования

Мониторинг GitLab Runner в офисе

# На машине с GitLab Runner
*/5 * * * * /usr/local/bin/tuna monitor ping MONITOR_ID --host=gitLab-runner-0

Мониторинг VPN соединения

#!/bin/bash
# Проверяем VPN канал и отправляем heartbeat только если соединение активно

ping -c 1 192.168.14.88 && tuna monitor ping MONITOR_ID --message="VPN is up"