Deploying Prometheus With Docker
Introduction
This article is part of a series on setting up an end-to-end monitoring and alerting stack using Prometheus.
There are different ways you can use to deploy the Prometheus monitoring tool in your environment. One of the fastest ways to get started is to deploy it as a Docker container. This guide shows you how to quickly set up a minimal Prometheus on your laptop. You can then extend that setup to add a monitoring dashboard, alerting, and authentication.
Deploying Prometheus in a Docker Container
Basic Setup
Running Prometheus in Docker is very simple using this command
docker run -p 9000:9090 prometheus prom/prometheus:v3.0.0
This will pull and run the latest version (as of this writing) of Prometheus. You can access the Prometheus UI at localhost:9000. Note that the container port 9090 is forwarded to the localhost port 9000.
Useful Tip
The order in Docker commands where you have to map something in your local machine to something in the container is local-resource
:container-resource
. In the command above it's local-port
:container-port
. You
can see a similar example in the volume setup below.
Note that we will be stopping and starting the container many times during this tutorial. Once the container is stopped all storage and configuration inside it is gone. To get around this, we will move out the following to outside the container to our local machine, i.e., our laptop:
- Metrics storage location
- configuration file
Create a directory called prometheus and a config directory inside it
mkdir prometheus
cd
mkdir config
Separating the Configuration
Now create a file inside the config
directory called prometheus.yml
file and put this content inside it:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "alert_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
The prometheus.yml
file is also available online in the Prometheus repo. It's a bare-bones configuration that just
scrapes the Prometheus process itself for metrics and nothing more.
Be careful about YAML formatting. You can use an online tool like YAML Lint to format your YAML file.
Your directory will look like this:
code/prometheus > tree
.
└── config
└── prometheus.yml
1 directory, 1 file
Making the Data Storage Persistent
To make the metrics data persistent across container restarts, we will create a Docker volume:
docker volume create prometheus
Let us run our container again it so that it uses the two artifacts that we just created
docker run -p 9000:9090 -v /home/talonx/code/prometheus/config:/etc/prometheus -v /home/talonx/code/prometheus/data:/prometheus prom/prometheus:v3.0.0
Here, the config dir is mounted as /etc/prometheus
and the prometheus
volume as /prometheus
inside the running container. Prometheus assumes /etc/prometheus/prometheus.yml
as the default config file location and /prometheus
as the default data directory, so we don't have to do any further configuration here. Note that you have to provide the full paths of the directories here for the configuration path.
You can verify that this config is working by visiting the UI at http://localhost:9000. To verify that the data volume is working, do the following:
- Let the container run for 5 minutes.
- Stop the container.
- Start the container again.
- Visit the UI at http://localhost:9000/query and search for a metric, say,
process_cpu_seconds_total
. ClickExecute
and the select theGraph
tab. If the Docker volume is mounted correctly, you should be able to see metrics going back 5 minutes and more.
This completes our basic setup of a Prometheus container.
Further Configuration
You can make further changes to the configuration by editing the config/prometheus.yml
file and restarting your Prometheus container.
I recommend committing this file into your source code repository.
You can run the container in the background by using the -d
flag:
docker run -d -p 9000:9090 -v /home/talonx/code/prometheus/config:/etc/prometheus -v prometheus:/prometheus prom/prometheus:v3.0.0
Conclusion
Prometheus is an easy to setup metrics collection and monitoring tool. You can try it out using a Docker container. Using a container allows for rapid iteration of changing and testing your configuration. In other articles in this series, we will explore how to add authentication, external dashboards, and integrate Prometheus with other alerting systems.
References
- Prometheus 3.0.0 documentation
- Docker Container Management commands
- Docker Volume commands
- YAML Validator
Social share photo credits: Shubham Dhage on Unsplash