2026-09-27 13:22:28 +00:00
2026-09-27 13:22:28 +00:00

RustDesk Server OSS + Zabbix 7.4 Monitoring

Пошаговая установка мониторинга RustDesk Server OSS для Zabbix 7.4.

Что мониторируется

  • количество зарегистрированных RustDesk ID;
  • IP зарегистрированных RustDesk ID;
  • автоматическое обнаружение RustDesk ID через LLD;
  • количество TCP-соединений hbbr;
  • количество активных relay-сессий;
  • IP активных relay-клиентов.

1. Требования

Необходимо:

  • Linux Server;
  • Docker;
  • RustDesk Server OSS;
  • Zabbix Agent 2;
  • Zabbix Server 7.4.x;
  • sudo;
  • nsenter;
  • ss;
  • jq.

Проверить:

command -v docker
command -v sudo
command -v nsenter
command -v ss
command -v jq

Если какой-либо команды нет, установите её через пакетный менеджер вашей ОС.


2. Проверка RustDesk Server

Предполагается, что RustDesk Server работает в Docker и содержит два контейнера:

hbbs
hbbr

Проверить:

docker ps

Должно быть примерно:

CONTAINER ID   IMAGE                              NAMES
xxxxxxxx       rustdesk/rustdesk-server:latest   hbbs
xxxxxxxx       rustdesk/rustdesk-server:latest   hbbr

Проверить порт hbbr:

docker port hbbr

Ожидается:

21117/tcp -> 0.0.0.0:21117
21117/tcp -> [::]:21117

3. Проверка hbbr

Получить PID контейнера:

docker inspect -f '{{.State.Pid}}' hbbr

Например:

744150

Проверить активные TCP-соединения внутри network namespace hbbr:

nsenter \
  -t "$(docker inspect -f '{{.State.Pid}}' hbbr)" \
  -n \
  ss -H -tn state established '( sport = :21117 )'

Если активных relay-сессий нет, команда может ничего не вывести.

При наличии одной relay-сессии будет примерно:

0 0 172.27.0.3:21117 91.221.35.119:2624
0 0 172.27.0.3:21117 194.58.38.147:63060

4. Скачивание проекта

Клонируйте репозиторий:

git clone https://github.com/YOUR_USER/rustdesk-zabbix.git

Перейдите в каталог:

cd rustdesk-zabbix

Структура проекта:

rustdesk-zabbix/
├── README.md
├── rustdesk-monitor.sh
├── rustdesk-monitor-root
├── zabbix/
│   ├── rustdesk.conf
│   └── rustdesk-template.yaml
└── sudoers/
    └── zabbix-rustdesk

5. Установка основного скрипта

Скопируйте основной скрипт:

sudo cp rustdesk-monitor.sh /usr/local/bin/rustdesk-monitor.sh

Установите владельца:

sudo chown root:root /usr/local/bin/rustdesk-monitor.sh

Установите права:

sudo chmod 755 /usr/local/bin/rustdesk-monitor.sh

Проверьте:

ls -l /usr/local/bin/rustdesk-monitor.sh

Ожидается:

-rwxr-xr-x root root ... /usr/local/bin/rustdesk-monitor.sh

6. Проверка основного скрипта

Проверьте количество зарегистрированных RustDesk ID:

/usr/local/bin/rustdesk-monitor.sh peers

Например:

10

Проверьте IP конкретного RustDesk ID:

/usr/local/bin/rustdesk-monitor.sh peer_ip 473224838

Например:

194.58.38.147

7. Проверка Low-Level Discovery

Выполните:

/usr/local/bin/rustdesk-monitor.sh discovery

Должен вернуться JSON-массив:

[
  {
    "{#RD_ID}": "335008209",
    "{#RD_IP}": "95.64.175.202"
  },
  {
    "{#RD_ID}": "262961257",
    "{#RD_IP}": "89.175.70.58"
  }
]

Проверить JSON через jq:

/usr/local/bin/rustdesk-monitor.sh discovery | jq empty

Проверить код возврата:

