Docker Community Forums

Share and learn in the Docker community.

Looking For Advice for Setting up my Prometheus Stack

docker

(Cameron Rosier) #1

Hello, this is my first post here and I’m sure I’m doing something wrong so feel free to call me out.

Anyways, I’m attempting to create a one-command creation of my Prometheus Stack which consists of:

  • Prometheus
  • Alertmanager
  • Blackbox Exporter
  • A Web API I’ve created to interface with the above services

Each of these I currently have running in their own containers. I use the official latest images for the first three, and a custom docker image for the fourth (duh). The web api relies on the ability to interact with the configuration files for the other services and thus I’m attempting to set up a volume that would be shared between all four services.

I’m attempting to create a docker-compose file that builds the custom docker image for the api and pulls the images for the prometheus services. Additionally I try to create a volume that all four of them can access. Mind you, this is my first undertaking of a docker-compose project and I am also rather newbie at docker itself.

Here is my custom Dockerfile for the Web API

FROM private-repo.com/docker-java-python:1.0.12

#Install Git
RUN apk add --update \
  git

# working directory
WORKDIR /PrometheusWebAPI

# copy current directory into the container
ADD . /PrometheusWebAPI

# install requirements
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
RUN pip3 install elastic-apm[flask]

# clone prometheus configs and put them in the volume
RUN git clone http://github.privaterepo.com/PrivateOrg/PrometheusConfiguration.git /prom_data/

# make port 8000 available to the world outside
EXPOSE 5000

VOLUME ["prom_data"]

CMD ["gunicorn", "--config", "./gunicorn_conf.py", "wsgi:app"]

As you can see… I’ve attempted to clone the required configurations and place them into the volume

Here is my docker-compose.yml:

version: '3.2'

services:
  pwapi:
    build: .
    image: docker-pwapi:1.0.16
    restart: always
    volumes:
      - type: volume
        source: prom_data
        target: /data
        volume:
          nocopy: true
    ports:
      - "5000:5000"
    depends_on:
      - prometheus
      - alertmanager
      - blackbox-exporter

  prometheus:
    image: private-repo.com/prometheus:latest
    container_name: docker-prometheus
    restart: always
    volumes:
      - type: volume
        source: prom_data
        target: /data
        volume:
          nocopy: true
    ports:
      - "9090:9090"
  
  alertmanager:
    image: private-repo.com/alertmanager:latest
    container_name: docker-alertmanager
    restart: always
    volumes:
      - type: volume
        source: prom_data
        target: /data
        volume:
          nocopy: true
    ports:
      - "9093:9093"
  
  blackbox-exporter:
    image: private-repo.com/blackbox-exporter:latest
    container_name: docker-blackbox-exporter
    restart: always
    volumes:
      - type: volume
        source: prom_data
        target: /data
        volume:
          nocopy: true
    ports:
      - "9115:9115"
    
volumes:
  prom_data:

Can anyone guide me on the correct way to do this and maybe give me some pointers as to how I can achieve this? Thanks