infra: Compose-Stack mit Monitoring, ohne LiteLLM (Task 5.2)
ci / test (push) Successful in 28s

- deploy/compose/infra: Dienst litellm entfernt (D4), Router auf LITELLM_BASE_URL
  (appsrv08, Port noch offen), alle Images gepinnt, Grafana und pve-exporter
  ohne Profile, node-exporter für den LXC, Zustand über KNASTER_STATE_DIR
- Prometheus: GPU-VMs per file_sd (node, gpu), Proxmox-Knoten per IP, infra-node
- Grafana: Datasource und Dashboards provisioniert (grafana.com 10347, 1860,
  14574 sowie knaster-Übersicht)
- Alertmanager: n8n-Receiver nur vorbereitet (auskommentiert)
- Ansible: Rollen infra-stack und gpu-exporters, Playbooks monitoring.yml und
  monitoring-targets.yml, Skript monitoring-targets.py (tofu output → file_sd)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Rapp
2026-10-12 20:22:26 +02:00
co-authored by Claude Opus 5.5
parent fd48fd1c7f
commit bf7c137adf
22 changed files with 23101 additions and 66 deletions
@@ -0,0 +1,10 @@
# Monitoring-Exporter in den GPU-VMs (Task 5.2). Ziele erzeugt monitoring-targets.py als file_sd.
# node_exporter aus Ubuntu (24.04: 1.7.x), liest die Xid-Zähler aus dem Textfile-Verzeichnis (Rolle gpu-node)
gpu_exporters_textfile_dir: /var/lib/node_exporter/textfile
# nvidia_gpu_exporter (nvidia-smi statt DCGM/NVML: läuft auch mit Maxwell/Pascal), Port 9835
nvidia_gpu_exporter_version: "1.15.1"
# sha256 aus checksums.txt des Releases v1.15.1 (am 12.10.2026 gegen die Datei geprüft)
nvidia_gpu_exporter_sha256: 0dc8c2756c6853ec7e6a7c404b229d8f764443bef89f33e13b3c4278b309acd4
# ufw: nur eigene allow-Regeln hinzufügen (Kommentar knaster-monitoring), ufw nie ein- oder ausschalten
gpu_exporters_allow_from: 192.168.100.0/24
gpu_exporters_ports: [9100, 9835]
@@ -0,0 +1,4 @@
- name: restart node-exporter
ansible.builtin.service:
name: prometheus-node-exporter
state: restarted
@@ -0,0 +1,60 @@
# Bewusst getrennt von gpu-node: kein Treiber, kein Docker-Neustart, kein Reboot.
- name: node_exporter installieren (ohne Zusatz-Collectors)
ansible.builtin.apt:
name: prometheus-node-exporter
state: present
install_recommends: false
update_cache: true
cache_valid_time: 3600
- name: Textfile-Verzeichnis (Xid-Zähler aus gpu-xid-textfile.sh)
ansible.builtin.file:
path: "{{ gpu_exporters_textfile_dir }}"
state: directory
mode: "0755"
- name: node_exporter liest das Textfile-Verzeichnis
ansible.builtin.lineinfile:
path: /etc/default/prometheus-node-exporter
regexp: '^ARGS='
line: 'ARGS="--collector.textfile.directory={{ gpu_exporters_textfile_dir }}"'
notify: restart node-exporter
- name: node_exporter aktiv
ansible.builtin.service:
name: prometheus-node-exporter
state: started
enabled: true
- name: nvidia_gpu_exporter herunterladen (Prüfsumme fest)
ansible.builtin.get_url:
url: "https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v{{ nvidia_gpu_exporter_version }}/nvidia-gpu-exporter_{{ nvidia_gpu_exporter_version }}_linux_amd64.deb"
dest: "/var/cache/apt/archives/nvidia-gpu-exporter_{{ nvidia_gpu_exporter_version }}_linux_amd64.deb"
checksum: "sha256:{{ nvidia_gpu_exporter_sha256 }}"
mode: "0644"
- name: nvidia_gpu_exporter installieren
ansible.builtin.apt:
deb: "/var/cache/apt/archives/nvidia-gpu-exporter_{{ nvidia_gpu_exporter_version }}_linux_amd64.deb"
- name: nvidia_gpu_exporter aktiv
ansible.builtin.service:
name: nvidia_gpu_exporter
state: started
enabled: true
- name: Ist ufw vorhanden?
ansible.builtin.stat:
path: /usr/sbin/ufw
register: ufw_bin
# Regeln wirken auch bei inaktivem ufw (werden vorgemerkt). Fremde Regeln bleiben unberührt.
- name: ufw – Exporter-Ports aus dem LAN erlauben
community.general.ufw:
rule: allow
src: "{{ gpu_exporters_allow_from }}"
port: "{{ item | string }}"
proto: tcp
comment: knaster-monitoring
loop: "{{ gpu_exporters_ports }}"
when: ufw_bin.stat.exists