echo $?

Должно быть:

0

8. Установка root helper

Для мониторинга активных соединений hbbr нужен доступ к network namespace контейнера.

Пользователь zabbix не имеет права самостоятельно выполнять nsenter.

Поэтому используется отдельный helper:

/usr/local/sbin/rustdesk-monitor-root

Установите его:

sudo cp rustdesk-monitor-root /usr/local/sbin/rustdesk-monitor-root

Установите владельца:

sudo chown root:root /usr/local/sbin/rustdesk-monitor-root

Установите права:

sudo chmod 755 /usr/local/sbin/rustdesk-monitor-root

Проверьте:

ls -l /usr/local/sbin/rustdesk-monitor-root

Должно быть:

-rwxr-xr-x root root ... /usr/local/sbin/rustdesk-monitor-root

9. Проверка root helper

Connections

sudo /usr/local/sbin/rustdesk-monitor-root connections

При одной активной relay-сессии:

2

Sessions

sudo /usr/local/sbin/rustdesk-monitor-root sessions

Результат:

1

Active relay IPs

sudo /usr/local/sbin/rustdesk-monitor-root relay_ips

Например:

194.58.38.147
91.221.35.119

10. Настройка sudo для пользователя zabbix

Создайте файл:

sudo nano /etc/sudoers.d/zabbix-rustdesk

Добавьте:

zabbix ALL=(root) NOPASSWD: /usr/local/sbin/rustdesk-monitor-root connections
zabbix ALL=(root) NOPASSWD: /usr/local/sbin/rustdesk-monitor-root sessions
zabbix ALL=(root) NOPASSWD: /usr/local/sbin/rustdesk-monitor-root relay_ips

Сохраните файл.

Установите права:

sudo chmod 440 /etc/sudoers.d/zabbix-rustdesk

Проверьте конфигурацию sudo:

sudo visudo -c

Должно быть:

/etc/sudoers: parsed OK
/etc/sudoers.d/zabbix-rustdesk: parsed OK

11. Проверка helper от имени zabbix

Теперь обязательно проверьте выполнение именно от пользователя zabbix.

Connections

sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root connections

Ожидается:

2

Sessions

sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root sessions

Ожидается:

1

Relay IPs

sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root relay_ips

Например:

194.58.38.147
91.221.35.119

Если эти три команды работают — права настроены правильно.


12. Установка конфигурации Zabbix Agent 2

Скопируйте:

sudo cp zabbix/rustdesk.conf \
  /etc/zabbix/zabbix_agent2.d/rustdesk.conf

Проверьте:

cat /etc/zabbix/zabbix_agent2.d/rustdesk.conf

Конфигурация должна выглядеть так:

UserParameter=rustdesk.peers,/usr/local/bin/rustdesk-monitor.sh peers
UserParameter=rustdesk.peer.ip[*],/usr/local/bin/rustdesk-monitor.sh peer_ip "$1"
UserParameter=rustdesk.discovery,/usr/local/bin/rustdesk-monitor.sh discovery

UserParameter=rustdesk.relay.connections,sudo /usr/local/sbin/rustdesk-monitor-root connections
UserParameter=rustdesk.relay.sessions,sudo /usr/local/sbin/rustdesk-monitor-root sessions
UserParameter=rustdesk.relay.ips,sudo /usr/local/sbin/rustdesk-monitor-root relay_ips

UserParameter=rustdesk.json,/usr/local/bin/rustdesk-monitor.sh json

13. Перезапуск Zabbix Agent 2

Выполните:

sudo systemctl restart zabbix-agent2

Проверьте:

sudo systemctl status zabbix-agent2 --no-pager

Сервис должен иметь статус:

active (running)

14. Проверка Zabbix Agent 2

Registered peers

zabbix_agent2 -t rustdesk.peers

Пример:

rustdesk.peers [s|10]

Peer IP

Проверить конкретный ID:

zabbix_agent2 -t 'rustdesk.peer.ip[473224838]'

Пример:

