dockerdocker-composeyamlprometheuscadvisor

Set up Prometheus and Cadvisor with docker-compose


i am new to prometheus , cadvisor and docker-compose. i made a docker-compose file including my own created application named chat, with a mongo container. those work fine. now i want to monitor my containers with prometheus and cadvisor. im getting following errors:

cadvisor      | W0419 11:41:00.576916       1 sysinfo.go:203] Nodes topology is not available, providing CPU topology
cadvisor      | W0419 11:41:00.577437       1 sysfs.go:348] unable to read /sys/devices/system/cpu/cpu0/online: open /sys/devices/system/cpu/cpu0/online: no such file or directory
cadvisor      | E0419 11:41:00.582000       1 info.go:114] Failed to get system UUID: open /etc/machine-id: no such file or directory

and

prometheus    | ts=2022-04-19T11:54:19.051Z caller=main.go:438 level=error msg="Error loading config (--config.file=/etc/prometheus/prometheus.yml)" file=/etc/prometheus/prometheus.yml err="parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal errors:\n  line 2: field scrape-interval not found in type config.plain"

i tryed to change the config parameter from my docker-compose into, but it dont changed the error:

    command:
      - '--config.file=./prometheus/prometheus.yml'

docker-compose.yml:

version : '3.7'
services:
  chat-api:
    container_name: chat-api
    build:
      context: .
      dockerfile: ./Dockerfile 
    ports: 
      - '4000:4000'
    networks:
      - cchat
    restart: 'on-failure'
  userdb:
    image: mongo:latest 
    container_name: mongodb
    volumes:
      - userdb:/data/db
    networks:
      - cchat 
  prometheus: 
    image: prom/prometheus:latest
    container_name: prometheus 
    restart: always 
    volumes: 
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - '9080:9080'
    networks:
      - cloudchat
  cadvisor: 
    image: gcr.io/cadvisor/cadvisor:latest 
    container_name: cadvisor 
    restart: always 
    volumes: 
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
    devices:
      - /dev/kmsg:/dev/kmsg
    depends_on:
      - chat-api
    networks:
      - cchat


volumes:
  userdb:
networks:
  cchat:  

prometheus.yml:

global: 
  scrape-interval: 2s 

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

project structure: picture of project structure


Solution

  • I guess it's quite late but you can try mounting /etc/machine-id:/etc/machine-id:ro. Running in privileged mode could help too. This is my configuration which is working without problems:

      cadvisor:
        image: gcr.io/cadvisor/cadvisor:v0.47.0
        container_name: cadvisor
        restart: unless-stopped
        privileged: true
        ports:
          - "8080:8080"
        volumes:
          - /:/rootfs:ro
          - /var/run:/var/run:ro
          - /sys:/sys:ro
          - /var/lib/docker/:/var/lib/docker:ro
          - /dev/disk/:/dev/disk:ro
    

    Some important note, don't use latest it seems it's not the latest version (source: https://github.com/google/cadvisor/issues/3066).