Мониторинг доступности JetKVM
JetKVM — это компактное IP-KVM устройство на базе Rockchip RV1106 (ARM Cortex-A7).
Для embedded устройств, таких как JetKVM, критически важно отслеживать их работоспособность. Heartbeat-мониторинг позволяет получать уведомления, если устройство потеряло связь с интернетом или перестало отвечать.
Эта инструкция объясняет, как настроить мониторинг доступности JetKVM. Если вам также нужен удалённый доступ к устройству через интернет, см. инструкцию по настройке туннелей.
Подготовка
Что потребуется
- JetKVM с системной версией v0.2.7 или новее
- Developer Mode включен и SSH-доступ настроен (см. инструкцию по туннелям)
- Аккаунт на tuna.am
Установка tuna на JetKVM (опционально)
Heartbeat уведомления можно отправлять и при помощи wget, установка tuna cli не обязательна, но если вы также используете туннели для удалённого доступа, то логично будет использовать этот же клиент и для Heartbeat уведомлений.
Подключитесь к JetKVM по SSH:
ssh root@<IP-адрес-JetKVM>
Установите tuna с помощью скрипта, указав /userdata/tuna в качестве директории установки:
mkdir -p /userdata/tuna
INSECURE=true INSTALL_DIR=/userdata/tuna sh -c "$(wget -qO- http://releases.tuna.am/tuna/get.sh)"
Раздел /userdata сохраняется при OTA-обновлениях, поэтому tuna не придётся переустанавливать.
Создание Heartbeat монитора
- Перейдите в личный кабинет → Мониторы
- Нажмите "Создать монитор"
- Выберите тип Heartbeat
- Задайте параметры:
- Описание: JetKVM availability
- Интервал: 5 минут (на бесплатном тарифе минимальный 30 минут)
- Grace Period: 1 минута (время ожидания перед алертом)
- Настройте каналы уведомлений
- Сохраните монитор и скопируйте MONITOR_ID
Подробнее о Heartbeat мониторах: Документация Heartbeat
Создание init-скрипта мониторинга
Начиная с версии 0.31, клиент tuna содержит встроенные CA-сертификаты и не зависит от системных. На JetKVM отсутствуют корневые CA-сертификаты, поэтому wget может работать только с --no-check-certificate, а API monitor.tuna.am может быть недоступен по HTTP. Рекомендуем использовать tuna CLI для мониторинга — он гарантированно работает по HTTPS.
Создайте init-скрипт /userdata/init.d/S97tuna-heartbeat:
- tuna CLI (рекомендуется)
- wget
cat << 'INITEOF' > /userdata/init.d/S97tuna-heartbeat
#!/bin/sh
PIDFILE=/tmp/tuna-heartbeat.pid
wait_network() {
i=0
while ! ip route | grep -q default; do
sleep 1
i=$((i + 1))
if [ "$i" -ge 60 ]; then
return 1
fi
done
return 0
}
start() {
(
wait_network || exit 1
while true; do
/userdata/tuna/tuna monitor ping --host=jetkvm YOUR_MONITOR_ID
# Интервал между пингами (30 минут = 1800 секунд)
sleep 1800
done
) &
echo $! > "$PIDFILE"
}
stop() {
if [ -f "$PIDFILE" ]; then
kill "$(cat "$PIDFILE")" 2>/dev/null
rm -f "$PIDFILE"
fi
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 1; start ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac
INITEOF
chmod +x /userdata/init.d/S97tuna-heartbeat
cat << 'INITEOF' > /userdata/init.d/S97tuna-heartbeat
#!/bin/sh
PIDFILE=/tmp/tuna-heartbeat.pid
wait_network() {
i=0
while ! ip route | grep -q default; do
sleep 1
i=$((i + 1))
if [ "$i" -ge 60 ]; then
return 1
fi
done
return 0
}
start() {
(
wait_network || exit 1
while true; do
wget -q -T 5 --no-check-certificate -O /dev/null "https://monitor.tuna.am/YOUR_MONITOR_ID/jetkvm"
# Интервал между пингами (30 минут = 1800 секунд)
sleep 1800
done
) &
echo $! > "$PIDFILE"
}
stop() {
if [ -f "$PIDFILE" ]; then
kill "$(cat "$PIDFILE")" 2>/dev/null
rm -f "$PIDFILE"
fi
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 1; start ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac
INITEOF
chmod +x /userdata/init.d/S97tuna-heartbeat
Замените YOUR_MONITOR_ID на реальный ID монитора из личного кабинета.
Пояснение параметров:
| Параметр | Описание |
|---|---|
YOUR_MONITOR_ID | ID монитора из личного кабинета (обязательно) |
--host=jetkvm | Идентификатор устройства в логах мониторинга (опционально) |
sleep 1800 | Интервал между сигналами в секундах (должен соответствовать настройке монитора) |
Скрипт использует тот же формат, что и скрипты для туннелей: #!/bin/sh, обработка аргументов start/stop, фоновый запуск. Подробнее о требованиях к init-скриптам см. инструкцию по туннелям.
Проверка работы
Запустите скрипт вручную:
/userdata/init.d/S97tuna-heartbeat start
Убедитесь, что процесс запущен:
ps | grep heartbeat
Проверьте статус монитора в личном кабинете — через 1-2 минуты статус должен измениться с "New" на "Up".
Управление мониторингом
Остановка мониторинга:
/userdata/init.d/S97tuna-heartbeat stop
Запуск мониторинга:
/userdata/init.d/S97tuna-heartbeat start
Полное отключение автозапуска:
mv /userdata/init.d/S97tuna-heartbeat /userdata/init.d/disabled-tuna-heartbeat
Включить обратно:
mv /userdata/init.d/disabled-tuna-heartbeat /userdata/init.d/S97tuna-heartbeat
Восстановление после OTA-обновления
Скрипт и бинарник хранятся в /userdata/, который сохраняется при OTA-обновлениях. После обновления прошивки мониторинг продолжит работать без дополнительных действий.
При полной перепрошивке (когда /userdata был очищен) потребуется заново установить бинарник и создать init-скрипт.
Диагностика неполадок
Процесс heartbeat не запускается
Проверьте, что процесс присутствует в списке:
ps | grep heartbeat
Если процесса нет — проверьте, что скрипт существует и исполняем:
ls -la /userdata/init.d/S97*heartbeat*
Запустите скрипт вручную для диагностики:
/userdata/init.d/S97tuna-heartbeat start
Монитор показывает "Down"
Причины:
- Неверный MONITOR_ID
- Отсутствует интернет-соединение
- Интервал в скрипте не соответствует настройкам монитора
Проверка:
# Проверить наличие IP-адреса
ip addr
# Проверить маршрут по умолчанию
ip route
# Проверить доступ в интернет
ping -c 3 8.8.8.8
После обновления прошивки heartbeat перестал работать
Проверьте, что скрипт на месте:
ls -la /userdata/init.d/S97*heartbeat*
Если скрипт отсутствует — он мог быть удалён при полной перепрошивке. Пересоздайте его по инструкции выше.