rustdesk.peer.ip[473224838] [s|194.58.38.147]

Discovery

zabbix_agent2 -t rustdesk.discovery

Ожидается JSON:

rustdesk.discovery [s|[
  {
    "{#RD_ID}": "335008209",
    "{#RD_IP}": "95.64.175.202"
  }
]]

Relay connections

zabbix_agent2 -t rustdesk.relay.connections

Пример:

rustdesk.relay.connections [s|2]

Relay sessions

zabbix_agent2 -t rustdesk.relay.sessions

Пример:

rustdesk.relay.sessions [s|1]

Relay IPs

zabbix_agent2 -t rustdesk.relay.ips

Пример:

rustdesk.relay.ips [s|194.58.38.147
91.221.35.119]

15. Установка Zabbix Template

В репозитории должен находиться файл:

zabbix/rustdesk-template.yaml

Откройте Zabbix:

Data collection
→ Templates
→ Import

Выберите:

rustdesk-template.yaml

Нажмите:

Import

После успешного импорта откройте:

Data collection
→ Templates

Найдите:

RustDesk Server OSS

16. Привязка Template к Host

Откройте:

Data collection
→ Hosts

Выберите сервер RustDesk.

Перейдите:

Templates
→ Link new templates

Выберите:

RustDesk Server OSS

Нажмите:

Update

17. Проверка Items

После привязки Template откройте:

Data collection
→ Hosts
→ RustDesk host
→ Items

Должны появиться основные items.

Registered peers

Name:
RustDesk registered peers

Key:
rustdesk.peers

Type:
Zabbix agent

Type of information:
Numeric (unsigned)

Relay connections

Name:
RustDesk relay connections

Key:
rustdesk.relay.connections

Type:
Zabbix agent

Type of information:
Numeric (unsigned)

Relay sessions

Name:
RustDesk active relay sessions

Key:
rustdesk.relay.sessions

Type:
Zabbix agent

Type of information:
Numeric (unsigned)

Active relay IPs

Name:
RustDesk active relay IPs

Key:
rustdesk.relay.ips

Type:
Zabbix agent

Type of information:
Text

18. Проверка Latest data

Откройте:

Monitoring
→ Hosts
→ RustDesk host
→ Latest data

Найдите:

RustDesk registered peers

Например:

10

Найдите:

RustDesk relay connections

Например:

2

Найдите:

RustDesk active relay sessions

Например:

1

Найдите:

RustDesk active relay IPs

Например:

194.58.38.147
91.221.35.119

19. Настройка Low-Level Discovery

Откройте:

Data collection
→ Hosts
→ RustDesk host
→ Discovery

Должно присутствовать правило:

RustDesk peer discovery

Key:

rustdesk.discovery

Update interval:

5m

20. Проверка Discovery

Откройте:

Discovery
→ RustDesk peer discovery

Проверьте:

Discovered entities

Для каждого найденного RustDesk ID должны появиться соответствующие entities.

Например:

335008209
262961257
392618968
440059160
...

21. Item Prototype для IP клиентов

Discovery использует следующие макросы:

