Dashdot is a modern, responsive server dashboard that provides a beautiful interface for monitoring server resources. It displays CPU, memory, disk, and network usage in real-time with a clean, minimalist design.
| File/Directory | Path | Purpose |
|---|---|---|
| Config file | /etc/dashdot/config.yaml |
Main Dashdot configuration |
| Environment | /etc/dashdot/.env |
Environment variables |
| Docker config | docker-compose.yml |
Docker Compose configuration |
| Web assets | /usr/share/dashdot/public/ |
Static web assets |
| Logs | /var/log/dashdot/ |
Dashdot log files |
| Systemd service | /etc/systemd/system/dashdot.service |
Service definition |
| TLS certificates | /etc/dashdot/ssl/ |
TLS/SSL certificates |
# /etc/dashdot/config.yaml
# ========================
# Server Settings
# ========================
server:
# Host and port
host: 0.0.0.0
port: 3001
# Base URL (for reverse proxy)
base_url: ""
# Enable HTTPS
https:
enabled: false
cert_file: /etc/dashdot/ssl/cert.pem
key_file: /etc/dashdot/ssl/key.pem
# Compression
compression: true
# CORS settings
cors:
enabled: true
origins:
- "*"
# Rate limiting
rate_limit:
enabled: true
requests_per_minute: 100
burst: 20
# ========================
# Authentication
# ========================
auth:
# Enable authentication
enabled: false
# Authentication method (basic, token)
method: token
# Basic auth credentials
basic:
username: admin
password: AdminPassword123!
# Token authentication
token:
# API tokens
tokens:
- name: dashboard-access
token: your-secure-token-here
permissions:
- read:metrics
- read:status
# Token expiration
expiration: 86400 # 24 hours
# Refresh tokens
refresh_enabled: true
refresh_expiration: 604800 # 7 days
# ========================
# Dashboard Settings
# ========================
dashboard:
# Title
title: Server Dashboard
# Subtitle
subtitle: Real-time Server Monitoring
# Theme
theme: auto # light, dark, auto
# Language
language: en
# Refresh interval (milliseconds)
refresh_interval: 2000
# Animation
animation: true
# Display settings
display:
# Show/hide sections
show_cpu: true
show_memory: true
show_disk: true
show_network: true
show_system: true
show_processes: true
# CPU display
cpu:
show_cores: true
show_frequency: true
show_temperature: false
show_load: true
decimal_places: 1
# Memory display
memory:
show_swap: true
show_cache: true
show_buffers: true
decimal_places: 1
unit: auto # auto, bytes, binary
# Disk display
disk:
show_all_partitions: false
show_mount_points:
- /
- /home
- /var
show_io_stats: true
show_inode_usage: true
decimal_places: 1
# Network display
network:
show_interfaces:
- eth0
- enp0s3
show_all_interfaces: false
show_traffic: true
show_errors: false
show_speed: true
unit: auto # auto, bits, bytes
# System display
system:
show_hostname: true
show_uptime: true
show_kernel: true
show_os: true
show_arch: true
# Process display
processes:
enabled: true
max_processes: 10
sort_by: cpu # cpu, memory, name
show_user: true
show_pid: true
# ========================
# Metrics Collection
# ========================
metrics:
# Collection interval (seconds)
collection_interval: 2
# Data retention
retention:
# High-resolution data points
high_res_points: 300 # ~10 minutes at 2s interval
# Low-resolution data points (downsampled)
low_res_points: 720 # ~24 hours at 2min interval
# Downsampling
downsampling:
enabled: true
interval: 120 # 2 minutes
# Metrics to collect
collect:
cpu: true
memory: true
disk: true
network: true
load: true
processes: true
temperature: false
gpu: false
# Temperature sensors
temperature:
enabled: false
sensors:
- name: CPU
path: /sys/class/thermal/thermal_zone0/temp
- name: GPU
path: /sys/class/thermal/thermal_zone1/temp
# GPU monitoring
gpu:
enabled: false
nvidia_smi_path: /usr/bin/nvidia-smi
# ========================
# Alert Configuration
# ========================
alerts:
# Enable alerts
enabled: false
# Alert check interval (seconds)
check_interval: 30
# Notification methods
notifications:
# Webhook notifications
webhook:
enabled: false
url: https://hooks.slack.com/services/XXX/YYY/ZZZ
method: POST
headers:
Content-Type: application/json
payload_template: |
{
"text": "🚨 Dashdot Alert: {{metric}} on {{hostname}}\nValue: {{value}}\nThreshold: {{threshold}}"
}
# Email notifications
email:
enabled: false
smtp_host: smtp.example.com
smtp_port: 587
smtp_user: dashdot@example.com
smtp_password: EmailPassword123!
use_tls: true
from_address: dashdot@example.com
recipients:
- admin@example.com
# Alert rules
rules:
- name: High CPU Usage
metric: cpu.percent
condition: ">"
threshold: 90
duration: 60 # seconds
severity: warning
enabled: true
- name: Critical CPU Usage
metric: cpu.percent
condition: ">"
threshold: 95
duration: 30
severity: critical
enabled: true
- name: High Memory Usage
metric: memory.percent
condition: ">"
threshold: 85
duration: 60
severity: warning
enabled: true
- name: Critical Memory Usage
metric: memory.percent
condition: ">"
threshold: 95
duration: 30
severity: critical
enabled: true
- name: Low Disk Space
metric: disk.percent
condition: ">"
threshold: 85
duration: 300
severity: warning
enabled: true
- name: Critical Disk Space
metric: disk.percent
condition: ">"
threshold: 95
duration: 60
severity: critical
enabled: true
# ========================
# Multi-Server Support
# ========================
servers:
# Enable multi-server mode
enabled: false
# Default server
default: local
# Server definitions
definitions:
local:
name: Local Server
host: localhost
type: local
enabled: true
remote-1:
name: Web Server 01
host: 192.168.1.10
type: ssh
port: 22
user: dashdot
auth:
type: key
key_file: /etc/dashdot/ssh/dashdot_key
enabled: true
remote-2:
name: DB Server 01
host: 192.168.1.20
type: ssh
port: 22
user: dashdot
auth:
type: password
password: ServerPassword123!
enabled: true
# SSH settings
ssh:
timeout: 30
keepalive: true
keepalive_interval: 60
# ========================
# Logging
# ========================
logging:
# Log level (debug, info, warn, error)
level: info
# Log format (json, text)
format: text
# Log output
output:
- file
- stdout
# File logging
file:
path: /var/log/dashdot/dashdot.log
max_size: 50 # MB
max_backups: 3
max_age: 7 # days
compress: true
# ========================
# Performance Settings
# ========================
performance:
# Worker threads
workers: 2
# Collection concurrency
collection_concurrency: 4
# Cache settings
cache:
enabled: true
type: memory # memory, redis
ttl: 5 # seconds
# Redis cache (if type is redis)
redis:
host: localhost
port: 6379
password: ""
db: 0
# ========================
# API Settings
# ========================
api:
# Enable API
enabled: true
# API version
version: v1
# API endpoint prefix
prefix: /api
# Rate limiting
rate_limit:
enabled: true
requests_per_minute: 60
burst: 10
# API documentation
docs:
enabled: true
path: /api/docs
# ========================
# Customization
# ========================
customization:
# Custom CSS
custom_css: ""
# Custom JavaScript
custom_js: ""
# Custom logo
logo:
enabled: false
url: /assets/logo.png
height: 40
# Custom favicon
favicon: /favicon.ico
# Footer text
footer: "Dashdot Server Dashboard"
# Custom widgets
widgets:
- name: Custom Widget
type: html
content: "<div>Custom content here</div>"
position: top
# /etc/dashdot/.env
# Server settings
DASHDOT_HOST=0.0.0.0
DASHDOT_PORT=3001
DASHDOT_BASE_URL=
# Authentication
DASHDOT_AUTH_ENABLED=false
DASHDOT_AUTH_METHOD=token
DASHDOT_AUTH_TOKEN=your-secure-token-here
# Dashboard settings
DASHDOT_TITLE=Server Dashboard
DASHDOT_THEME=auto
DASHDOT_LANGUAGE=en
DASHDOT_REFRESH_INTERVAL=2000
# Metrics settings
DASHDOT_COLLECTION_INTERVAL=2
DASHDOT_HIGH_RES_POINTS=300
DASHDOT_LOW_RES_POINTS=720
# Logging
DASHDOT_LOG_LEVEL=info
DASHDOT_LOG_FILE=/var/log/dashdot/dashdot.log
# HTTPS
DASHDOT_HTTPS_ENABLED=false
DASHDOT_SSL_CERT_FILE=/etc/dashdot/ssl/cert.pem
DASHDOT_SSL_KEY_FILE=/etc/dashdot/ssl/key.pem
# docker-compose.yml
version: '3.8'
services:
dashdot:
image: mauricenino/dashdot:latest
container_name: dashdot
restart: unless-stopped
ports:
- "3001:3001"
environment:
- DASHDOT_HOST=0.0.0.0
- DASHDOT_PORT=3001
- DASHDOT_AUTH_ENABLED=false
- DASHDOT_TITLE=Server Dashboard
- DASHDOT_THEME=auto
- DASHDOT_REFRESH_INTERVAL=2000
- DASHDOT_LOG_LEVEL=info
volumes:
- /:/mnt/host:ro
- ./config.yaml:/app/config.yaml:ro
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
networks:
- monitoring
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashdot.rule=Host(`dashdot.example.com`)"
- "traefik.http.routers.dashdot.entrypoints=websecure"
- "traefik.http.routers.dashdot.tls=true"
- "traefik.http.routers.dashdot.tls.certresolver=letsencrypt"
networks:
monitoring:
external: true
# Dashboard display configuration
display:
# Layout options
layout:
columns: 2
max_width: 1200
spacing: 20
# Color scheme
colors:
cpu:
low: "#4ade80"
medium: "#fbbf24"
high: "#f87171"
memory:
low: "#60a5fa"
medium: "#fbbf24"
high: "#f87171"
disk:
low: "#34d399"
medium: "#fbbf24"
high: "#f87171"
network:
receive: "#60a5fa"
transmit: "#34d399"
# Chart settings
charts:
type: area # line, area, bar
smooth: true
fill_opacity: 0.3
stroke_width: 2
point_radius: 3
show_grid: true
show_legend: true
# Custom metrics configuration
custom_metrics:
- name: Docker Containers
type: gauge
command: "docker ps -q | wc -l"
unit: containers
collection_interval: 30
- name: Nginx Connections
type: gauge
command: "curl -s http://localhost/nginx_status | grep 'Active connections' | awk '{print $3}'"
unit: connections
collection_interval: 10
- name: MySQL Connections
type: gauge
command: "mysql -e \"SHOW STATUS LIKE 'Threads_connected'\" 2>/dev/null | awk 'NR==2 {print $2}'"
unit: connections
collection_interval: 30
- name: SSL Certificate Days
type: gauge
command: "echo | openssl s_client -connect localhost:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2"
unit: days
collection_interval: 3600
# Webhook notification configuration
notifications:
webhook:
enabled: true
url: https://hooks.slack.com/services/XXX/YYY/ZZZ
method: POST
headers:
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
payload_template: |
{
"channel": "#alerts",
"username": "Dashdot",
"icon_emoji": ":chart_with_upwards_trend:",
"attachments": [
{
"color": "{{severity_color}}",
"title": "Dashdot Alert: {{severity}}",
"fields": [
{"title": "Server", "value": "{{hostname}}", "short": true},
{"title": "Metric", "value": "{{metric}}", "short": true},
{"title": "Value", "value": "{{value}}", "short": true},
{"title": "Threshold", "value": "{{threshold}}", "short": true}
],
"footer": "Dashdot Monitoring",
"ts": {{timestamp}}
}
]
}
timeout: 10
retry_count: 3
retry_delay: 5
# Email notification configuration
notifications:
email:
enabled: true
smtp_host: smtp.example.com
smtp_port: 587
smtp_user: dashdot@example.com
smtp_password: EmailPassword123!
use_tls: true
from_address: dashdot@example.com
from_name: Dashdot Monitoring
recipients:
- admin@example.com
- ops-team@example.com
subject_template: "[{{severity}}] Dashdot Alert: {{metric}} on {{hostname}}"
body_template: |
Dashdot Monitoring Alert
Server: {{hostname}}
Metric: {{metric}}
Current Value: {{value}}
Threshold: {{threshold}}
Severity: {{severity}}
Duration: {{duration}}
Time: {{timestamp}}
Please investigate.
--
Dashdot Monitoring System
# Validate configuration syntax
dashdot config validate
# Check configuration
dashdot config show
# Test metrics collection
dashdot metrics test
# Test notifications
dashdot notifications test
# Restart Dashdot service
sudo systemctl restart dashdot
# Check service status
sudo systemctl status dashdot
# View logs
sudo journalctl -u dashdot -f
sudo tail -f /var/log/dashdot/dashdot.log
# Reload configuration
sudo systemctl reload dashdot
# Restart Docker container
docker restart dashdot
# View container logs
docker logs dashdot
# Check container status
docker ps | grep dashdot
# Update container
docker pull mauricenino/dashdot:latest
docker restart dashdot
# Check service status
sudo systemctl status dashdot
# Check if listening
sudo netstat -tlnp | grep 3001
# Check running processes
ps aux | grep dashdot
# Access web interface
curl http://localhost:3001
# Check API health
curl http://localhost:3001/api/health
# Get metrics
curl http://localhost:3001/api/metrics
# Get system info
curl http://localhost:3001/api/system
# Test metrics endpoint
curl http://localhost:3001/api/metrics | jq '.'
# Check CPU metrics
curl http://localhost:3001/api/metrics/cpu
# Check memory metrics
curl http://localhost:3001/api/metrics/memory
# Check disk metrics
curl http://localhost:3001/api/metrics/disk
# Test webhook notification
dashdot notifications test --type webhook
# Test email notification
dashdot notifications test --type email
# View notification logs
tail -f /var/log/dashdot/notifications.log
Every deployment is unique. We provide consulting for:
Get personalized assistance: office@linux-server-admin.com | Contact Page