Работа в 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
tuna monitor ping YOUR_MONITOR_ID --api-key=your-api-key
# Сохранить ключ в конфиг
tuna config save-api-key your-api-key
# Теперь можно использовать без явного указания ключа
tuna monitor ping YOUR_MONITOR_KEY
monitor ping
Отправляет сигнал для Heartbeat монитора.
Синтаксис
tuna monitor ping MONITOR_ID [флаги]
Параметры
| Параметр | Описание | По умолчанию |
|---|---|---|
MONITOR_ID | Ключ монитора (обязательный) | — |
--state | Состояние: ping, start, finish, fail | ping |
--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 выполняемой команды. Логи можно просмотреть в веб-интерфейсе в истории событий монитора.
Для отключения отправки логов используйте флаг --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-key | API ключ для авторизации | $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"