{#RD_ID}
{#RD_IP}

Item Prototype:

Name:
RustDesk peer {#RD_ID} IP

Key:
rustdesk.peer.ip[{#RD_ID}]

Type:
Zabbix agent

Type of information:
Text

После работы Discovery Zabbix автоматически создаст items:

RustDesk peer 335008209 IP
RustDesk peer 262961257 IP
RustDesk peer 392618968 IP
...

22. Создание Dashboard

Откройте:

Dashboards

Создайте новый Dashboard:

Create dashboard

Например:

RustDesk Monitoring

23. Dashboard — Active Sessions

Добавьте Widget:

Add widget
→ Item value

Настройте:

Name:
Active relay sessions

Host:
RustDesk host

Item:
RustDesk active relay sessions

Refresh interval:
30s

На Dashboard будет отображаться:

Active relay sessions

1

24. Dashboard — Relay Connections

Добавьте второй Widget:

Add widget
→ Item value

Настройте:

Name:
Relay connections

Host:
RustDesk host

Item:
RustDesk relay connections

Refresh interval:
30s

Например:

Relay connections

2

25. Dashboard — Active Relay IPs

Добавьте:

Add widget
→ Item history

Настройте:

Name:
Active relay IPs

Host:
RustDesk host

Item:
RustDesk active relay IPs

Refresh interval:
30s

Show lines:
10

На Dashboard будет:

Active relay IPs

194.58.38.147
91.221.35.119

26. Как работает подсчёт relay sessions

hbbr слушает:

TCP/21117

Одна relay-сессия обычно создаёт два TCP-соединения.

Например:

172.27.0.3:21117 → 91.221.35.119:2624
172.27.0.3:21117 → 194.58.38.147:63060

Получаем:

connections = 2
sessions = 1

Поэтому скрипт рассчитывает:

sessions = connections / 2

27. Active Relay IPs

Команда:

/usr/local/sbin/rustdesk-monitor-root relay_ips

получает активные соединения:

ss -H -tn state established

в network namespace контейнера hbbr.

Из remote endpoint извлекается IP.

Например:

91.221.35.119:2624
194.58.38.147:63060

Преобразуется в:

91.221.35.119
194.58.38.147

Затем выполняется сортировка и удаление дубликатов.


28. Ограничение NAT

Active relay IP нельзя всегда сопоставить с конкретным RustDesk ID.

Например:

194.58.38.147
├── RustDesk ID 473224838
├── RustDesk ID 440059160
└── RustDesk ID 317773715

Все три устройства могут находиться за одним NAT.

Поэтому:

rustdesk.relay.ips

показывает только:

уникальные IP активных relay-клиентов

а не:

RustDesk ID активной сессии

29. Диагностика: нет данных

Проверь Docker:

docker ps

Проверь hbbr:

docker inspect -f '{{.State.Pid}}' hbbr

Проверь relay:

docker logs --tail 100 hbbr

Проверь connections:

sudo /usr/local/sbin/rustdesk-monitor-root connections

Проверь sessions:

sudo /usr/local/sbin/rustdesk-monitor-root sessions

Проверь IP:

sudo /usr/local/sbin/rustdesk-monitor-root relay_ips

30. Диагностика: Operation not permitted

Если:

nsenter: reassociate to namespaces failed: Operation not permitted

проверь:

sudo -u zabbix sudo \
  /usr/local/sbin/rustdesk-monitor-root connections

Если команда возвращает число:

2

значит права настроены правильно.

Проверь sudo:

sudo visudo -c

Проверь:

cat /etc/sudoers.d/zabbix-rustdesk

31. Диагностика: Numeric unsigned

Если Zabbix показывает:

Value of type "string" is not suitable for value type "Numeric (unsigned)"

проверь:

zabbix_agent2 -t rustdesk.relay.connections

Правильный результат:

rustdesk.relay.connections [s|2]

Неправильный результат:

rustdesk.relay.connections [s|nsenter: reassociate to namespaces failed: Operation not permitted
0]

В этом случае проверь выполнение:

sudo -u zabbix sudo \
  /usr/local/sbin/rustdesk-monitor-root connections

32. Диагностика: Item Unsupported

Если item имеет статус:

Unsupported

проверь Agent:

sudo systemctl status zabbix-agent2 --no-pager

Проверь конфигурацию:

cat /etc/zabbix/zabbix_agent2.d/rustdesk.conf

После изменения:

sudo systemctl restart zabbix-agent2

Затем:

zabbix_agent2 -t rustdesk.relay.connections

33. Полная проверка после установки

Выполните:

echo "===== DOCKER ====="

docker ps

echo
echo "===== PEERS ====="

/usr/local/bin/rustdesk-monitor.sh peers

echo
echo "===== DISCOVERY ====="

/usr/local/bin/rustdesk-monitor.sh discovery | jq .

echo
echo "===== RELAY CONNECTIONS ====="

/usr/local/sbin/rustdesk-monitor-root connections

echo
echo "===== RELAY SESSIONS ====="

/usr/local/sbin/rustdesk-monitor-root sessions

echo
echo "===== RELAY IPs ====="

/usr/local/sbin/rustdesk-monitor-root relay_ips

echo
echo "===== ZABBIX AGENT ====="

zabbix_agent2 -t rustdesk.peers

zabbix_agent2 -t rustdesk.discovery

zabbix_agent2 -t rustdesk.relay.connections

zabbix_agent2 -t rustdesk.relay.sessions

zabbix_agent2 -t rustdesk.relay.ips

34. Ожидаемый результат

Пример:

===== DOCKER =====

hbbs
hbbr

===== PEERS =====

10

===== DISCOVERY =====

[
  {
    "{#RD_ID}": "335008209",
    "{#RD_IP}": "95.64.175.202"
  },
  ...
]

===== RELAY CONNECTIONS =====

2

===== RELAY SESSIONS =====

1

===== RELAY IPs =====

194.58.38.147
91.221.35.119

===== ZABBIX AGENT =====

rustdesk.peers [s|10]

rustdesk.discovery [s|[
  ...
]]

rustdesk.relay.connections [s|2]

rustdesk.relay.sessions [s|1]

rustdesk.relay.ips [s|194.58.38.147
91.221.35.119]

35. Быстрая установка

Если все файлы уже находятся в репозитории, установка сводится к:

git clone https://github.com/YOUR_USER/rustdesk-zabbix.git

cd rustdesk-zabbix

sudo cp rustdesk-monitor.sh \
  /usr/local/bin/rustdesk-monitor.sh

sudo cp rustdesk-monitor-root \
  /usr/local/sbin/rustdesk-monitor-root

sudo chown root:root \
  /usr/local/bin/rustdesk-monitor.sh \
  /usr/local/sbin/rustdesk-monitor-root

sudo chmod 755 \
  /usr/local/bin/rustdesk-monitor.sh \
  /usr/local/sbin/rustdesk-monitor-root

sudo cp zabbix/rustdesk.conf \
  /etc/zabbix/zabbix_agent2.d/rustdesk.conf

sudo cp sudoers/zabbix-rustdesk \
  /etc/sudoers.d/zabbix-rustdesk

sudo chmod 440 \
  /etc/sudoers.d/zabbix-rustdesk

sudo visudo -c

sudo systemctl restart zabbix-agent2

После этого проверить:

zabbix_agent2 -t rustdesk.peers
zabbix_agent2 -t rustdesk.discovery
zabbix_agent2 -t rustdesk.relay.connections
zabbix_agent2 -t rustdesk.relay.sessions
zabbix_agent2 -t rustdesk.relay.ips

Затем импортировать:

zabbix/rustdesk-template.yaml

в Zabbix и привязать Template к RustDesk host.


36. Итог

После установки Zabbix получает:

rustdesk.peers
        │
        └── количество зарегистрированных ID

rustdesk.peer.ip[ID]
        │
        └── IP конкретного зарегистрированного ID

rustdesk.discovery
        │
        └── автоматическое обнаружение ID

rustdesk.relay.connections
        │
        └── TCP connections hbbr

rustdesk.relay.sessions
        │
        └── активные relay sessions

rustdesk.relay.ips
        │
        └── IP активных relay-клиентов

rustdesk.json
        │
        └── общая информация

Готовый Dashboard:

┌─────────────────────────────────────┐
│       ACTIVE RELAY SESSIONS         │
│                  1                  │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│        RELAY CONNECTIONS            │
│                  2                  │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│         ACTIVE RELAY IPs            │
│                                     │
│  194.58.38.147                      │
│  91.221.35.119                      │
└─────────────────────────────────────┘

License

Используйте проект в соответствии с лицензией, размещённой в репозитории.

RustDesk является отдельным проектом. Данный проект мониторинга не является официальным компонентом RustDesk.

S
Description
No description provided
Readme
49 KiB
0 Stars 1 Watchers 0 Forks
Languages
Shell 100%