--- - name: Install Docker dependencies apt: name: - apt-transport-https - ca-certificates - curl - gnupg - lsb-release state: present update_cache: yes - name: Add Docker GPG key apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: Add Docker repository apt_repository: repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" state: present - name: Install Docker apt: name: - docker-ce - docker-ce-cli - containerd.io state: present update_cache: yes - name: Install Docker Compose apt: name: docker-compose-plugin state: present - name: Start and enable Docker service systemd: name: docker state: started enabled: yes - name: Wait for Docker to start pause: seconds: 5 - name: Verify Docker installation command: docker --version register: docker_version changed_when: false - name: Show Docker version debug: msg: "Docker version: {{ docker_version.stdout }}" - name: Verify Docker Compose installation command: docker compose version register: docker_compose_version changed_when: false - name: Show Docker Compose version debug: msg: "Docker Compose version: {{ docker_compose_version.stdout }}" - name: Setup Docker monitoring block: - name: Create scripts directory file: path: /opt/scripts state: directory mode: '0755' become: yes - name: Deploy Docker metrics script copy: content: | #!/bin/bash # Docker metrics script for Node Exporter textfile collector OUTFILE="/var/lib/node_exporter/textfile_collector/docker_metrics.prom" # Get container counts TOTAL_CONTAINERS=$(docker ps -a -q 2>/dev/null | wc -l) RUNNING_CONTAINERS=$(docker ps -q 2>/dev/null | wc -l) EXITED_CONTAINERS=$((TOTAL_CONTAINERS - RUNNING_CONTAINERS)) # Write metrics in Prometheus format cat << EOF > $OUTFILE # HELP docker_containers_total Total number of Docker containers # TYPE docker_containers_total gauge docker_containers_total $TOTAL_CONTAINERS # HELP docker_containers_running Number of running Docker containers # TYPE docker_containers_running gauge docker_containers_running $RUNNING_CONTAINERS # HELP docker_containers_exited Number of exited Docker containers # TYPE docker_containers_exited gauge docker_containers_exited $EXITED_CONTAINERS EOF dest: /opt/scripts/docker_metrics.sh mode: '0755' become: yes - name: Create systemd service for Docker metrics copy: content: | [Unit] Description=Docker metrics script After=docker.service [Service] User=root ExecStart=/opt/scripts/docker_metrics.sh dest: /etc/systemd/system/docker-metrics.service mode: '0644' become: yes - name: Create systemd timer for Docker metrics copy: content: | [Unit] Description=Run Docker metrics every 30 seconds [Timer] OnBootSec=1min OnUnitActiveSec=30s [Install] WantedBy=timers.target dest: /etc/systemd/system/docker-metrics.timer mode: '0644' become: yes - name: Ensure Node Exporter textfile directory exists file: path: /var/lib/node_exporter/textfile_collector state: directory owner: node_exporter group: node_exporter mode: '0755' become: yes - name: Enable and start Docker metrics timer systemd: name: docker-metrics.timer enabled: yes state: started daemon_reload: yes become: yes - name: Test Docker metrics script command: /opt/scripts/docker_metrics.sh register: metrics_test changed_when: false - name: Show Docker metrics test result debug: var: metrics_test.stdout