This document provides an overview of various tools and Docker images to monitor server CPU, memory, storage, and other performance metrics. It includes descriptions, Docker images, metrics monitored, visualization options, setup complexity, and GitHub links.
Tool | Description | Docker Image | Metrics Monitored | Visualization | Setup Complexity | GitHub Link |
---|---|---|---|---|---|---|
Prometheus | Time-series database for monitoring and alerting. | prom/prometheus |
CPU, Memory, Disk, Network | Integrated with Grafana | Medium | Prometheus GitHub |
Grafana | Visualization tool that integrates with Prometheus. | grafana/grafana |
N/A (depends on data source) | Customizable dashboards | Medium | Grafana GitHub |
cAdvisor | Container Advisor for monitoring container resource usage. | google/cadvisor |
CPU, Memory, Disk, Network (container-level) | Standalone Web UI | Low | cAdvisor GitHub |
Node Exporter | Prometheus exporter for hardware and OS metrics. | prom/node-exporter |
CPU, Memory, Disk, Network | Integrated with Prometheus | Medium | Node Exporter GitHub |
Netdata | Real-time performance monitoring and visualization. | netdata/netdata |
CPU, Memory, Disk, Network, Processes | Standalone Web UI | Low | Netdata GitHub |
Elasticsearch | Search and analytics engine, part of ELK stack. | docker.elastic.co/elasticsearch/elasticsearch:7.17.9 |
N/A (depends on data ingested) | Kibana | High | Elasticsearch GitHub |
Logstash | Data processing pipeline for ingesting and transforming data, part of ELK stack. | docker.elastic.co/logstash/logstash:7.17.9 |
N/A (depends on data ingested) | N/A (feeds Elasticsearch) | High | Logstash GitHub |
Kibana | Visualization tool for Elasticsearch, part of ELK stack. | docker.elastic.co/kibana/kibana:7.17.9 |
N/A (depends on data source) | Customizable dashboards | High | Kibana GitHub |
Metricbeat | Lightweight shipper for collecting and shipping system and service metrics to Elasticsearch. | docker.elastic.co/beats/metricbeat:7.17.9 |
CPU, Memory, Disk, Network, Processes | Kibana | Medium | Metricbeat GitHub |
Prometheus and Grafana are commonly used together to collect and visualize metrics.
Docker Compose Setup:
version: '3'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
cAdvisor is useful for monitoring Docker containers' resource usage.
Docker Compose Setup:
version: '3'
services:
cadvisor:
image: google/cadvisor
ports:
- "8080:8080"
volumes:
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
Node Exporter works with Prometheus to collect hardware and OS metrics.
Docker Compose Setup:
version: '3'
services:
node-exporter:
image: prom/node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
Netdata provides real-time monitoring with a built-in web interface.
Docker Compose Setup:
version: '3'
services:
netdata:
image: netdata/netdata
ports:
- "19999:19999"
cap_add:
- SYS_PTRACE
security_opt:
- apparmor=unconfined
volumes:
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
The ELK stack combined with Metricbeat provides a comprehensive logging and monitoring solution.
Docker Compose Setup:
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.9
container_name: elasticsearch
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
logstash:
image: docker.elastic.co/logstash/logstash:7.17.9
container_name: logstash
ports:
- "5044:5044"
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
kibana:
image: docker.elastic.co/kibana/kibana:7.17.9
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
metricbeat:
image: docker.elastic.co/beats/metricbeat:7.17.9
container_name: metricbeat
user: root
volumes:
- /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
- /proc:/hostfs/proc:ro
- /:/hostfs:ro
- ./metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
volumes:
esdata:
Logstash Configuration (logstash.conf):
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
Metricbeat Configuration (metricbeat.yml):
metricbeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
setup.kibana:
host: "http://kibana:5601"
Metricbeat System Module Configuration (modules.d/system.yml):
- module: system
period: 10s
metricsets:
- cpu
- load
- memory
- network
- process
- process_summary
- diskio
- filesystem
- fsstat
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- Grafana: Navigate to
http://localhost:3000
to access Grafana. - cAdvisor: Navigate to
http://localhost:8080
to access cAdvisor. - Netdata: Navigate to
http://localhost:19999
to access Netdata. - Kibana: Navigate to
http://localhost:5601
to access Kibana.
These tools provide robust monitoring solutions for various needs and setups, ensuring you have visibility into your server's performance metrics and application logs.