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)