157 lines
4.3 KiB
YAML
157 lines
4.3 KiB
YAML
---
|
|
- 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 |