Grafana and Prometheus are two popular tools for monitoring infrastructure. They work together really well and produce really nice visuals. We’ll aim for a minimal setup so you can get started quickly and expand as you need. We’ll create the following components:
- Grafana: A tool to create dashboards and visualise data. It doesn’t by itself collect data but can connect to various data sources.
- Prometheus: A monitoring tool that collects metrics from various sources. It can be used to monitor servers, containers, and other services.
- A prometheus.yml file: This file will define the targets that Prometheus will scrape for metrics.
In a single directory called monitoring
, let’s first create the compose.yaml
file:
# compose.yaml
services:
grafana:
image: grafana/grafana:latest
restart: unless-stopped
volumes:
- grafana_data:/var/lib/grafana
ports:
- 3000:3000
environment:
- GF_SERVER_ROOT_URL=http://example.com # Change this to your domain if accessing from outside
deploy:
resources:
limits:
cpus: '0.5'
memory: 1gb
prometheus:
image: prom/prometheus:latest
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
deploy:
resources:
limits:
cpus: '0.5'
memory: 1gb
volumes:
grafana_data:
prometheus_data:
Note that we are not exposing Prometheus to the outside world. We’ll use Grafana to access Prometheus. We’ll also create a prometheus.yml
file in the same directory:
global:
scrape_interval: 15s
scrape_configs:
# This is telling prometheus to scrape itself
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
# Add more jobs here
Now, let’s start the services:
docker-compose up -d
And that’s it! You can now access Grafana at http://localhost:3000
, you need to:
- Login with the default credentials:
admin
andadmin
. - Change the admin password.
- Add Prometheus as a data source. Use
http://prometheus:9090
as the URL. - Create a dashboard and add panels.
If you would like to monitor statistics like CPU usage on your host machine you can use Node Exporter which is a Prometheus exporter for hardware and OS metrics exposed by *nix kernels.
For standard services you can find pre-built dashboards on Grafana’s website. You can also create your own dashboards which is the ultimate goal but don’t get intimidated by the process. Start with a single panel focusing on a single metric and expand from there.