LogLynx Веб-интерфейс для анализа логов

This commit is contained in:
2026-04-25 13:34:07 +03:00
parent d4178ee39f
commit 9275db1598
4 changed files with 2038 additions and 1007 deletions

View File

@@ -267,6 +267,7 @@ docker-compose-up: ## Запустить кластер (3 ноды)
@echo "Grafana: http://localhost:3000" @echo "Grafana: http://localhost:3000"
@echo "ObserverWeb: http://localhost:4000/observer/" @echo "ObserverWeb: http://localhost:4000/observer/"
@echo "Traefik: http://localhost:8080" @echo "Traefik: http://localhost:8080"
@echo "LogLynx: http://localhost:6123"
docker-compose-down: ## Остановить кластер docker-compose-down: ## Остановить кластер
@echo "Остановка кластера..." @echo "Остановка кластера..."

View File

@@ -1,22 +1,26 @@
# docker/docker-compose.yml # docker/docker-compose.yml
services: services:
# ================== Балансировщик нагрузки (HTTPS/WSS) ================== # ================== Балансировщик (HTTPS/WSS, WAF, логи) ==================
traefik: traefik:
image: traefik:latest image: traefik:latest
user: "0:1001" # группа docker на хосте (подберите под свою систему, см. ls -la /var/run/docker.sock) user: "0:1001" # группа docker на хосте
command: command:
- "--api.insecure=true" # дашборд (можно удалить в production) - "--api.insecure=true"
- "--providers.docker=true" - "--providers.docker=true"
- "--providers.docker.exposedbydefault=false" - "--providers.docker.exposedbydefault=false"
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат, редирект и failover - "--providers.file.filename=/etc/traefik/dynamic_conf.yml"
- "--entrypoints.web.address=:80" # HTTP (для редиректа) - "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443" # HTTPS/WSS - "--entrypoints.websecure.address=:443"
# Метрики Prometheus # Метрики
- "--metrics.prometheus=true" - "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0" - "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
- "--metrics.prometheus.addEntryPointsLabels=true" - "--metrics.prometheus.addEntryPointsLabels=true"
- "--metrics.prometheus.addServicesLabels=true" - "--metrics.prometheus.addServicesLabels=true"
# --- Coraza WAF --- # Логи доступа (JSON)
- "--accesslog=true"
- "--accesslog.filepath=/var/log/traefik/access.log"
- "--accesslog.format=json"
# Coraza WAF
- "--experimental.plugins.coraza.modulename=github.com/jcchavezs/coraza-http-wasm-traefik" - "--experimental.plugins.coraza.modulename=github.com/jcchavezs/coraza-http-wasm-traefik"
- "--experimental.plugins.coraza.version=v0.2.0" - "--experimental.plugins.coraza.version=v0.2.0"
ports: ports:
@@ -26,13 +30,14 @@ services:
- "8080:8080" - "8080:8080"
volumes: volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro" - "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik/certs:/etc/traefik/certs:ro" # самоподписанный сертификат - "./traefik/certs:/etc/traefik/certs:ro"
- "./traefik/dynamic_conf.yml:/etc/traefik/dynamic_conf.yml:ro" - "./traefik/dynamic_conf.yml:/etc/traefik/dynamic_conf.yml:ro"
- "traefik-logs:/var/log/traefik" # для LogLynx
networks: networks:
- eventhub-net - eventhub-net
restart: unless-stopped restart: unless-stopped
# ================== Сервис-заглушка для Failover ================== # ================== Сервис-заглушка (Failover) ==================
fallback: fallback:
build: build:
context: ./fallback context: ./fallback
@@ -132,6 +137,23 @@ services:
- "3000:3000" - "3000:3000"
restart: unless-stopped restart: unless-stopped
# ================== Аналитика логов ==================
loglynx:
image: k0lin/loglynx:latest
user: root
restart: unless-stopped
ports:
- "6123:6123"
volumes:
- traefik-logs:/app/traefik/logs:ro
- loglynx-data:/app/data
environment:
- TRAEFIK_LOG_PATH=${TRAEFIK_LOG_PATH}
- SERVER_PORT=6123
- DATABASE_PATH=/app/data/loglynx.db
networks:
- eventhub-net
# ================== Инструмент отладки ================== # ================== Инструмент отладки ==================
observer_web: observer_web:
build: build:
@@ -145,7 +167,6 @@ services:
- "4000:4000" - "4000:4000"
restart: unless-stopped restart: unless-stopped
# ================== Сети и тома ==================
networks: networks:
eventhub-net: eventhub-net:
driver: bridge driver: bridge
@@ -156,3 +177,5 @@ volumes:
eventhub-node3-data: eventhub-node3-data:
prometheus-data: prometheus-data:
grafana-data: grafana-data:
traefik-logs:
loglynx-data:

File diff suppressed because it is too large Load Diff

View File

@@ -27,7 +27,7 @@ http:
- "SecRule ARGS \"@rx (union|select|insert|drop|alter)\" \"id:102,phase:2,log,deny,status:403\"" - "SecRule ARGS \"@rx (union|select|insert|drop|alter)\" \"id:102,phase:2,log,deny,status:403\""
routers: routers:
# --- REST API пользователей --- # REST API пользователей
api: api:
rule: "Host(`api.eventhub.local`)" rule: "Host(`api.eventhub.local`)"
entryPoints: ["web"] entryPoints: ["web"]
@@ -40,7 +40,7 @@ http:
middlewares: ["waf"] middlewares: ["waf"]
service: "api" service: "api"
# --- WebSocket пользователей --- # WebSocket пользователей (без WAF)
ws: ws:
rule: "Host(`ws.eventhub.local`)" rule: "Host(`ws.eventhub.local`)"
entryPoints: ["web"] entryPoints: ["web"]
@@ -52,7 +52,7 @@ http:
tls: true tls: true
service: "ws" service: "ws"
# --- Админский REST --- # Админский REST
admin-api: admin-api:
rule: "Host(`admin.eventhub.local`)" rule: "Host(`admin.eventhub.local`)"
entryPoints: ["web"] entryPoints: ["web"]
@@ -65,7 +65,7 @@ http:
middlewares: ["waf"] middlewares: ["waf"]
service: "admin-api" service: "admin-api"
# --- Админский WebSocket --- # Админский WebSocket (без WAF)
admin-ws: admin-ws:
rule: "Host(`admin-ws.eventhub.local`)" rule: "Host(`admin-ws.eventhub.local`)"
entryPoints: ["web"] entryPoints: ["web"]
@@ -78,7 +78,7 @@ http:
service: "admin-ws" service: "admin-ws"
services: services:
# === Пользовательский REST API (failover) === # Пользовательский REST API (failover)
api: api:
failover: failover:
service: api-live service: api-live
@@ -98,7 +98,7 @@ http:
servers: servers:
- url: "http://fallback:80" - url: "http://fallback:80"
# === WebSocket пользователей === # Пользовательский WebSocket
ws: ws:
loadbalancer: loadbalancer:
servers: servers:
@@ -106,7 +106,7 @@ http:
- url: "http://eventhub-node2:8081" - url: "http://eventhub-node2:8081"
- url: "http://eventhub-node3:8081" - url: "http://eventhub-node3:8081"
# === Админский REST (failover) === # Админский REST (failover)
admin-api: admin-api:
failover: failover:
service: admin-api-live service: admin-api-live
@@ -126,7 +126,7 @@ http:
servers: servers:
- url: "http://fallback:80" - url: "http://fallback:80"
# === Админский WebSocket === # Админский WebSocket
admin-ws: admin-ws:
loadbalancer: loadbalancer:
servers: servers: