Об этом проекте
Theia — приватная серверная аналитика
Обзор
Theia предоставляет статистику трафика сайта без использования клиентского JavaScript. Она в реальном времени отслеживает access-логи nginx, анализирует каждую строку для извлечения пути, реферера, пользовательского агента, IP, кода статуса и объёма переданных байт, хэширует IP-адреса ради конфиденциальности и сохраняет результаты в локальную базу данных SQLite. Поскольку вся обработка происходит на сервере, данные защищены от ad-blocker-ов и не зависят от сторонних сервисов.
Установка
Быстрая установка: скачайте скрипт установки через curl или wget и запустите с sudo bash. Скрипт определяет архитектуру, устанавливает бинарный файл в /usr/local/bin/theia, добавляет пользовательский формат логов nginx для отслеживания нескольких доменов (необязательно), создаёт systemd-сервис и подготавливает /var/lib/theia для хранения данных. Также поддерживается ручная установка — склонировать репозиторий, собрать через go build, скопировать бинарный файл, создать директорию данных и установить предоставленный systemd unit.
Запуск демона
Демон непрерывно читает access-лог nginx и записывает обработанные записи в базу данных SQLite.
Пример команды:
sudo theia daemon --log-path /var/log/nginx/access.log --db-path /var/lib/theia/theia.db
Ключевые флаги: --log-path (по умолчанию /var/log/nginx/access.log) и --db-path (по умолчанию ./theia.db).
Статистика через CLI
Подкоманда stats читает базу данных и выводит сводную таблицу или JSON-вывод.
Типичное использование:
theia stats --db-path /var/lib/theia/theia.db
Опции позволяют изменять период просмотра (--days), фильтровать по хосту (--host), выбирать формат вывода (--format json|table) и настраивать количество топ-записей (--top).
HTTP API сервис
Команда serve запускает защищённый bearer-токеном HTTP/JSON (или CSV) API на 127.0.0.1:8081. Его можно проксировать через nginx для внешнего доступа. Аутентификация может быть задана через токен-файл, переменную окружения или командную строку. Доступные эндпоинты:
GET /api/v1/stats – данные временного ряда
GET /api/v1/stats/paths – топ путей
GET /api/v1/stats/referrers – топ рефереров
GET /api/v1/stats/status-codes – разбивка по кодам статусов
Основные параметры запроса: host, from, to, format, group_by, top.
Completion для оболочки
Команда theia completion определяет текущую оболочку и предлагает установить скрипты автодополнения для bash, zsh или fish.
Управление сервисом
Theia запускается как systemd unit. Используйте стандартные systemctl-команды для старта, остановки, перезапуска, просмотра статуса и отслеживания логов.
Как это работает внутри
1. В реальном времени отслеживает файл лога nginx.
2. Анализирует каждую строку на предмет релевантных полей.
3. Хэширует IP + user-agent + дату для сохранения анонимности.
4. Автоматически определяет ботов и запросы статических активов.
5. Асинхронно записывает записи в SQLite (режим WAL), позволяя параллельное чтение.
6. Периодическая очистка удаляет почасовую статистику старше 60 дней.
Меры безопасности
Демону требуются права root или sudo для чтения access-логов nginx. Токен API следует хранить в файле, а не передавать в командной строке, чтобы избежать раскрытия через список процессов. Рекомендуется настроить rate limiting и правила fail2ban для шумных сканеров (см. docs/nginx-hardening.md).
Ограничения
* Собираются только счётчики просмотров страниц; нет клиентских событий.
* Возможна потеря данных при внезапных сбоях.
* Нет встроенного веб-дашборда — пользователи могут потреблять вывод CLI, HTTP API или выполнять прямые запросы к SQLite.
Лицензия
Apache License 2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.