LogLynx Веб-интерфейс для анализа логов
This commit is contained in:
1
Makefile
1
Makefile
@@ -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 "Остановка кластера..."
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -155,4 +176,6 @@ volumes:
|
|||||||
eventhub-node2-data:
|
eventhub-node2-data:
|
||||||
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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user