DEV Community

Cover image for Deploying Prometheus Metrics Collection Server on Ubuntu 24.04
Sanskriti Harmukh for Vultr

Posted on with Aashish Chaurasiya Originally published at docs.vultr.com

Deploying Prometheus Metrics Collection Server on Ubuntu 24.04

Prometheus is an open-source systems monitoring and alerting toolkit that scrapes targets over HTTP and stores time-series metrics in a local TSDB. It exposes a powerful query language (PromQL) and pairs natively with Grafana for visualization. This guide deploys Prometheus using Docker Compose with Traefik handling automatic HTTPS, and verifies the server via a sample scrape config. By the end, you'll have Prometheus collecting and serving metrics over HTTPS at your domain.


Set Up the Directory Structure

1. Create the project directory structure:

$ mkdir -p ~/prometheus-monitoring/{prometheus-data,prometheus-config}
$ cd ~/prometheus-monitoring
Enter fullscreen mode Exit fullscreen mode

2. Set ownership for the Prometheus data directory:

$ sudo chown -R 65534:65534 prometheus-data
Enter fullscreen mode Exit fullscreen mode

3. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
DOMAIN=prometheus.example.com
LETSENCRYPT_EMAIL=admin@example.com
Enter fullscreen mode Exit fullscreen mode

4. Create the Prometheus configuration file:

$ nano prometheus-config/prometheus.yml
Enter fullscreen mode Exit fullscreen mode
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
Enter fullscreen mode Exit fullscreen mode

Deploy with Docker Compose

1. Create the Docker Compose manifest:

$ nano docker-compose.yaml
Enter fullscreen mode Exit fullscreen mode
services:
  traefik:
    image: traefik:v3.6
    container_name: traefik
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: unless-stopped

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    hostname: prometheus
    expose:
      - "9090"
    volumes:
      - "./prometheus-config/prometheus.yml:/etc/prometheus/prometheus.yml"
      - "./prometheus-data:/prometheus"
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.prometheus.rule=Host(`${DOMAIN}`)"
      - "traefik.http.routers.prometheus.entrypoints=websecure"
      - "traefik.http.routers.prometheus.tls.certresolver=letsencrypt"
      - "traefik.http.services.prometheus.loadbalancer.server.port=9090"
    restart: unless-stopped

volumes:
  letsencrypt:
Enter fullscreen mode Exit fullscreen mode

2. Start the services:

$ docker compose up -d
Enter fullscreen mode Exit fullscreen mode

3. Verify the services are running:

$ docker compose ps
Enter fullscreen mode Exit fullscreen mode

4. View the logs:

$ docker compose logs
Enter fullscreen mode Exit fullscreen mode

Access Prometheus

Open https://prometheus.example.com in a browser. Try a basic PromQL query in the expression bar to confirm scraping:

  • up — scrape status of every target
  • process_cpu_seconds_total — Prometheus's own CPU usage
  • process_resident_memory_bytes — Prometheus's own memory usage

Next Steps

Prometheus is running and scraping metrics over HTTPS. From here you can:

  • Add scrape targets for your application, node exporters, and infrastructure
  • Connect Prometheus as a data source in Grafana for dashboards
  • Configure alerting rules and route them through Alertmanager

For the full guide with additional tips, visit the original article on Vultr Docs.

Top comments (0)