Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Deploy Prometheus With Docker

Create Prometheus Config

Create a file called prometheus.yml with the following contents:

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']

... or run the following command to download the example from Github.

wget https://raw.githubusercontent.com/prometheus/prometheus/master/documentation/examples/prometheus.yml

Create Data Volume Directory

Now we need to create a directory that will act as a volume for our Prometheus container. That way all state will persist across reboots.

mkdir $HOME/prometheus-data
chmod 777 $HOME/prometheus-data

I don't like having to set permissions to 777 on the directory, but that is the only way I could get it to work (for now).

Deploy!

Now run the following container to deploy your prometheus service:

docker run \
  -p 80:9090 \
  --volume $HOME/prometheus.yml:/etc/prometheus/prometheus.yml \
  --volume $HOME/prometheus-data:/prometheus \
  prom/prometheus

I map the default port of 9090 to port 80 so that I don't have to enter a port number into my browser URL, but you may wish to change it back to 9090.

Conclusion

You now have a prometheus server deployed. Later we will learn how to deploy an exporter to "scrape" from, and how to add authentication.

Last updated: 22nd January 2020
First published: 22nd January 2020

This blog is created by Stuart Page

I'm a freelance web developer and technology consultant based in Surrey, UK, with over 10 years experience in web development, DevOps, Linux Administration, and IT solutions.

Need support with your infrastructure or web services?

Get in touch