mirror of
https://github.com/fosrl/docs-v2.git
synced 2026-02-07 21:46:42 +00:00
217 lines
5.7 KiB
Plaintext
217 lines
5.7 KiB
Plaintext
---
|
||
title: "Traefik Log Dashboard"
|
||
---
|
||
|
||
<Note>
|
||
This is a community guide and is not officially supported. For issues or advanced configuration, please visit the [official repository](https://github.com/hhftechnology/traefik-log-dashboard).
|
||
</Note>
|
||
|
||
If you’re already using the **Pangolin stack with Traefik as your reverse proxy**, you have powerful routing in place. But raw log files and scattered metrics make it difficult to truly understand traffic patterns.
|
||
|
||
The **Enhanced Traefik Log Dashboard** adds **real-time monitoring, OpenTelemetry support, and geolocation analytics**, giving you a full picture of your traffic.
|
||
|
||
## Features
|
||
|
||
* **OpenTelemetry OTLP Support**: Real-time traces from Traefik v3+
|
||
* **Hybrid Monitoring**: Combine OTLP traces with traditional log parsing
|
||
* **Geolocation**: MaxMind GeoIP integration with automatic updates
|
||
* **Analytics**: Live request rates, response times, error tracking
|
||
* **Production Ready**: Resource limits, health checks, optimized GC/memory
|
||
|
||
## Prerequisites
|
||
|
||
* Docker + Docker Compose
|
||
* Traefik v3.0+ (for OTLP) or v2.x (logs only)
|
||
* A working Pangolin stack
|
||
|
||
## Step 1: Configure Traefik
|
||
|
||
### For OTLP + Logs (Recommended)
|
||
|
||
Update `./config/traefik/traefik_config.yml`:
|
||
|
||
```yaml
|
||
log:
|
||
level: INFO
|
||
filePath: "/var/log/traefik/traefik.log"
|
||
format: json
|
||
|
||
accessLog:
|
||
filePath: "/var/log/traefik/access.log"
|
||
format: json
|
||
|
||
tracing:
|
||
otlp:
|
||
http:
|
||
endpoint: "http://log-dashboard-backend:4318/v1/traces"
|
||
sampleRate: 0.1 # Adjust as needed - 0.1 for 10% sampling
|
||
globalAttributes:
|
||
environment: "production"
|
||
service.version: "v3.0"
|
||
deployment.environment: "pangolin"
|
||
```
|
||
|
||
### For Logs Only
|
||
|
||
```yaml
|
||
log:
|
||
level: INFO
|
||
filePath: "/var/log/traefik/traefik.log"
|
||
|
||
accessLog:
|
||
filePath: "/var/log/traefik/access.log"
|
||
format: json
|
||
```
|
||
|
||
## Step 2: Add Dashboard Services
|
||
|
||
Extend your existing `docker-compose.yml` with:
|
||
|
||
```yaml
|
||
log-dashboard-backend:
|
||
image: ghcr.io/hhftechnology/traefik-log-dashboard-backend:latest
|
||
container_name: log-dashboard-backend
|
||
restart: unless-stopped
|
||
ports:
|
||
- "4317:4317" # OTLP gRPC
|
||
- "4318:4318" # OTLP HTTP
|
||
volumes:
|
||
- ./config/traefik/logs:/logs:ro
|
||
- ./config/maxmind:/maxmind:ro
|
||
environment:
|
||
- PORT=3001
|
||
- TRAEFIK_LOG_FILE=/logs/access.log
|
||
- OTLP_ENABLED=true
|
||
- OTLP_GRPC_PORT=4317
|
||
- OTLP_HTTP_PORT=4318
|
||
- USE_MAXMIND=true
|
||
- MAXMIND_DB_PATH=/maxmind/GeoLite2-City.mmdb
|
||
- MAXMIND_FALLBACK_ONLINE=true
|
||
- GOGC=50
|
||
- GOMEMLIMIT=500MiB
|
||
|
||
log-dashboard-frontend:
|
||
image: ghcr.io/hhftechnology/traefik-log-dashboard-frontend:latest
|
||
container_name: log-dashboard-frontend
|
||
restart: unless-stopped
|
||
ports:
|
||
- "3000:80"
|
||
environment:
|
||
- BACKEND_SERVICE=log-dashboard-backend
|
||
- BACKEND_PORT=3001
|
||
depends_on:
|
||
- log-dashboard-backend
|
||
```
|
||
|
||
## Step 3: Setup MaxMind GeoIP (Optional but Recommended)
|
||
|
||
1. Create a free MaxMind account → [GeoLite2 signup](https://www.maxmind.com/en/geolite2/signup)
|
||
2. Generate a license key
|
||
3. Create directory:
|
||
|
||
```bash
|
||
mkdir -p ./config/maxmind
|
||
export MAXMIND_LICENSE_KEY=your_key_here
|
||
```
|
||
|
||
4. (Optional) Add updater service:
|
||
|
||
```yaml
|
||
maxmind-updater:
|
||
image: alpine:latest
|
||
container_name: maxmind-db-updater
|
||
volumes:
|
||
- ./config/maxmind:/data
|
||
environment:
|
||
- MAXMIND_LICENSE_KEY=${MAXMIND_LICENSE_KEY}
|
||
command: >
|
||
sh -c "
|
||
apk add --no-cache wget tar &&
|
||
cd /data &&
|
||
wget -O GeoLite2-City.tar.gz 'https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=$MAXMIND_LICENSE_KEY&suffix=tar.gz' &&
|
||
tar -xzf GeoLite2-City.tar.gz --strip-components=1 '*/GeoLite2-City.mmdb' &&
|
||
rm -f GeoLite2-City.tar.gz
|
||
"
|
||
```
|
||
|
||
## Step 4: Launch Stack
|
||
|
||
```bash
|
||
docker compose up -d
|
||
docker compose ps
|
||
```
|
||
|
||
## Step 5: Access the Dashboard
|
||
|
||
* **Frontend UI** → [http://localhost:3000](http://localhost:3000)
|
||
|
||
## Key Features
|
||
|
||
* **Real-time statistics** (requests, response times, error rates)
|
||
* **Interactive world map** (request origins via MaxMind)
|
||
* **Service insights** (performance by router/service)
|
||
* **Hybrid monitoring** (OTLP + logs together)
|
||
|
||
## Performance Tuning
|
||
|
||
For production or high-traffic environments, you may want to adjust settings to optimize resource usage and throughput.
|
||
|
||
### Reduce OTLP Sampling
|
||
Lower sampling to avoid overwhelming storage and dashboards:
|
||
|
||
```yaml
|
||
tracing:
|
||
sampleRate: 0.1 # 10% sampling in production
|
||
````
|
||
|
||
### Prefer gRPC over HTTP
|
||
|
||
For lower latency and higher throughput, enable gRPC instead of HTTP:
|
||
|
||
```yaml
|
||
tracing:
|
||
otlp:
|
||
grpc:
|
||
endpoint: "log-dashboard-backend:4317"
|
||
insecure: true
|
||
```
|
||
|
||
### Tune Backend Memory
|
||
|
||
Set environment variables in `log-dashboard-backend`:
|
||
|
||
```yaml
|
||
environment:
|
||
- GOGC=20 # More aggressive garbage collection
|
||
- GOMEMLIMIT=1GiB # Hard memory limit
|
||
```
|
||
|
||
### Resource Limits
|
||
|
||
Add CPU and memory constraints to containers:
|
||
|
||
```yaml
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: "1.0"
|
||
memory: 512M
|
||
reservations:
|
||
cpus: "0.2"
|
||
memory: 128M
|
||
```
|
||
|
||
These adjustments help keep the dashboard responsive while minimizing resource overhead.
|
||
|
||
|
||
## Troubleshooting
|
||
|
||
* **OTLP not showing** → Check Traefik `tracing` config + ports `4317/4318`
|
||
* **Logs not loading** → Ensure Traefik logs in JSON, volume mounted correctly
|
||
* **GeoIP errors** → Verify `MAXMIND_LICENSE_KEY` and DB path
|
||
* **Maxmind download errors** → Check license key validity by trying url with key directly in your browser
|
||
* **Docker logs for Traefik not showing** → Use `docker exec -it traefik tail -f /var/log/traefik/traefik.log` instead of `docker logs traefik -f` to see real-time logs on the command line.
|
||
|
||
---
|
||
|