D9.2 Node Exporter & cAdvisor 📡

Node Exporter — Host metrics

Ο node_exporter συλλέγει host-level metrics (CPU, RAM, disk, network):

tasks:

  - name: "📡 Node Exporter container"
    community.docker.docker_container:
      name:            node_exporter
      image:           "prom/node-exporter:v1.7.0"
      state:           started
      restart_policy:  unless-stopped
      network_mode:    host          # ← host network για network metrics
      pid_mode:        host          # ← host PID για process metrics
      user:            "65534:65534" # ← nobody (non-root)
      read_only:       true
      security_opts:   ["no-new-privileges:true"]
      cap_drop:        [ALL]
      volumes:
        - "/:/host:ro,rslave"        # ← read-only host filesystem
        - "/sys:/host/sys:ro,rslave"
        - "/proc:/host/proc:ro,rslave"
      command:
        - "--path.rootfs=/host"
        - "--path.procfs=/host/proc"
        - "--path.sysfs=/host/sys"
        - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
        - "--web.listen-address=:9100"
      labels:
        monitoring: prometheus
        managed-by: ansible

cAdvisor — Container metrics

Το cAdvisor συλλέγει container-level metrics (CPU, RAM, network ανά container):

tasks:

  - name: "📊 cAdvisor container"
    community.docker.docker_container:
      name:            cadvisor
      image:           "gcr.io/cadvisor/cadvisor:v0.49.0"
      state:           started
      restart_policy:  unless-stopped
      privileged:      true          # ← χρειάζεται για container metrics
      volumes:
        - "/:/rootfs:ro"
        - "/var/run:/var/run:ro"
        - "/sys:/sys:ro"
        - "/var/lib/docker/:/var/lib/docker:ro"
        - "/dev/disk/:/dev/disk:ro"
      ports:
        - "127.0.0.1:8080:8080"    # ← localhost only!
      command:
        - "--housekeeping_interval=10s"
        - "--max_housekeeping_interval=15s"
        - "--store_container_labels=false"
        - "--disable_metrics=accelerator,cpu_topology,disk,memory_numa,tcp,udp,percpu,sched,process,hugetlb,referenced_memory,resctrl,cpuset,advtcp,memory_numa"
      labels:
        monitoring: prometheus
        managed-by: ansible

💡 Χρήσιμες metrics από cAdvisor:

container_cpu_usage_seconds_total    → CPU χρήση
container_memory_usage_bytes         → RAM χρήση
container_network_receive_bytes_total → Network in
container_network_transmit_bytes_total → Network out
container_fs_usage_bytes             → Disk χρήση

Deploy σε όλους τους managed hosts

---
# deploy-exporters.yml

- name: Deploy Monitoring Exporters
  hosts: all_managed    # ← ΟΛΑ τα managed hosts
  become: true
  gather_facts: false

  vars:
    node_exporter_version: "v1.7.0"
    cadvisor_version:      "v0.49.0"

  tasks:

    - name: "📡 Node Exporter"
      community.docker.docker_container:
        name:           node_exporter
        image:          "prom/node-exporter:{{ node_exporter_version }}"
        state:          started
        restart_policy: unless-stopped
        network_mode:   host
        pid_mode:       host
        user:           "65534:65534"
        read_only:      true
        security_opts:  ["no-new-privileges:true"]
        cap_drop:       [ALL]
        volumes:
          - "/:/host:ro,rslave"
        command:
          - "--path.rootfs=/host"
          - "--web.listen-address=:9100"
        labels:
          monitoring: prometheus

    - name: "📊 cAdvisor"
      community.docker.docker_container:
        name:           cadvisor
        image:          "gcr.io/cadvisor/cadvisor:{{ cadvisor_version }}"
        state:          started
        restart_policy: unless-stopped
        privileged:     true
        ports:
          - "127.0.0.1:8080:8080"
        volumes:
          - "/:/rootfs:ro"
          - "/var/run:/var/run:ro"
          - "/sys:/sys:ro"
          - "/var/lib/docker/:/var/lib/docker:ro"
        labels:
          monitoring: prometheus

Σύνοψη D9.2

Exporters
│
├── node_exporter (:9100):
│   ├── Host metrics (CPU, RAM, disk, network)
│   ├── network_mode: host (για net metrics)
│   ├── pid_mode: host (για process metrics)
│   └── volumes: /:/host:ro (read-only)
│
└── cAdvisor (:8080):
    ├── Container metrics (per-container)
    ├── privileged: true (απαιτείται)
    └── Εγκαθίσταται σε ΟΛΟΥΣ τους hosts