
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
A comprehensive analytics platform for Traefik access logs with three deployment options: a Go-based API agent, a modern Next.js web dashboard, and a beautiful terminal-based CLI.
!https://img.shields.io/github/stars/hhftechnology/traefik-log-dashboard?style=flat-square https://img.shields.io/***/994247717368909884?logo=***&style=flat-square]([***]
A comprehensive real-time analytics platform for Traefik reverse proxy logs
Traefik Log Dashboard is a powerful analytics platform that provides real-time insights into your Traefik reverse proxy traffic. It consists of three components that work together:
bashmkdir -p traefik-dashboard/{data/{logs,geoip,positions,dashboard}} cd traefik-dashboard
docker-compose.yml:yamlservices: # Traefik Log Dashboard Agent traefik-agent: image: hhftechnology/traefik-log-dashboard-agent:dev-dashboard container_name: traefik-log-dashboard-agent restart: unless-stopped ports: - "5000:5000" volumes: - ./data/logs:/logs:ro - ./data/geoip:/geoip:ro # MaxMind GeoIP databases - ./data/positions:/data environment: # Log Paths - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_ERROR_PATH=/logs/access.log # Authentication - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=d41d8cd98f00b204e9800998ecf8427e # System Monitoring - TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING=true # GeoIP Configuration - TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true - TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB=/geoip/GeoLite2-City.mmdb - TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb # Log Format - TRAEFIK_LOG_DASHBOARD_LOG_FORMAT=json # Server Port - PORT=5000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/logs/status"] interval: 30s timeout: 10s retries: 3 start_period: 10s networks: - traefik-network # Traefik Log Dashboard - Next.js web UI traefik-dashboard: image: hhftechnology/traefik-log-dashboard:dev-dashboard container_name: traefik-log-dashboard restart: unless-stopped user: "1001:1001" ports: - "3000:3000" volumes: - ./data/dashboard:/app/data environment: # Agent Configuration (Default/Environment Agent) - AGENT_API_URL=http://traefik-agent:5000 - AGENT_API_TOKEN=d41d8cd98f00b204e9800998ecf8427e - AGENT_NAME=Default Agent # Optional: Name for environment agent # Node Environment - NODE_ENV=production - PORT=3000 depends_on: traefik-agent: condition: service_healthy networks: - traefik-network networks: traefik-network: external: true
bash# Generate a strong token openssl rand -hex 32 # Update both TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN and AGENT_API_TOKEN with this value
bashdocker compose up -d
Open your browser to http://localhost:3000
To monitor multiple Traefik instances, deploy additional agents and register them in the dashboard.
Add more agent services to your docker-compose.yml:
yamlservices: traefik-agent-2: image: hhftechnology/traefik-log-dashboard-agent:dev-dashboard container_name: traefik-log-dashboard-agent-2 restart: unless-stopped ports: - "5001:5000" volumes: - ./data/logs2:/logs:ro - ./data/geoip:/geoip:ro - ./data/positions2:/data environment: - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_ERROR_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=your_token_for_agent_2 - TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING=true - TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true - TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB=/geoip/GeoLite2-City.mmdb - TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb - TRAEFIK_LOG_DASHBOARD_LOG_FORMAT=json - PORT=5000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/logs/status"] interval: 30s timeout: 10s retries: 3 start_period: 10s networks: - traefik-network traefik-agent-3: image: hhftechnology/traefik-log-dashboard-agent:dev-dashboard container_name: traefik-log-dashboard-agent-3 restart: unless-stopped ports: - "5002:5000" volumes: - ./data/logs3:/logs:ro - ./data/geoip:/geoip:ro - ./data/positions3:/data environment: - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_ERROR_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=your_token_for_agent_3 - TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING=true - TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true - TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB=/geoip/GeoLite2-City.mmdb - TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb - TRAEFIK_LOG_DASHBOARD_LOG_FORMAT=json - PORT=5000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/logs/status"] interval: 30s timeout: 10s retries: 3 start_period: 10s networks: - traefik-network
Navigate to Settings → Agents in the dashboard
Click Add Agent
Fill in agent details:
Click Save to register the agent
Deploy agents on different servers:
On Remote Server:
bashdocker run -d \ --name traefik-agent \ -p 5000:5000 \ -v /path/to/traefik/logs:/logs:ro \ -v /path/to/geoip:/geoip:ro \ -v /path/to/positions:/data \ -e TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log \ -e TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=your_secure_token \ -e TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true \ -e TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB=/geoip/GeoLite2-City.mmdb \ -e TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb \ hhftechnology/traefik-log-dashboard-agent:dev-dashboard
Register in Dashboard:
http://remote-server-ip:5000your_secure_tokenThe dashboard uses SQLite to persist agent configurations:
sqlCREATE TABLE agents ( id TEXT PRIMARY KEY, -- Auto-generated: agent-001, agent-002, etc. name TEXT NOT NULL, -- Display name url TEXT NOT NULL, -- Agent API URL token TEXT NOT NULL, -- Authentication token location TEXT NOT NULL, -- 'on-site' or 'off-site' number INTEGER NOT NULL, -- Sequential number status TEXT, -- 'online', 'offline', 'checking' last_seen TEXT, -- ISO timestamp of last successful check description TEXT, -- Optional description tags TEXT, -- JSON array of tags source TEXT NOT NULL DEFAULT 'manual', -- 'env' or 'manual' created_at TEXT NOT NULL, -- Creation timestamp updated_at TEXT NOT NULL -- Last update timestamp ); CREATE TABLE selected_agent ( id INTEGER PRIMARY KEY CHECK(id = 1), -- Singleton table agent_id TEXT NOT NULL, -- Currently selected agent updated_at TEXT NOT NULL -- Selection timestamp );
Environment Agents (source='env'):
Manual Agents (source='manual'):
Define agents in docker-compose.yml:
yamltraefik-dashboard: environment: # This creates a protected environment agent - AGENT_API_URL=http://traefik-agent:5000 - AGENT_API_TOKEN=your_secure_token - AGENT_NAME=Production Agent # Optional, defaults to "Environment Agent"
The dashboard will automatically:
agent-env-001source='env'By default: ./data/dashboard/agents.db
Custom path:
yamltraefik-dashboard: environment: - DATABASE_PATH=/custom/path/agents.db
Backup:
bash# Copy the database file cp ./data/dashboard/agents.db ./backups/agents-$(date +%Y%m%d).db
Restore:
bash# Stop dashboard docker compose stop traefik-dashboard # Restore database cp ./backups/agents-20250101.db ./data/dashboard/agents.db # Start dashboard docker compose start traefik-dashboard
Sign up for MaxMind account (free): https://www.maxmind.com/en/geolite2/signup
Generate license key:
Download databases manually:
bashcd data/geoip # Download GeoLite2-City wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz" -O GeoLite2-City.tar.gz # Download GeoLite2-Country wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=YOUR_LICENSE_KEY&suffix=tar.gz" -O GeoLite2-Country.tar.gz # Extract tar -xzf GeoLite2-City.tar.gz --strip-components=1 tar -xzf GeoLite2-Country.tar.gz --strip-components=1 # Clean up rm *.tar.gz
Automated Updates (using geoipupdate):
bashdocker run -d \ --name geoipupdate \ -v ./data/geoip:/usr/share/GeoIP \ -e GEOIPUPDATE_ACCOUNT_ID=your_account_id \ -e GEOIPUPDATE_LICENSE_KEY=your_license_key \ -e GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-Country" \ -e GEOIPUPDATE_FREQUENCY=168 # Update weekly maxmindinc/geoipupdate
bash# Check files exist ls -lh data/geoip/ # Should show: # GeoLite2-City.mmdb # GeoLite2-Country.mmdb # Test agent GeoIP endpoint curl -H "Authorization: Bearer your_token" \ http://localhost:5000/api/location/status
Total Requests: Aggregate count of all HTTP requests processed
Average Response Time: Mean response time across all requests (in milliseconds)
Error Rate: Percentage of requests with 4xx or 5xx status codes
Active Services: Number of unique Traefik services handling traffic
Top Countries: Requests grouped by country (requires GeoIP)
Top Cities: Requests grouped by city (requires GeoIP)
Interactive Map: Geographic heatmap visualization
Requests by Status Code: Distribution of 2xx, 3xx, 4xx, 5xx responses
Top Services: Most active Traefik services by request count
Top Routers: Most active Traefik routers by request count
Methods Distribution: HTTP methods (GET, POST, PUT, DELETE, etc.)
Response Time Chart: Time-series graph of response times
Request Rate: Requests per second/minute/hour
Slowest Endpoints: Top 10 slowest routes by average response time
Error Timeline: Time-series of error occurrences
Available in the top toolbar:
Get Logs:
bashcurl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/logs/access?lines=100&status=200&method=GET"
Get Status:
bashcurl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/logs/status"
Get Metrics:
bashcurl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/logs/metrics?period=1h"
GeoIP Lookup:
bashcurl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/location/lookup?ip=8.8.8.8"
System Stats:
bashcurl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/system/stats"
| Variable | Description | Default | Required |
|---|---|---|---|
TRAEFIK_LOG_DASHBOARD_ACCESS_PATH | Path to Traefik access log | /logs/access.log | Yes |
TRAEFIK_LOG_DASHBOARD_ERROR_PATH | Path to Traefik error log | - | No |
TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN | Bearer token for authentication | - | Yes |
TRAEFIK_LOG_DASHBOARD_LOG_FORMAT | Log format (json/common) | json | No |
TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING | Enable system monitoring | true | No |
TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED | Enable GeoIP lookups | false | No |
TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB | Path to GeoLite2-City.mmdb | - | If GeoIP enabled |
TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB | Path to GeoLite2-Country.mmdb | - | If GeoIP enabled |
PORT | Agent listen port | 5000 | No |
| Variable | Description | Default | Required |
|---|---|---|---|
AGENT_API_URL | Default agent URL (for env agent) | - | Yes (for env agent) |
AGENT_API_TOKEN | Default agent token (for env agent) | - | Yes (for env agent) |
AGENT_NAME | Name for environment agent | Environment Agent | No |
NODE_ENV | Node environment | production | No |
PORT | Dashboard listen port | 3000 | No |
DATABASE_PATH | SQLite database location | ./data/agents.db | No |
Configure Traefik to output JSON access logs:
yaml# traefik.yml accessLog: filePath: "/logs/access.log" format: json bufferingSize: 100 fields: defaultMode: keep names: ClientUsername: drop headers: defaultMode: keep names: Authorization: drop Cookie: drop
source and status columnsAgent:
Dashboard:
Symptoms:
Solutions:
bash# Check agent is running docker ps | grep traefik-agent # Check agent logs docker logs traefik-log-dashboard-agent # Verify agent is accessible from dashboard docker exec traefik-log-dashboard wget -O- http://traefik-agent:5000/api/logs/status # Check authentication token matches docker exec traefik-agent env | grep AUTH_TOKEN docker exec traefik-dashboard env | grep AGENT_API_TOKEN
Symptoms:
Cause: Agent is defined in docker-compose.yml environment variables
Solution:
bash# Environment agents (source='env') are protected # They can only be removed by: # 1. Removing environment variables from docker-compose.yml # 2. Restarting the dashboard docker compose down # Edit docker-compose.yml - remove AGENT_API_URL and AGENT_API_TOKEN docker compose up -d
Symptoms:
Solutions:
bash# Verify databases exist ls -lh ./data/geoip/ # Check agent logs for GeoIP errors docker logs traefik-log-dashboard-agent | grep -i geoip # Verify environment variables docker exec traefik-agent env | grep GEOIP # Test GeoIP lookup curl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:5000/api/location/status" # Re-download databases if corrupted cd data/geoip rm *.mmdb # Follow GeoIP setup instructions above
Symptoms:
Solutions:
bash# Verify log file path is correct docker exec traefik-agent ls -lh /logs/ # Check log file permissions (should be readable) docker exec traefik-agent cat /logs/access.log | head -5 # Verify log format matches configuration # Should be JSON format: docker exec traefik-agent head -1 /logs/access.log # Check Traefik is generating logs tail -f /path/to/your/traefik/logs/access.log
Symptoms:
Solutions:
bash# Enable log rotation in Traefik # traefik.yml: # accessLog: # filePath: "/logs/access.log" # maxSize: 100 # MB # maxBackups: 3 # maxAge: 7 # days # Reduce dashboard refresh interval # In UI: Settings → Refresh Interval → 30s or 60s # Check database size du -sh data/dashboard/agents.db # Vacuum database if large docker exec traefik-dashboard sqlite3 /app/data/agents.db "VACUUM;"
Symptoms:
Solutions:
bash# Manually check agent status curl -H "Authorization: Bearer YOUR_TOKEN" \ http://agent-url:5000/api/logs/status # Check network connectivity docker exec traefik-dashboard ping -c 3 traefik-agent # Verify token is correct # In Dashboard: Settings → Agents → Edit Agent → Update Token # Force status refresh # In Dashboard: Settings → Agents → Click refresh button
Symptoms:
Solutions:
bash# Stop dashboard docker compose stop traefik-dashboard # Check for stale locks ls -la data/dashboard/ # Remove lock files if present rm data/dashboard/agents.db-shm rm data/dashboard/agents.db-wal # Restart dashboard docker compose start traefik-dashboard
Contributions are welcome! Please read our Contributing Guide.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE - see the LICENSE file for details.
Made with ❤️ for the Traefik community
⭐ Star this repo if you find it helpful!
https://github.com/hhftechnology/traefik-log-dashboard • *** • https://github.com/hhftechnology/traefik-log-dashboard/issues
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务