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

[NanoKVM](https://wiki.sipeed.com/hardware/en/kvm/NanoKVM/introduction.html) — это компактное IP-KVM устройство от Sipeed на базе RISC-V (Cube/PCIe) или ARM64 (Pro) или ARMv7 (GxxKVM/JxxKVM).

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

к сведению

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

***

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

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

* NanoKVM, подключённый к локальной сети и доступный по SSH или терминал в веб интерфейсе
* Аккаунт на [tuna.am](https://my.tuna.am/)

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

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

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

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

```

Или откройте терминал в веб интерфейсе:

![NanoKVM terminal](/docs/img/tunnels/guides/terminal.png)

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

**curl**

```bash
mkdir -p /data/tuna
INSTALL_DIR=/data/tuna sh -c "$(curl -sSLf https://releases.tuna.am/tuna/get.sh)"

```

**wget**

```bash
mkdir -p /data/tuna
INSTALL_DIR=/data/tuna sh -c "$(wget -qO- https://releases.tuna.am/tuna/get.sh)"

```

подсказка

Раздел `/data` смонтирован как exFAT с `fmask=0022`, файлы автоматически получают права `0755` — бинарник можно запускать сразу после копирования. Кроме того, `/data` сохраняется при обновлениях, поэтому tuna не придётся переустанавливать.

***

## Создание Heartbeat монитора

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

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

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

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

   <!-- -->

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

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

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

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

***

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

Создайте скрипт `/data/tuna/tuna-heartbeat.sh`:

```bash
cat << 'EOF' > /data/tuna/tuna-heartbeat.sh
#!/bin/sh

# Ждём сеть
while ! ip route | grep -q default; do
    sleep 1
done

# Бесконечный цикл отправки heartbeat
while true; do
    /data/tuna/tuna monitor ping --host=nanokvm YOUR_MONITOR_ID
    # Интервал между пингами (30 минут = 1800 секунд)
    sleep 1800
done
EOF
chmod +x /data/tuna/tuna-heartbeat.sh

```

Если используете curl то вместо строки:

`/data/tuna/tuna monitor ping --host=nanokvm YOUR_MONITOR_ID`

укажите вызов curl и ссылку из личного кабинета:

`curl -sSLf -m 5 https://monitor.tuna.am/YOUR_MONITOR_ID/nanokvm`

Важно

Замените `YOUR_MONITOR_ID` на реальный ID монитора из личного кабинета.

**Пояснение параметров:**

| Параметр          | Описание                                                                        |
| ----------------- | ------------------------------------------------------------------------------- |
| `YOUR_MONITOR_ID` | ID монитора из личного кабинета (обязательно)                                   |
| `--host=nanokvm`  | Идентификатор устройства в логах мониторинга (опционально)                      |
| `sleep 300`       | Интервал между сигналами в секундах (должен соответствовать настройке монитора) |

***

## Настройка автозапуска

Добавьте строку в `/etc/inittab` для автоматического запуска и перезапуска мониторинга:

```bash
cat << 'EOF' >> /etc/inittab

# Tuna Heartbeat monitor (respawn = auto-restart)
thb::respawn:/data/tuna/tuna-heartbeat.sh
EOF

```

Применить без перезагрузки:

```bash
kill -HUP 1

```

***

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

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

```bash
ps -ef | grep heartbeat

```

В выводе должна быть строка с `/data/tuna/tuna-heartbeat.sh`. Если процесса нет — проверьте `/etc/inittab`:

```bash
grep heartbeat /etc/inittab

```

Строка должна начинаться с `thb::respawn`, а не с `#`.

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

***

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

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

```bash
sed -i 's/^thb:/#thb:/' /etc/inittab && kill -HUP 1

```

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

```bash
sed -i 's/^#thb:/thb:/' /etc/inittab && kill -HUP 1

```

***

## Восстановление после перепрошивки

Бинарник и скрипты в `/data/tuna/` сохраняются при обновлении приложения через веб-интерфейс и при remote rsync. После полной перепрошивки (Etcher) потребуется заново скопировать бинарник и создать скрипты.

При remote rsync нужно восстановить только строки в `/etc/inittab`:

```bash
cat << 'EOF' >> /etc/inittab

# Tuna Heartbeat monitor (respawn = auto-restart)
thb::respawn:/data/tuna/tuna-heartbeat.sh
EOF
kill -HUP 1

```

***

## Почему не cron?

В NanoKVM существует [известная проблема с cron](https://github.com/sipeed/NanoKVM/issues/211):

* Crontabs не существуют по умолчанию
* Созданные crontabs не переживают перезагрузку
* Нет системного `/etc/crontab`

Поэтому для периодических задач на NanoKVM рекомендуется использовать `inittab` с бесконечным циклом — этот подход надёжен и соответствует архитектуре системы.

Альтернатива для других систем

На обычных Linux-системах (Debian, Ubuntu) для heartbeat мониторинга предпочтительнее использовать cron или systemd timers. См. [примеры в документации Heartbeat](https://tuna.am/docs/monitors/types/heartbeat.md).

***

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

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

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

```bash
ps -ef | grep heartbeat

```

Если в выводе нет строк с `/data/tuna/tuna-heartbeat.sh` — убедитесь, что запись в `/etc/inittab` не закомментирована:

```bash
grep heartbeat /etc/inittab

```

Строка должна начинаться с `thb::respawn`, а не с `#`. Если она закомментирована — раскомментируйте и перечитайте конфигурацию:

```bash
kill -HUP 1

```

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

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

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

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

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

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

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

```

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

Проверьте, не обновлялась ли прошивка — после remote rsync нужно восстановить записи в `/etc/inittab` (см. [Восстановление после перепрошивки](#%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8))

***
