fix(observability): cAdvisor 0.55.1 — 0.52 не видит контейнеры на Docker 29
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
#3108 не починил пустые панели по контейнерам, и правило relabel там было ни при чём. Настоящая причина глубже: Docker 29 на обоих хостах работает через containerd-snapshotter (Storage Driver = overlayfs), а cAdvisor 0.52 ищет метаданные слоя в легаси-хранилище: failed to identify the read-write layer ID for container "<id>" - open /rootfs/var/lib/docker/image/overlayfs/layerdb/mounts/<id>/mount-id: no such file or directory При снапшоттере этого каталога нет вовсе — в /var/lib/docker/image/ лежит только identity-cache.db, метаданные слоёв живут в containerd. Обработчик контейнера не создаётся, и наружу уходит ровно один ряд: корневой cgroup container_last_seen{id="/"}. Отсюда и «нодата» на панелях контейнеров при живых node/postgres/app метриках. 0.55.1 умеет читать containerd-снапшоттер. Проверено пробами с ПРОДОВЫМИ флагами на обоих хостах (одноразовые контейнеры, убраны за собой): Beget (Docker 29.4.1): 22 ряда, все с name=, ошибок rw-layer 0 Poincare (Docker 29.7.2): 23 ряда, все с name=, ошибок rw-layer 0 Примеры рядов — name="gendesign-alloy", name="gendesign-backend-1", name="gendesign-osrm-1", с лейблом image. То есть именно то, чего не хватало панелям. Заодно поправлен комментарий, который я же вписал в cadvisor_trim в #3108: он объяснял пустые панели трактовкой пустого regex, а это оказалось неверно. Правило корректно и остаётся (корневой ряд приходит с name="" и должен отсеиваться), но объяснение рядом с ним вводило в заблуждение. Почему тег .1, а не .0: в реестре нет ни v0.53.0, ни v0.54.0, ни v0.55.0 — только v0.54.1 и v0.55.1. Проверял по списку тегов, а не подбором. Проверки: yaml.safe_load compose — ok; alloy fmt обоих .alloy в grafana/alloy:v1.6.1 — exit 0.
This commit is contained in:
parent
fe8b022ce5
commit
a72d39d74d
3 changed files with 19 additions and 9 deletions
|
|
@ -116,7 +116,11 @@ services:
|
|||
# Читает докер-сокет, поэтому видит ВСЕ контейнеры хоста независимо от сетей —
|
||||
# отдельно подключать его к gendesign_default не нужно.
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:v0.52.1
|
||||
# v0.55.1, не v0.52.x: Docker 29 работает через containerd-snapshotter
|
||||
# (Storage Driver = overlayfs), а 0.52 искал метаданные слоя в легаси
|
||||
# /var/lib/docker/image/<driver>/layerdb, которого при снапшоттере
|
||||
# просто нет. Итог был — ни одной метрики по контейнерам.
|
||||
image: gcr.io/cadvisor/cadvisor:v0.55.1
|
||||
container_name: gendesign-cadvisor
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
|
|
|
|||
|
|
@ -92,10 +92,13 @@ prometheus.relabel "cadvisor_trim" {
|
|||
action = "keep"
|
||||
}
|
||||
|
||||
// Служебные контейнеры docker без имени только зашумляют графики.
|
||||
// keep .+ вместо drop с пустым regex: в Alloy незаданный regex
|
||||
// документированно дефолтится в (.*), а пустая строка неотличима от
|
||||
// незаданного значения — такой drop рискует выкинуть вообще все ряды.
|
||||
// Служебные ряды без имени (корневой cgroup, id="/") только зашумляют графики.
|
||||
// keep .+ вместо drop с пустым regex — та же мысль, но без зависимости от
|
||||
// трактовки пустого regex: в Alloy он неотличим от незаданного, а незаданный
|
||||
// дефолтится в (.*).
|
||||
//
|
||||
// NB: на пустые панели это правило НЕ влияло. Причина была в cAdvisor 0.52 на
|
||||
// Docker 29 — до сюда доезжал ровно один ряд, корневой. Лечится версией 0.55.1.
|
||||
rule {
|
||||
source_labels = ["name"]
|
||||
regex = ".+"
|
||||
|
|
|
|||
|
|
@ -63,10 +63,13 @@ prometheus.relabel "cadvisor_trim" {
|
|||
action = "keep"
|
||||
}
|
||||
|
||||
// Служебные контейнеры docker без имени только зашумляют графики.
|
||||
// keep .+ вместо drop с пустым regex: в Alloy незаданный regex
|
||||
// документированно дефолтится в (.*), а пустая строка неотличима от
|
||||
// незаданного значения — такой drop рискует выкинуть вообще все ряды.
|
||||
// Служебные ряды без имени (корневой cgroup, id="/") только зашумляют графики.
|
||||
// keep .+ вместо drop с пустым regex — та же мысль, но без зависимости от
|
||||
// трактовки пустого regex: в Alloy он неотличим от незаданного, а незаданный
|
||||
// дефолтится в (.*).
|
||||
//
|
||||
// NB: на пустые панели это правило НЕ влияло. Причина была в cAdvisor 0.52 на
|
||||
// Docker 29 — до сюда доезжал ровно один ряд, корневой. Лечится версией 0.55.1.
|
||||
rule {
|
||||
source_labels = ["name"]
|
||||
regex = ".+"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue