Приложение для мониторинга и управления xray сервисом на удаленном сервере.
- ✅ Мониторинг логов xray в реальном времени через SSH
- ✅ Цветное выделение логов по фильтрам
- ✅ Звуковые уведомления
- ✅ Настраиваемые колонки отображения
- ✅ Фильтрация по IP, домену, route
- ✅ Автостарт мониторинга при запуске
- ✅ Управление сервисом (старт/стоп/рестарт)
- ✅ Редактор routing rules с SSH
- ✅ Добавление/удаление доменов в routing
- ✅ Backup конфигурации (локально + сервер)
- ✅ Автоматический рестарт xray после сохранения
- ✅ Виджет поверх окон
- ✅ Настраиваемые цвета и шрифты
- ✅ Сохранение позиции/размера окна
- ✅ Немодальное окно заметок с автосохранением
- ✅ System tray
- ✅ Сохранение логов в файлы (по дням)
- ✅ Локальное хранение истории
Скачать с https://www.python.org/downloads/
cd L:\_scripts\System-path\xray
pip install -r requirements.txtУбедитесь, что SSH подключение к серверу настроено:
ssh root@192.168.100.24"color": "#47e977ff" "color": "#3cffe5ff" "color": "#f11ed5ff", "color": "#47e977ff",
Отредактируйте monitor_config.json:
"xray": {
"host": "192.168.100.24",
"user": "root",
"password": "", // пароль (если нет ключа)
"ssh_key": "C:\\Users\\user\\.ssh\\id_rsa", // путь к SSH ключу
"log_path": "/var/log/xray/access.log",
"service_name": "xray"
}Варианты аутентификации (по приоритету):
- password - если указан, используется пароль
- ssh_key - если указан, используется конкретный ключ
- Автопоиск ключей в
~/.ssh/(id_rsa, id_ed25519 и т.д.)
"filters": [
{
"id": 1,
"name": "Название фильтра",
"enabled": true,
"source_ip": "192.168.100.100", // пусто = любой
"destination": "domain.com", // пусто = любой
"route": "direct", // пусто = любой
"color": "#00FF00", // цвет текста (HEX)
"beep": false // звуковой сигнал
}
]"monitoring": {
"local_log_dir": "L:\\_scripts\\System-path\\xray\\logs",
"update_interval_sec": 1,
"max_lines": 1000,
"tail_lines": 50,
"show_all_logs": false, // false - только фильтры, true - все
"display_columns": ["source_ip", "destination", "route"], // колонки
"auto_start": false // автостарт мониторинга
}Доступные колонки:
time- время события (HH:MM:SS)source_ip- IP источникаdestination- домен/IP назначенияroute- маршрут (direct/proxy)
Важно: если time НЕ указан в display_columns, время не выводится!
"widget": {
"topmost": true, // поверх окон
"opacity": 0.95, // прозрачность 0.0-1.0
"position": {"x": 100, "y": 100}, // автосохранение
"size": {"width": 900, "height": 600},
"font_size": 9,
"font_family": "Consolas",
"background_color": "#0d1117", // фон окна логов
"text_color": "#c9d1d9" // цвет текста
}"notes": {
"enabled": false, // показывать при запуске
"file": "L:\\_scripts\\System-path\\xray\\notes.txt",
"position": {"x": 100, "y": 100}, // автосохранение
"size": {"width": 400, "height": 300}
}Заметки автоматически сохраняются каждые 2 секунды.
"auto_restart": {
"enabled": false, // включить авто-рестарт
"interval_hours": 2 // интервал в часах
}cd L:\_scripts\System-path\xray
python XrayMonitor.pyПриложение парсит два формата логов xray:
2025/11/18 02:17:11.325159 from 192.168.100.100:22000 accepted //discovery-announce-v6.syncthing.net:443 [http >> direct]
Вывод: 02:17:11 || 192.168.100.100 || syncthing.net || direct
2025/11/18 02:17:07.117456 from 192.168.100.100:65417 accepted http://192.168.100.10:5000/webapi/DownloadStation/statistic.cgi [http >> direct]
Вывод: 02:17:07 || 192.168.100.100 || 192.168.100.10 || direct
- Открытие: кнопка ⚙ Редактор Routing в главном окне
- Загрузка config.json с сервера через SFTP
- Просмотр списка routing rules
- Добавление/удаление/редактирование доменов
- Поиск по доменам
- Сортировка доменов
- Сохранение на сервер с автоматическим рестартом xray
- Backup конфигурации (локально + на сервере)
- Чекбокс 📝 Заметки в главном окне
- Немодальное окно для быстрых записей
- Автосохранение каждые 2 секунды
- Сохранение в
L:\_scripts\System-path\xray\notes.txt - Автоматическое восстановление при запуске
- Запоминание позиции и размера
В monitor_config.json → monitoring.display_columns:
"display_columns": ["source_ip", "destination", "route"]Порядок колонок = порядок вывода. Время выводится только если указан "time".
В monitor_config.json → widget:
"background_color": "#0d1117",
"text_color": "#c9d1d9"В monitor_config.json → monitoring:
"auto_start": trueВсе окна автоматически сохраняют позицию и размер при закрытии.
- Ctrl+C в окне терминала - остановка приложения
- Закрытие окна - полная остановка приложения
Локальные логи сохраняются в:
L:\_scripts\System-path\xray\logs\xray_monitor_YYYYMMDD.log
Каждый день создается новый файл.
ВАЖНО: используйте только 6-символьный HEX формат:
- ✅ Правильно:
"color": "#3CFFE5" - ❌ Неправильно:
"color": "#3CFFE5FF"(8 символов не работают)
Для JSON файлов установите расширения:
naumovs.color-highlight- подсветка цветовbierner.color-info- picker при наведении
- Проверьте доступность сервера:
ping 192.168.100.24 - Проверьте SSH:
ssh root@192.168.100.24 - Убедитесь, что ключи SSH настроены
- Проверьте путь к логу в
config.json - Убедитесь, что у пользователя есть права:
ls -la /var/log/xray/
- Проверьте название сервиса:
systemctl status xray - Убедитесь, что у пользователя есть права sudo
- Проверьте путь к конфигу xray в
monitor_config.json - Убедитесь, что файл существует:
ls -la /usr/local/etc/xray/config.json - Проверьте права доступа
- Проверьте права на запись:
L:\_scripts\System-path\xray\notes.txt - Убедитесь, что папка существует
xray-monitoring/
├── XrayMonitor.py # Точка входа
├── monitor_config.json # Конфигурация
├── requirements.txt # Зависимости
├── README.md # Документация
├── .vscode/
│ └── copilot-context.md # Контекст для AI
└── ui/
├── __init__.py
├── main_window.py # Главное окно
├── ssh_worker.py # SSH мониторинг
├── config_editor.py # Редактор routing
└── notes_window.py # Окно заметок
1.0.0 - 2025-12-04
- ✅ Базовый мониторинг логов
- ✅ Управление xray сервисом
- ✅ Редактор routing rules
- ✅ Окно заметок с автосохранением
- ✅ Настраиваемые колонки вывода
- ✅ Настраиваемые цвета интерфейса
- ✅ Автостарт мониторинга
- ✅ Автосохранение позиции окон
AI Assistant (GitHub Copilot)