# Мониторинг доступности JetKVM

[JetKVM](https://jetkvm.com/) — это компактное IP-KVM устройство на базе Rockchip RV1106 (ARM Cortex-A7).

Для embedded устройств, таких как JetKVM, критически важно отслеживать их работоспособность. Heartbeat-мониторинг позволяет получать уведомления, если устройство потеряло связь с интернетом или перестало отвечать.

к сведению

Эта инструкция объясняет, как настроить мониторинг доступности JetKVM. Если вам также нужен удалённый доступ к устройству через интернет, см. [инструкцию по настройке туннелей](https://tuna.am/docs/tunnels/examples/jetkvm.md).

***

## Подготовка

### Что потребуется

* JetKVM с системной версией **v0.2.7 или новее**
* **Developer Mode** включен и SSH-доступ настроен (см. [инструкцию по туннелям](https://tuna.am/docs/tunnels/examples/jetkvm.md#%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE-ssh))
* Аккаунт на [tuna.am](https://my.tuna.am/)

### Установка tuna на JetKVM (опционально)

Heartbeat уведомления можно отправлять и при помощи wget, установка tuna cli не обязательна, но если вы также используете туннели для удалённого доступа, то логично будет использовать этот же клиент и для Heartbeat уведомлений.

Подключитесь к JetKVM по SSH:

```bash
ssh root@<IP-адрес-JetKVM>

```

Установите tuna с помощью скрипта, указав `/userdata/tuna` в качестве директории установки:

```bash
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 монитора

1. Перейдите в [личный кабинет → Мониторы](https://my.tuna.am/monitors)

2. Нажмите "Создать монитор"

3. Выберите тип **Heartbeat**

4. Задайте параметры:

   * **Описание**: JetKVM availability
   * **Интервал**: 5 минут (на бесплатном тарифе минимальный 30 минут)
   * **Grace Period**: 1 минута (время ожидания перед алертом)

5. Настройте каналы уведомлений

6. Сохраните монитор и скопируйте **MONITOR_ID**

Подробнее о Heartbeat мониторах: [Документация Heartbeat](https://tuna.am/docs/monitors/types/heartbeat.md)

***

## Создание init-скрипта мониторинга

Рекомендуется tuna CLI

Начиная с версии **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 (рекомендуется)**

```bash
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

```

**wget**

```bash
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`      | Интервал между сигналами в секундах (должен соответствовать настройке монитора) |

Формат init-скрипта

Скрипт использует тот же формат, что и скрипты для туннелей: `#!/bin/sh`, обработка аргументов `start`/`stop`, фоновый запуск. Подробнее о требованиях к init-скриптам см. [инструкцию по туннелям](https://tuna.am/docs/tunnels/examples/jetkvm.md#%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D0%B0%D0%B2%D1%82%D0%BE%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0-jetkvm).

***

## Проверка работы

Запустите скрипт вручную:

```bash
/userdata/init.d/S97tuna-heartbeat start

```

Убедитесь, что процесс запущен:

```bash
ps | grep heartbeat

```

Проверьте статус монитора в [личном кабинете](https://my.tuna.am/monitors) — через 1-2 минуты статус должен измениться с "New" на "Up".

***

## Управление мониторингом

**Остановка мониторинга:**

```bash
/userdata/init.d/S97tuna-heartbeat stop

```

**Запуск мониторинга:**

```bash
/userdata/init.d/S97tuna-heartbeat start

```

**Полное отключение автозапуска:**

```bash
mv /userdata/init.d/S97tuna-heartbeat /userdata/init.d/disabled-tuna-heartbeat

```

**Включить обратно:**

```bash
mv /userdata/init.d/disabled-tuna-heartbeat /userdata/init.d/S97tuna-heartbeat

```

***

## Восстановление после OTA-обновления

Скрипт и бинарник хранятся в `/userdata/`, который сохраняется при OTA-обновлениях. После обновления прошивки мониторинг продолжит работать без дополнительных действий.

При полной перепрошивке (когда `/userdata` был очищен) потребуется заново установить бинарник и создать init-скрипт.

***

## Диагностика неполадок

### Процесс heartbeat не запускается

Проверьте, что процесс присутствует в списке:

```bash
ps | grep heartbeat

```

Если процесса нет — проверьте, что скрипт существует и исполняем:

```bash
ls -la /userdata/init.d/S97*heartbeat*

```

Запустите скрипт вручную для диагностики:

```bash
/userdata/init.d/S97tuna-heartbeat start

```

### Монитор показывает "Down"

**Причины:**

* Неверный MONITOR_ID
* Отсутствует интернет-соединение
* Интервал в скрипте не соответствует настройкам монитора

**Проверка:**

```bash
# Проверить наличие IP-адреса
ip addr

# Проверить маршрут по умолчанию
ip route

# Проверить доступ в интернет
ping -c 3 8.8.8.8

```

### После обновления прошивки heartbeat перестал работать

Проверьте, что скрипт на месте:

```bash
ls -la /userdata/init.d/S97*heartbeat*

```

Если скрипт отсутствует — он мог быть удалён при полной перепрошивке. Пересоздайте его по инструкции выше.
