ci / test (push) Failing after 23s
kube-state-metrics (NodePort 30808) und ServiceAccount prometheus-infra (nur nodes/metrics) im Cluster; Prometheus auf infra liest kubelet/cAdvisor per TLS gegen die k3s-CA. Ziele per file_sd aus kubectl get nodes, cAdvisor auf die nötigen Reihen begrenzt. Dashboard "k3s – Pods" (Vorgabe nex), Alerts K3s* nur mit notify. Playbook monitoring-k3s.yml. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
105 lines
4.8 KiB
YAML
105 lines
4.8 KiB
YAML
# Scrape-Ziele. Die Labels an den GPU-Zielen (slot, docker_host, container, pve_node, vmid) landen in den
|
||
# Alerts und damit beim Healer.
|
||
# GPU-VMs (job node, gpu, llamacpp): file_sd, weil die DHCP-Adressen wechseln (D5). Die Dateien erzeugt
|
||
# platform/proxmox/scripts/monitoring-targets.py auf ops aus `tofu output -json gpu_vms` und der Registry;
|
||
# die Ansible-Rolle infra-stack kopiert sie nach /opt/knaster/infra/file_sd (im Container /etc/knaster-sd).
|
||
global:
|
||
scrape_interval: 30s
|
||
evaluation_interval: 30s
|
||
|
||
rule_files: [alerts.yml]
|
||
|
||
alerting:
|
||
alertmanagers:
|
||
- static_configs: [{targets: ["alertmanager:9093"]}]
|
||
|
||
scrape_configs:
|
||
- job_name: prometheus
|
||
static_configs: [{targets: ["localhost:9090"]}]
|
||
|
||
- job_name: alertmanager
|
||
static_configs: [{targets: ["alertmanager:9093"]}]
|
||
|
||
- job_name: knaster-router
|
||
metrics_path: /metrics
|
||
static_configs: [{targets: ["router:8080"]}]
|
||
|
||
# Ada-Rechner (Windows, D3): Anbindung über die Worker-Registry v2 (Task 6.4), bis dahin nicht erreichbar
|
||
- job_name: vllm
|
||
static_configs:
|
||
- targets: ["gpu-main:8000"]
|
||
labels: {slot: tier1-general, docker_host: gpu-main, container: vllm, pve_node: pve-ada, vmid: "201"}
|
||
- targets: ["gpu-flex:8000"]
|
||
labels: {slot: tier1-flex, docker_host: gpu-flex, container: vllm, pve_node: pve-ada, vmid: "202"}
|
||
|
||
# llama-server (--metrics) in den GPU-VMs (Task 6.1): Embedding 8081 und Rerank 8082 in gpu-pve44/46,
|
||
# Chat 8080 in gpu-pve48. Ziele aus monitoring-targets.py (Profile laut Inventar-Gruppe gpu_llamacpp).
|
||
- job_name: llamacpp
|
||
file_sd_configs: [{files: [/etc/knaster-sd/llamacpp.json]}]
|
||
|
||
# nvidia_gpu_exporter (nvidia-smi, auch für Maxwell/Pascal; DCGM kann Maxwell nicht) in jeder GPU-VM
|
||
- job_name: gpu
|
||
file_sd_configs: [{files: [/etc/knaster-sd/gpu.json]}]
|
||
|
||
# node_exporter in jeder GPU-VM; Labels werden für GpuXidError → Healer (VM-Neustart) gebraucht
|
||
- job_name: node
|
||
file_sd_configs: [{files: [/etc/knaster-sd/node.json]}]
|
||
|
||
# node_exporter im LXC infra selbst (Host-Netz des LXC)
|
||
- job_name: infra-node
|
||
static_configs:
|
||
- targets: ["host.docker.internal:9100"]
|
||
labels: {instance: infra}
|
||
|
||
# prometheus-pve-exporter: jeder Knoten liefert die Cluster-Sicht (cluster=1) und seine eigenen Werte (node=1).
|
||
# Alle fünf als Ziel, damit die Cluster-Sicht auch bei einem ausgefallenen Knoten bleibt (Dashboard wählt eine instance).
|
||
- job_name: proxmox
|
||
metrics_path: /pve
|
||
params: {module: [default], cluster: ["1"], node: ["1"]}
|
||
static_configs:
|
||
- {targets: ["192.168.100.210"], labels: {pve: pve44}}
|
||
- {targets: ["192.168.100.209"], labels: {pve: pve46}}
|
||
- {targets: ["192.168.100.212"], labels: {pve: pve48}}
|
||
- {targets: ["192.168.100.207"], labels: {pve: pve52}}
|
||
- {targets: ["192.168.100.214"], labels: {pve: pve61}}
|
||
relabel_configs:
|
||
- {source_labels: [__address__], target_label: __param_target}
|
||
- {source_labels: [__param_target], target_label: instance}
|
||
- {target_label: __address__, replacement: "pve-exporter:9221"}
|
||
|
||
# k3s (Task 6.5): kubelet direkt auf jedem Knoten (10250), TLS gegen die k3s-CA, Token des ServiceAccounts
|
||
# prometheus-infra (nur nodes/metrics). Ziele per file_sd aus `kubectl get nodes` (monitoring-targets.py auf ops).
|
||
# infra hat 4 GB RAM: von kubelet und cAdvisor nur die Reihen, die Dashboard „k3s – Pods“ und Alerts brauchen.
|
||
- job_name: kubelet
|
||
scheme: https
|
||
authorization: {credentials_file: /etc/knaster-k3s/token}
|
||
tls_config: {ca_file: /etc/knaster-k3s/ca.crt}
|
||
file_sd_configs: [{files: [/etc/knaster-sd/kubelet.json]}]
|
||
metric_relabel_configs:
|
||
- source_labels: [__name__]
|
||
regex: kubelet_running_pods|kubelet_running_containers|kubelet_volume_stats_(used|capacity)_bytes
|
||
action: keep
|
||
|
||
- job_name: cadvisor
|
||
scheme: https
|
||
metrics_path: /metrics/cadvisor
|
||
authorization: {credentials_file: /etc/knaster-k3s/token}
|
||
tls_config: {ca_file: /etc/knaster-k3s/ca.crt}
|
||
file_sd_configs: [{files: [/etc/knaster-sd/kubelet.json]}]
|
||
metric_relabel_configs:
|
||
- source_labels: [__name__]
|
||
regex: container_cpu_usage_seconds_total|container_memory_working_set_bytes|container_memory_rss|container_oom_events_total|container_network_(receive|transmit)_bytes_total
|
||
action: keep
|
||
# nur Pods (keine systemd-Slices, keine Docker-Container der Compose-Stacks)
|
||
- source_labels: [pod]
|
||
regex: ""
|
||
action: drop
|
||
# CPU/Speicher je Container: Pod-Summe und Pause-Container verwerfen (Netz gibt es nur je Pod)
|
||
- source_labels: [__name__, container]
|
||
regex: "container_(cpu|memory|oom)[^;]*;(POD)?"
|
||
action: drop
|
||
|
||
- job_name: kube-state-metrics
|
||
honor_labels: true # namespace/pod/node kommen aus den Metriken selbst
|
||
file_sd_configs: [{files: [/etc/knaster-sd/kube-state-metrics.json]}]
|