Задача (Job)
Задача/Job - монитор предназначен для отслеживания выполнения периодических задач: backup скриптов, cron задач и других операций по расписанию.
Принцип работы
- Вы создаёте Job монитор и задаёте расписание выполнения
- При запуске задачи отправляется сигнал
start - При успешном завершении отправляется сигнал
finish - При ошибке отправляется сигнал
fail - Система отслеживает своевременность запуска и время выполнения
┌─────────────┐ start ┌─────────────┐ finish ┌─────────────┐
│ Ваш скрипт │ ──────────▶ │ Tuna │ ◀────────── │ Ваш скрипт │
│ (start) │ │ Monitor │ │ (finish) │
└─────────────┘ └─────────────┘ └─────────────┘
Параметры
Описание
| Параметр | Описание | Обязательный |
|---|---|---|
| Название | Уникальное имя монитора | Да |
| Описание | Примечание о назначении задачи | Нет |
Детали
Указываем ожидаемый интервал между задачами и опционально максимальное время выполнения.
Интервал
Поддерживается два типа расписания:
- Интервал
- Cron выражение
Ожидаемый интервал между сигналами:
| Значение | Описание |
|---|---|
| 1 минута | Сигнал ожидается каждую минуту |
| 5 минут | Сигнал ожидается каждые 5 минут |
| 15 минут | Сигнал ожидается каждые 15 минут |
| 30 минут | Сигнал ожидается каждые 30 минут |
| 60 минут | Сигнал ожидается каждый час |
Для нерегулярных расписаний используйте Cron-выражение:
┌───────────── минута (0 - 59)
│ ┌───────────── час (0 - 23)
│ │ ┌───────────── день месяца (1 - 31)
│ │ │ ┌───────────── месяц (1 - 12)
│ │ │ │ ┌───────────── день недели (0 - 6)
│ │ │ │ │
* * * * *
Примеры:
| Выражение | Описание |
|---|---|
*/5 * * * * | Каждые 5 минут |
0 * * * * | Каждый час |
0 9-18 * * 1-5 | Каждый час с 9 до 18 по будням |
Время выполнения
Максимальная длительность задачи Running Time - если задача выполняется дольше указанного времени, отправляется уведомление.
Уведомления
Задача монитор отправляет уведом ления в следующих случаях:
| Причина | Описание |
|---|---|
| Fail | Задача завершилась с ошибкой (сигнал fail или exit code != 0) |
| Not Running | Задача не запустилась в течение Grace Period |
| Long Running | Задача выполняется дольше Running Time |
| Recovery | Задача восстановилась после ошибки |
Здесь можно указать группы контактов для уведомлений, если не указывать, то используется Email пользователя.
Также задаётся период ожидания - Grace Period. Добавляется к ожидаемому времени следующего сигнала. Например, если интервал 5 минут и Grace Period 2 минуты, то алерт будет отправлен через 7 минут после последнего сигнала. Повтор уведомлений напоминает о проблеме, можно задать интервал этих напоминаний и их количество.
Использование
Через CLI (рекомендуется)
Команда tuna monitor exec автоматически отправляет сигналы start, finish или fail:
tuna monitor exec MONITOR_ID -- ./backup.sh
Если вы хотите контролировать сигналы вручную:
# Начало выполнения
tuna monitor ping MONITOR_ID --state=start
# Выполнение вашей задачи
./your-task.sh
# Успешное завершение
tuna monitor ping MONITOR_ID --state=finish
# Или ошибка
tuna monitor ping MONITOR_ID --state=fail
Через HTTP
Помимо tuna cli, можно отправлять сигналы напрямую через HTTP запросы. Это полезно когда CLI недоступен или вы используете другие языки программирования.
Формат URL:
https://monitor.tuna.am/{MONITOR_ID}/{slug-name}
{slug-name} - опционален и нужен скорее для простой идентификации монитор а в коде.
- curl
- wget
- Python
- PowerShell
# Простой 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=Все системы работают"
# Простой ping
wget -qO- "https://monitor.tuna.am/MONITOR_ID/test"
# С параметрами
wget -qO- "https://monitor.tuna.am/MONITOR_ID/test?status=ping&host=server-01"
import requests
from urllib.parse import urlencode
MONITOR_ID = "your_monitor_id"
BASE_URL = f"https://monitor.tuna.am/{ENDPOINT_TOKEN}"
# Простой ping
requests.get(BASE_URL)
# С параметрами
params = {
"status": "ping",
"host": "server-01",
"message": "Задача вы полнена успешно"
}
requests.get(BASE_URL, params=params)
# Простой ping
Invoke-WebRequest -Uri "https://monitor.tuna.am/MONITOR_ID/test" -Method GET
# С параметрами
$params = @{
status = "ping"
host = "server-01"
message = "Backup completed"
}
$uri = "https://monitor.tuna.am/MONITOR_ID/test"
Invoke-WebRequest -Uri $uri -Method GET -Body $params
Параметры запроса
| Параметр | Описание |
|---|---|
status | Статус сигнала: ping, start, finish, fail |
host | Идентификатор хоста (полезно при нескольких источниках) |
message | Произвольное сообщение |
Подробнее: Работа с мониторами в CLI
Статусы
| Статус | Описание |
|---|---|
| New | Монитор создан, ожидается первый запуск |
| Running | Задача выполняется (получен сигнал start) |
| Up | Задача успешно завершена (получен сигнал finish) |
| Down | Задача завершилась с ошибкой или не запустилась вовремя |
Логирование
При использовании tuna monitor exec система автоматически захватывает stdout и stderr вашей задачи. Логи можно просмотреть в интерфейсе в истории событий монитора.
Для отключения отправки логов используйте флаг --no-stdout:
tuna monitor exec MONITOR_ID --no-stdout -- ./task.sh
Примеры использования
Backup PostgreSQL
#!/bin/bash
# /scripts/backup-postgres.sh
tuna monitor exec MONITOR_ID -- pg_dump -U postgres mydb > /backups/mydb_$(date +%Y%m%d).sql
Синхронизация данных
#!/bin/bash
# /scripts/sync-data.sh
tuna monitor exec MONITOR_ID -- rsync -avz /data/ remote:/backup/data/
Crontab
# Backup базы данных каждую ночь в 3:00
0 3 * * * tuna monitor exec MONITOR_ID -- /scripts/backup-db.sh
# Очистка логов каждый час
0 * * * * tuna monitor exec MONITOR_ID -- /scripts/cleanup-logs.sh