Skip to main content

Работа в CLI

Обзор

Консольный клиент tuna позволяет взаимодействовать с Job и Heartbeat мониторами напрямую из терминала или скриптов.

Основные команды:

  • tuna monitor ping — отправка сигнала Heartbeat монитору
  • tuna monitor exec — выполнение команды с отслеживанием Job монитора
  • tuna monitor status — просмотр статуса мониторов

Авторизация

Для просмотра статуса монитора необходим API-ключ. Его можно передать несколькими способами:

export TUNA_API_KEY=your-api-key
tuna monitor ping YOUR_MONITOR_ID

monitor ping

Отправляет сигнал для Heartbeat монитора.

Синтаксис

tuna monitor ping MONITOR_ID [флаги]

Параметры

ПараметрОписаниеПо умолчанию
MONITOR_IDКлюч монитора (обязательный)
--stateСостояние: ping, start, finish, failping
--messageДополнительное сообщение
--hostИмя хоста отправителяhostname

Примеры

Простой ping

tuna monitor ping MONITOR_ID

С указанием хоста

tuna monitor ping MONITOR_ID --host=server-01

С сообщением

tuna monitor ping MONITOR_ID --message="All systems operational"

Разные состояния

# Начало работы
tuna monitor ping MONITOR_ID --state=start

# Успешное завершение
tuna monitor ping MONITOR_ID --state=finish

# Ошибка
tuna monitor ping MONITOR_ID --state=fail

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

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

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

# /etc/systemd/system/heartbeat.service
[Unit]
Description=Send heartbeat to Tuna

[Service]
Type=oneshot
ExecStart=/usr/local/bin/tuna monitor ping MONITOR_ID
# /etc/systemd/system/heartbeat.timer
[Unit]
Description=Heartbeat timer

[Timer]
OnBootSec=1min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target

monitor exec

Выполняет команду и автоматически отслеживает Job монитор. При запуске отправляется сигнал start, при успешном завершении — finish, при ошибке — fail.

Синтаксис

tuna monitor exec MONITOR_ID [флаги] -- COMMAND [ARGS...]

Параметры

ПараметрОписаниеПо умолчанию
MONITOR_IDКлюч монитора (обязательный)
--hostИмя хоста выполненияhostname
--no-stdoutНе отправлять вывод на серверfalse

Примеры

Простой запуск

tuna monitor exec MONITOR_ID -- ./backup.sh

С указанием хоста

tuna monitor exec MONITOR_ID --host=backup-server -- ./backup.sh

Без отправки логов

tuna monitor exec MONITOR_ID --no-stdout -- ./backup.sh

Команда с аргументами

tuna monitor exec MONITOR_ID -- pg_dump -U postgres -d mydb -f /backups/dump.sql

Команда с пайпом

tuna monitor exec MONITOR_ID -- bash -c 'pg_dump mydb | gzip > /backups/dump.sql.gz'

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

# Backup каждую ночь в 3:00
0 3 * * * /usr/local/bin/tuna monitor exec MONITOR_ID -- /scripts/backup.sh

# Очистка логов каждый час
0 * * * * /usr/local/bin/tuna monitor exec MONITOR_ID -- /scripts/cleanup.sh

Логирование

При использовании monitor exec система захватывает stdout и stderr выполняемой команды. Логи можно просмотреть в веб-интерфейсе в истории событий монитора.

скриншот с сообщением в message

Для отключения отправки логов используйте флаг --no-stdout:

tuna monitor exec MONITOR_ID --no-stdout -- ./command.sh

Обработка сигналов

monitor exec корректно обрабатывает сигналы Unix:

  • При получении SIGINT, SIGTERM, SIGHUP — сигнал передаётся дочернему процессу
  • При завершении дочернего процесса с ненулевым кодом — отправляется fail
  • При корректном завершении (exit code 0) — отправляется finish

monitor status

Показывает статус мониторов команды. Для просмотра статуса необходим API-ключ.

Синтаксис

tuna monitor status [MONITOR_ID] [флаги]

Параметры

ПараметрОписаниеПо умолчанию
KEYКлюч конкретного монитора (опционально)
--api-keyAPI ключ для авторизации$TUNA_API_KEY

Примеры

Статус всех мониторов

tuna monitor status

Статус конкретного монитора

tuna monitor status MONITOR_ID

Практические примеры

Backup PostgreSQL с мониторингом

#!/bin/bash
# /scripts/backup-postgres.sh

BACKUP_DIR="/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="production"

tuna monitor exec MONITOR_ID --host=pg-prod-replica-1 -- bash -c "
pg_dump -U postgres $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -name '*.sql.gz' -mtime +7 -delete
"

Синхронизация файлов

#!/bin/bash
# /scripts/sync-files.sh

tuna monitor exec MONITOR_ID -- rsync -avz --delete /data/ backup-server:/backups/data/

Мониторинг сервиса в Docker

#!/bin/bash
# healthcheck.sh внутри контейнера

# Проверка здоровья приложения
if curl -sf http://localhost:8080/health > /dev/null; then
tuna monitor ping MONITOR_ID --message="healthy"
else
tuna monitor ping MONITOR_ID --state=fail --message="unhealthy"
fi

Мониторинг GitLab Runner

# В crontab на машине с GitLab Runner
*/5 * * * * /usr/local/bin/tuna monitor ping MONITOR_ID --host=raspberry-pi --message="Runner active"