Skip to main content

Monitoring

Monitoring Setup

Prometheus Configuration

yaml

# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'tileserver'
static_configs:
- targets: ['tileserver:8080']
metrics_path: '/metrics'
scrape_interval: 5s
- job_name: 'postgres'
static_configs:
- targets: ['postgres:5432']
metrics_path: '/metrics'
- job_name: 'redis'
static_configs:
- targets: ['redis:6379']
metrics_path: '/metrics'

Grafana Dashboard Configuration

json

{
"dashboard": {
"title": "Tile Server 5.3.1 Monitoring",
"panels": [
{
"title": "Request Rate",
"type": "graph",
"targets": [
{
"expr": "rate(tileserver_requests_total[5m])",
"legendFormat": "Requests/sec"
}
]
},
{
"title": "Response Time",
"type": "graph",
"targets": [
{
"expr": "tileserver_request_duration_seconds",
"legendFormat": "{{quantile}}"
}
]
},
{
"title": "Cache Hit Rate",
"type": "singlestat",
"targets": [
{
"expr": "rate(tileserver_cache_hits_total[5m]) / rate(tileserver_cache_requests_total[5m])",
"legendFormat": "Hit Rate"
}
]
}
]
}
}

Key Metrics to Monitor

Application Metrics

  • Request rate (requests/second)

  • Response time (percentiles: 50th, 95th, 99th)

  • Error rate (4xx, 5xx responses)

  • Cache hit ratio

  • Active connections

  • Queue depth

System Metrics

  • CPU usage

  • Memory usage

  • Disk I/O

  • Network throughput

  • Database connection pool status

Custom Alerts

yaml


groups:
- name: tileserver
rules:
- alert: HighErrorRate
expr: rate(tileserver_requests_total{status=~"5.."}[5m]) > 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "High error rate detected"
- alert: HighResponseTime
expr: tileserver_request_duration_seconds{quantile="0.95"} > 1
for: 5m
labels:
severity: warning
annotations:
summary: "High response time detected"
- alert: LowCacheHitRate
expr: rate(tileserver_cache_hits_total[5m]) / rate(tileserver_cache_requests_total[5m]) < 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "Cache hit rate is low"

Log Management

bash


# Configure log rotation
sudo nano /etc/logrotate.d/tileserver
/var/log/tileserver/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 tileserver tileserver
postrotate
docker-compose exec tileserver killall -USR1 node
endscript
}