1489 lines
22 KiB
Markdown
1489 lines
22 KiB
Markdown
# 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`.
|
||
|
||
Проверить:
|
||
|
||
```bash
|
||
command -v docker
|
||
command -v sudo
|
||
command -v nsenter
|
||
command -v ss
|
||
command -v jq
|
||
```
|
||
|
||
Если какой-либо команды нет, установите её через пакетный менеджер вашей ОС.
|
||
|
||
---
|
||
|
||
# 2. Проверка RustDesk Server
|
||
|
||
Предполагается, что RustDesk Server работает в Docker и содержит два контейнера:
|
||
|
||
```text
|
||
hbbs
|
||
hbbr
|
||
```
|
||
|
||
Проверить:
|
||
|
||
```bash
|
||
docker ps
|
||
```
|
||
|
||
Должно быть примерно:
|
||
|
||
```text
|
||
CONTAINER ID IMAGE NAMES
|
||
xxxxxxxx rustdesk/rustdesk-server:latest hbbs
|
||
xxxxxxxx rustdesk/rustdesk-server:latest hbbr
|
||
```
|
||
|
||
Проверить порт `hbbr`:
|
||
|
||
```bash
|
||
docker port hbbr
|
||
```
|
||
|
||
Ожидается:
|
||
|
||
```text
|
||
21117/tcp -> 0.0.0.0:21117
|
||
21117/tcp -> [::]:21117
|
||
```
|
||
|
||
---
|
||
|
||
# 3. Проверка hbbr
|
||
|
||
Получить PID контейнера:
|
||
|
||
```bash
|
||
docker inspect -f '{{.State.Pid}}' hbbr
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
744150
|
||
```
|
||
|
||
Проверить активные TCP-соединения внутри network namespace `hbbr`:
|
||
|
||
```bash
|
||
nsenter \
|
||
-t "$(docker inspect -f '{{.State.Pid}}' hbbr)" \
|
||
-n \
|
||
ss -H -tn state established '( sport = :21117 )'
|
||
```
|
||
|
||
Если активных relay-сессий нет, команда может ничего не вывести.
|
||
|
||
При наличии одной relay-сессии будет примерно:
|
||
|
||
```text
|
||
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. Скачивание проекта
|
||
|
||
Клонируйте репозиторий:
|
||
|
||
```bash
|
||
git clone https://github.com/YOUR_USER/rustdesk-zabbix.git
|
||
```
|
||
|
||
Перейдите в каталог:
|
||
|
||
```bash
|
||
cd rustdesk-zabbix
|
||
```
|
||
|
||
Структура проекта:
|
||
|
||
```text
|
||
rustdesk-zabbix/
|
||
├── README.md
|
||
├── rustdesk-monitor.sh
|
||
├── rustdesk-monitor-root
|
||
├── zabbix/
|
||
│ ├── rustdesk.conf
|
||
│ └── rustdesk-template.yaml
|
||
└── sudoers/
|
||
└── zabbix-rustdesk
|
||
```
|
||
|
||
---
|
||
|
||
# 5. Установка основного скрипта
|
||
|
||
Скопируйте основной скрипт:
|
||
|
||
```bash
|
||
sudo cp rustdesk-monitor.sh /usr/local/bin/rustdesk-monitor.sh
|
||
```
|
||
|
||
Установите владельца:
|
||
|
||
```bash
|
||
sudo chown root:root /usr/local/bin/rustdesk-monitor.sh
|
||
```
|
||
|
||
Установите права:
|
||
|
||
```bash
|
||
sudo chmod 755 /usr/local/bin/rustdesk-monitor.sh
|
||
```
|
||
|
||
Проверьте:
|
||
|
||
```bash
|
||
ls -l /usr/local/bin/rustdesk-monitor.sh
|
||
```
|
||
|
||
Ожидается:
|
||
|
||
```text
|
||
-rwxr-xr-x root root ... /usr/local/bin/rustdesk-monitor.sh
|
||
```
|
||
|
||
---
|
||
|
||
# 6. Проверка основного скрипта
|
||
|
||
Проверьте количество зарегистрированных RustDesk ID:
|
||
|
||
```bash
|
||
/usr/local/bin/rustdesk-monitor.sh peers
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
10
|
||
```
|
||
|
||
Проверьте IP конкретного RustDesk ID:
|
||
|
||
```bash
|
||
/usr/local/bin/rustdesk-monitor.sh peer_ip 473224838
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
194.58.38.147
|
||
```
|
||
|
||
---
|
||
|
||
# 7. Проверка Low-Level Discovery
|
||
|
||
Выполните:
|
||
|
||
```bash
|
||
/usr/local/bin/rustdesk-monitor.sh discovery
|
||
```
|
||
|
||
Должен вернуться JSON-массив:
|
||
|
||
```json
|
||
[
|
||
{
|
||
"{#RD_ID}": "335008209",
|
||
"{#RD_IP}": "95.64.175.202"
|
||
},
|
||
{
|
||
"{#RD_ID}": "262961257",
|
||
"{#RD_IP}": "89.175.70.58"
|
||
}
|
||
]
|
||
```
|
||
|
||
Проверить JSON через `jq`:
|
||
|
||
```bash
|
||
/usr/local/bin/rustdesk-monitor.sh discovery | jq empty
|
||
```
|
||
|
||
Проверить код возврата:
|
||
|
||
```bash
|
||
echo $?
|
||
```
|
||
|
||
Должно быть:
|
||
|
||
```text
|
||
0
|
||
```
|
||
|
||
---
|
||
|
||
# 8. Установка root helper
|
||
|
||
Для мониторинга активных соединений `hbbr` нужен доступ к network namespace контейнера.
|
||
|
||
Пользователь `zabbix` не имеет права самостоятельно выполнять `nsenter`.
|
||
|
||
Поэтому используется отдельный helper:
|
||
|
||
```text
|
||
/usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
Установите его:
|
||
|
||
```bash
|
||
sudo cp rustdesk-monitor-root /usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
Установите владельца:
|
||
|
||
```bash
|
||
sudo chown root:root /usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
Установите права:
|
||
|
||
```bash
|
||
sudo chmod 755 /usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
Проверьте:
|
||
|
||
```bash
|
||
ls -l /usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
Должно быть:
|
||
|
||
```text
|
||
-rwxr-xr-x root root ... /usr/local/sbin/rustdesk-monitor-root
|
||
```
|
||
|
||
---
|
||
|
||
# 9. Проверка root helper
|
||
|
||
## Connections
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root connections
|
||
```
|
||
|
||
При одной активной relay-сессии:
|
||
|
||
```text
|
||
2
|
||
```
|
||
|
||
## Sessions
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root sessions
|
||
```
|
||
|
||
Результат:
|
||
|
||
```text
|
||
1
|
||
```
|
||
|
||
## Active relay IPs
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root relay_ips
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
194.58.38.147
|
||
91.221.35.119
|
||
```
|
||
|
||
---
|
||
|
||
# 10. Настройка sudo для пользователя zabbix
|
||
|
||
Создайте файл:
|
||
|
||
```bash
|
||
sudo nano /etc/sudoers.d/zabbix-rustdesk
|
||
```
|
||
|
||
Добавьте:
|
||
|
||
```sudoers
|
||
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
|
||
```
|
||
|
||
Сохраните файл.
|
||
|
||
Установите права:
|
||
|
||
```bash
|
||
sudo chmod 440 /etc/sudoers.d/zabbix-rustdesk
|
||
```
|
||
|
||
Проверьте конфигурацию sudo:
|
||
|
||
```bash
|
||
sudo visudo -c
|
||
```
|
||
|
||
Должно быть:
|
||
|
||
```text
|
||
/etc/sudoers: parsed OK
|
||
/etc/sudoers.d/zabbix-rustdesk: parsed OK
|
||
```
|
||
|
||
---
|
||
|
||
# 11. Проверка helper от имени zabbix
|
||
|
||
Теперь обязательно проверьте выполнение именно от пользователя `zabbix`.
|
||
|
||
## Connections
|
||
|
||
```bash
|
||
sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root connections
|
||
```
|
||
|
||
Ожидается:
|
||
|
||
```text
|
||
2
|
||
```
|
||
|
||
## Sessions
|
||
|
||
```bash
|
||
sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root sessions
|
||
```
|
||
|
||
Ожидается:
|
||
|
||
```text
|
||
1
|
||
```
|
||
|
||
## Relay IPs
|
||
|
||
```bash
|
||
sudo -u zabbix sudo /usr/local/sbin/rustdesk-monitor-root relay_ips
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
194.58.38.147
|
||
91.221.35.119
|
||
```
|
||
|
||
Если эти три команды работают — права настроены правильно.
|
||
|
||
---
|
||
|
||
# 12. Установка конфигурации Zabbix Agent 2
|
||
|
||
Скопируйте:
|
||
|
||
```bash
|
||
sudo cp zabbix/rustdesk.conf \
|
||
/etc/zabbix/zabbix_agent2.d/rustdesk.conf
|
||
```
|
||
|
||
Проверьте:
|
||
|
||
```bash
|
||
cat /etc/zabbix/zabbix_agent2.d/rustdesk.conf
|
||
```
|
||
|
||
Конфигурация должна выглядеть так:
|
||
|
||
```ini
|
||
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
|
||
|
||
Выполните:
|
||
|
||
```bash
|
||
sudo systemctl restart zabbix-agent2
|
||
```
|
||
|
||
Проверьте:
|
||
|
||
```bash
|
||
sudo systemctl status zabbix-agent2 --no-pager
|
||
```
|
||
|
||
Сервис должен иметь статус:
|
||
|
||
```text
|
||
active (running)
|
||
```
|
||
|
||
---
|
||
|
||
# 14. Проверка Zabbix Agent 2
|
||
|
||
## Registered peers
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.peers
|
||
```
|
||
|
||
Пример:
|
||
|
||
```text
|
||
rustdesk.peers [s|10]
|
||
```
|
||
|
||
---
|
||
|
||
## Peer IP
|
||
|
||
Проверить конкретный ID:
|
||
|
||
```bash
|
||
zabbix_agent2 -t 'rustdesk.peer.ip[473224838]'
|
||
```
|
||
|
||
Пример:
|
||
|
||
```text
|
||
rustdesk.peer.ip[473224838] [s|194.58.38.147]
|
||
```
|
||
|
||
---
|
||
|
||
## Discovery
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.discovery
|
||
```
|
||
|
||
Ожидается JSON:
|
||
|
||
```text
|
||
rustdesk.discovery [s|[
|
||
{
|
||
"{#RD_ID}": "335008209",
|
||
"{#RD_IP}": "95.64.175.202"
|
||
}
|
||
]]
|
||
```
|
||
|
||
---
|
||
|
||
## Relay connections
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.relay.connections
|
||
```
|
||
|
||
Пример:
|
||
|
||
```text
|
||
rustdesk.relay.connections [s|2]
|
||
```
|
||
|
||
---
|
||
|
||
## Relay sessions
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.relay.sessions
|
||
```
|
||
|
||
Пример:
|
||
|
||
```text
|
||
rustdesk.relay.sessions [s|1]
|
||
```
|
||
|
||
---
|
||
|
||
## Relay IPs
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.relay.ips
|
||
```
|
||
|
||
Пример:
|
||
|
||
```text
|
||
rustdesk.relay.ips [s|194.58.38.147
|
||
91.221.35.119]
|
||
```
|
||
|
||
---
|
||
|
||
# 15. Установка Zabbix Template
|
||
|
||
В репозитории должен находиться файл:
|
||
|
||
```text
|
||
zabbix/rustdesk-template.yaml
|
||
```
|
||
|
||
Откройте Zabbix:
|
||
|
||
```text
|
||
Data collection
|
||
→ Templates
|
||
→ Import
|
||
```
|
||
|
||
Выберите:
|
||
|
||
```text
|
||
rustdesk-template.yaml
|
||
```
|
||
|
||
Нажмите:
|
||
|
||
```text
|
||
Import
|
||
```
|
||
|
||
После успешного импорта откройте:
|
||
|
||
```text
|
||
Data collection
|
||
→ Templates
|
||
```
|
||
|
||
Найдите:
|
||
|
||
```text
|
||
RustDesk Server OSS
|
||
```
|
||
|
||
---
|
||
|
||
# 16. Привязка Template к Host
|
||
|
||
Откройте:
|
||
|
||
```text
|
||
Data collection
|
||
→ Hosts
|
||
```
|
||
|
||
Выберите сервер RustDesk.
|
||
|
||
Перейдите:
|
||
|
||
```text
|
||
Templates
|
||
→ Link new templates
|
||
```
|
||
|
||
Выберите:
|
||
|
||
```text
|
||
RustDesk Server OSS
|
||
```
|
||
|
||
Нажмите:
|
||
|
||
```text
|
||
Update
|
||
```
|
||
|
||
---
|
||
|
||
# 17. Проверка Items
|
||
|
||
После привязки Template откройте:
|
||
|
||
```text
|
||
Data collection
|
||
→ Hosts
|
||
→ RustDesk host
|
||
→ Items
|
||
```
|
||
|
||
Должны появиться основные items.
|
||
|
||
## Registered peers
|
||
|
||
```text
|
||
Name:
|
||
RustDesk registered peers
|
||
|
||
Key:
|
||
rustdesk.peers
|
||
|
||
Type:
|
||
Zabbix agent
|
||
|
||
Type of information:
|
||
Numeric (unsigned)
|
||
```
|
||
|
||
---
|
||
|
||
## Relay connections
|
||
|
||
```text
|
||
Name:
|
||
RustDesk relay connections
|
||
|
||
Key:
|
||
rustdesk.relay.connections
|
||
|
||
Type:
|
||
Zabbix agent
|
||
|
||
Type of information:
|
||
Numeric (unsigned)
|
||
```
|
||
|
||
---
|
||
|
||
## Relay sessions
|
||
|
||
```text
|
||
Name:
|
||
RustDesk active relay sessions
|
||
|
||
Key:
|
||
rustdesk.relay.sessions
|
||
|
||
Type:
|
||
Zabbix agent
|
||
|
||
Type of information:
|
||
Numeric (unsigned)
|
||
```
|
||
|
||
---
|
||
|
||
## Active relay IPs
|
||
|
||
```text
|
||
Name:
|
||
RustDesk active relay IPs
|
||
|
||
Key:
|
||
rustdesk.relay.ips
|
||
|
||
Type:
|
||
Zabbix agent
|
||
|
||
Type of information:
|
||
Text
|
||
```
|
||
|
||
---
|
||
|
||
# 18. Проверка Latest data
|
||
|
||
Откройте:
|
||
|
||
```text
|
||
Monitoring
|
||
→ Hosts
|
||
→ RustDesk host
|
||
→ Latest data
|
||
```
|
||
|
||
Найдите:
|
||
|
||
```text
|
||
RustDesk registered peers
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
10
|
||
```
|
||
|
||
Найдите:
|
||
|
||
```text
|
||
RustDesk relay connections
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
2
|
||
```
|
||
|
||
Найдите:
|
||
|
||
```text
|
||
RustDesk active relay sessions
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
1
|
||
```
|
||
|
||
Найдите:
|
||
|
||
```text
|
||
RustDesk active relay IPs
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
194.58.38.147
|
||
91.221.35.119
|
||
```
|
||
|
||
---
|
||
|
||
# 19. Настройка Low-Level Discovery
|
||
|
||
Откройте:
|
||
|
||
```text
|
||
Data collection
|
||
→ Hosts
|
||
→ RustDesk host
|
||
→ Discovery
|
||
```
|
||
|
||
Должно присутствовать правило:
|
||
|
||
```text
|
||
RustDesk peer discovery
|
||
```
|
||
|
||
Key:
|
||
|
||
```text
|
||
rustdesk.discovery
|
||
```
|
||
|
||
Update interval:
|
||
|
||
```text
|
||
5m
|
||
```
|
||
|
||
---
|
||
|
||
# 20. Проверка Discovery
|
||
|
||
Откройте:
|
||
|
||
```text
|
||
Discovery
|
||
→ RustDesk peer discovery
|
||
```
|
||
|
||
Проверьте:
|
||
|
||
```text
|
||
Discovered entities
|
||
```
|
||
|
||
Для каждого найденного RustDesk ID должны появиться соответствующие entities.
|
||
|
||
Например:
|
||
|
||
```text
|
||
335008209
|
||
262961257
|
||
392618968
|
||
440059160
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
# 21. Item Prototype для IP клиентов
|
||
|
||
Discovery использует следующие макросы:
|
||
|
||
```text
|
||
{#RD_ID}
|
||
{#RD_IP}
|
||
```
|
||
|
||
Item Prototype:
|
||
|
||
```text
|
||
Name:
|
||
RustDesk peer {#RD_ID} IP
|
||
|
||
Key:
|
||
rustdesk.peer.ip[{#RD_ID}]
|
||
|
||
Type:
|
||
Zabbix agent
|
||
|
||
Type of information:
|
||
Text
|
||
```
|
||
|
||
После работы Discovery Zabbix автоматически создаст items:
|
||
|
||
```text
|
||
RustDesk peer 335008209 IP
|
||
RustDesk peer 262961257 IP
|
||
RustDesk peer 392618968 IP
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
# 22. Создание Dashboard
|
||
|
||
Откройте:
|
||
|
||
```text
|
||
Dashboards
|
||
```
|
||
|
||
Создайте новый Dashboard:
|
||
|
||
```text
|
||
Create dashboard
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
RustDesk Monitoring
|
||
```
|
||
|
||
---
|
||
|
||
# 23. Dashboard — Active Sessions
|
||
|
||
Добавьте Widget:
|
||
|
||
```text
|
||
Add widget
|
||
→ Item value
|
||
```
|
||
|
||
Настройте:
|
||
|
||
```text
|
||
Name:
|
||
Active relay sessions
|
||
|
||
Host:
|
||
RustDesk host
|
||
|
||
Item:
|
||
RustDesk active relay sessions
|
||
|
||
Refresh interval:
|
||
30s
|
||
```
|
||
|
||
На Dashboard будет отображаться:
|
||
|
||
```text
|
||
Active relay sessions
|
||
|
||
1
|
||
```
|
||
|
||
---
|
||
|
||
# 24. Dashboard — Relay Connections
|
||
|
||
Добавьте второй Widget:
|
||
|
||
```text
|
||
Add widget
|
||
→ Item value
|
||
```
|
||
|
||
Настройте:
|
||
|
||
```text
|
||
Name:
|
||
Relay connections
|
||
|
||
Host:
|
||
RustDesk host
|
||
|
||
Item:
|
||
RustDesk relay connections
|
||
|
||
Refresh interval:
|
||
30s
|
||
```
|
||
|
||
Например:
|
||
|
||
```text
|
||
Relay connections
|
||
|
||
2
|
||
```
|
||
|
||
---
|
||
|
||
# 25. Dashboard — Active Relay IPs
|
||
|
||
Добавьте:
|
||
|
||
```text
|
||
Add widget
|
||
→ Item history
|
||
```
|
||
|
||
Настройте:
|
||
|
||
```text
|
||
Name:
|
||
Active relay IPs
|
||
|
||
Host:
|
||
RustDesk host
|
||
|
||
Item:
|
||
RustDesk active relay IPs
|
||
|
||
Refresh interval:
|
||
30s
|
||
|
||
Show lines:
|
||
10
|
||
```
|
||
|
||
На Dashboard будет:
|
||
|
||
```text
|
||
Active relay IPs
|
||
|
||
194.58.38.147
|
||
91.221.35.119
|
||
```
|
||
|
||
---
|
||
|
||
# 26. Как работает подсчёт relay sessions
|
||
|
||
`hbbr` слушает:
|
||
|
||
```text
|
||
TCP/21117
|
||
```
|
||
|
||
Одна relay-сессия обычно создаёт два TCP-соединения.
|
||
|
||
Например:
|
||
|
||
```text
|
||
172.27.0.3:21117 → 91.221.35.119:2624
|
||
172.27.0.3:21117 → 194.58.38.147:63060
|
||
```
|
||
|
||
Получаем:
|
||
|
||
```text
|
||
connections = 2
|
||
sessions = 1
|
||
```
|
||
|
||
Поэтому скрипт рассчитывает:
|
||
|
||
```text
|
||
sessions = connections / 2
|
||
```
|
||
|
||
---
|
||
|
||
# 27. Active Relay IPs
|
||
|
||
Команда:
|
||
|
||
```bash
|
||
/usr/local/sbin/rustdesk-monitor-root relay_ips
|
||
```
|
||
|
||
получает активные соединения:
|
||
|
||
```bash
|
||
ss -H -tn state established
|
||
```
|
||
|
||
в network namespace контейнера `hbbr`.
|
||
|
||
Из remote endpoint извлекается IP.
|
||
|
||
Например:
|
||
|
||
```text
|
||
91.221.35.119:2624
|
||
194.58.38.147:63060
|
||
```
|
||
|
||
Преобразуется в:
|
||
|
||
```text
|
||
91.221.35.119
|
||
194.58.38.147
|
||
```
|
||
|
||
Затем выполняется сортировка и удаление дубликатов.
|
||
|
||
---
|
||
|
||
# 28. Ограничение NAT
|
||
|
||
Active relay IP нельзя всегда сопоставить с конкретным RustDesk ID.
|
||
|
||
Например:
|
||
|
||
```text
|
||
194.58.38.147
|
||
├── RustDesk ID 473224838
|
||
├── RustDesk ID 440059160
|
||
└── RustDesk ID 317773715
|
||
```
|
||
|
||
Все три устройства могут находиться за одним NAT.
|
||
|
||
Поэтому:
|
||
|
||
```text
|
||
rustdesk.relay.ips
|
||
```
|
||
|
||
показывает только:
|
||
|
||
```text
|
||
уникальные IP активных relay-клиентов
|
||
```
|
||
|
||
а не:
|
||
|
||
```text
|
||
RustDesk ID активной сессии
|
||
```
|
||
|
||
---
|
||
|
||
# 29. Диагностика: нет данных
|
||
|
||
Проверь Docker:
|
||
|
||
```bash
|
||
docker ps
|
||
```
|
||
|
||
Проверь `hbbr`:
|
||
|
||
```bash
|
||
docker inspect -f '{{.State.Pid}}' hbbr
|
||
```
|
||
|
||
Проверь relay:
|
||
|
||
```bash
|
||
docker logs --tail 100 hbbr
|
||
```
|
||
|
||
Проверь connections:
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root connections
|
||
```
|
||
|
||
Проверь sessions:
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root sessions
|
||
```
|
||
|
||
Проверь IP:
|
||
|
||
```bash
|
||
sudo /usr/local/sbin/rustdesk-monitor-root relay_ips
|
||
```
|
||
|
||
---
|
||
|
||
# 30. Диагностика: Operation not permitted
|
||
|
||
Если:
|
||
|
||
```text
|
||
nsenter: reassociate to namespaces failed: Operation not permitted
|
||
```
|
||
|
||
проверь:
|
||
|
||
```bash
|
||
sudo -u zabbix sudo \
|
||
/usr/local/sbin/rustdesk-monitor-root connections
|
||
```
|
||
|
||
Если команда возвращает число:
|
||
|
||
```text
|
||
2
|
||
```
|
||
|
||
значит права настроены правильно.
|
||
|
||
Проверь sudo:
|
||
|
||
```bash
|
||
sudo visudo -c
|
||
```
|
||
|
||
Проверь:
|
||
|
||
```bash
|
||
cat /etc/sudoers.d/zabbix-rustdesk
|
||
```
|
||
|
||
---
|
||
|
||
# 31. Диагностика: Numeric unsigned
|
||
|
||
Если Zabbix показывает:
|
||
|
||
```text
|
||
Value of type "string" is not suitable for value type "Numeric (unsigned)"
|
||
```
|
||
|
||
проверь:
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.relay.connections
|
||
```
|
||
|
||
Правильный результат:
|
||
|
||
```text
|
||
rustdesk.relay.connections [s|2]
|
||
```
|
||
|
||
Неправильный результат:
|
||
|
||
```text
|
||
rustdesk.relay.connections [s|nsenter: reassociate to namespaces failed: Operation not permitted
|
||
0]
|
||
```
|
||
|
||
В этом случае проверь выполнение:
|
||
|
||
```bash
|
||
sudo -u zabbix sudo \
|
||
/usr/local/sbin/rustdesk-monitor-root connections
|
||
```
|
||
|
||
---
|
||
|
||
# 32. Диагностика: Item Unsupported
|
||
|
||
Если item имеет статус:
|
||
|
||
```text
|
||
Unsupported
|
||
```
|
||
|
||
проверь Agent:
|
||
|
||
```bash
|
||
sudo systemctl status zabbix-agent2 --no-pager
|
||
```
|
||
|
||
Проверь конфигурацию:
|
||
|
||
```bash
|
||
cat /etc/zabbix/zabbix_agent2.d/rustdesk.conf
|
||
```
|
||
|
||
После изменения:
|
||
|
||
```bash
|
||
sudo systemctl restart zabbix-agent2
|
||
```
|
||
|
||
Затем:
|
||
|
||
```bash
|
||
zabbix_agent2 -t rustdesk.relay.connections
|
||
```
|
||
|
||
---
|
||
|
||
# 33. Полная проверка после установки
|
||
|
||
Выполните:
|
||
|
||
```bash
|
||
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. Ожидаемый результат
|
||
|
||
Пример:
|
||
|
||
```text
|
||
===== 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. Быстрая установка
|
||
|
||
Если все файлы уже находятся в репозитории, установка сводится к:
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
После этого проверить:
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
Затем импортировать:
|
||
|
||
```text
|
||
zabbix/rustdesk-template.yaml
|
||
```
|
||
|
||
в Zabbix и привязать Template к RustDesk host.
|
||
|
||
---
|
||
|
||
# 36. Итог
|
||
|
||
После установки Zabbix получает:
|
||
|
||
```text
|
||
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:
|
||
|
||
```text
|
||
┌─────────────────────────────────────┐
|
||
│ ACTIVE RELAY SESSIONS │
|
||
│ 1 │
|
||
└─────────────────────────────────────┘
|
||
|
||
┌─────────────────────────────────────┐
|
||
│ RELAY CONNECTIONS │
|
||
│ 2 │
|
||
└─────────────────────────────────────┘
|
||
|
||
┌─────────────────────────────────────┐
|
||
│ ACTIVE RELAY IPs │
|
||
│ │
|
||
│ 194.58.38.147 │
|
||
│ 91.221.35.119 │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## License
|
||
|
||
Используйте проект в соответствии с лицензией, размещённой в репозитории.
|
||
|
||
RustDesk является отдельным проектом. Данный проект мониторинга не является официальным компонентом RustDesk. |