← До програми курсу

Модуль 20 / 24

Observability і діагностика

DOCKER SWARM

Зміст
01

1. Цілі та результат модуля

Після модуля ви зберете logs, events і metrics, пов’яжете task failure з reconciliation та визначите alerts для replicas, restarts, disk і HTTP.

  • починати з desired/actual state
  • корелювати service, task, node і time
  • розділяти симптоми та причини
  • перевіряти зовнішню доступність
02

2. Теорія: сигнали спостережуваності

Metrics показують числовий стан, logs пояснюють роботу, events фіксують зміни, traces пов’язують request. CLI допомагає local diagnostics, а history та alerting потребують collector.

Manager знає desired state і history, Engine — containers і resources, proxy — зовнішній результат. Потрібні всі рівні.

03

3. SLI та alerts

Контролюйте available replicas, restart rate, HTTP success/latency, CPU, memory і disk. Alert має condition, duration, severity і runbook.

Replica mismatch зменшує fault budget без HTTP errors. Disk pressure загрожує images, logs і Raft.

04

4. Кореляція та retention

Використовуйте UTC, service ID, task ID, node та container ID. Task history містить replacements, events мають обмежене window.

Обмежуйте json-file logs, задавайте retention, уникайте high cardinality. Secrets не пишуть до logs.

05

5. Методичні вказівки

  • Зніміть baseline
  • Створіть traffic
  • Оберіть node за placement
  • Порахуйте errors
  • Зіставте exit code, event і task
  • Перевірте desired дорівнює running
06

6. Лабораторна робота: baseline

Зафіксуйте nodes, replicas, task history і policies.

terminal
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker service ps --no-trunc swarm-ingress-demo
ssh swarm-manager-3 docker service inspect swarm-ingress-demo --format 'desired={{.Spec.Mode.Replicated.Replicas}} restart={{json .Spec.TaskTemplate.RestartPolicy}} update={{json .Spec.UpdateConfig}}'
07

7. Лабораторна робота: logs

Створіть п’ять requests і знайдіть їх у service та proxy logs.

terminal
for n in 1 2 3 4 5; do curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/; done
ssh swarm-manager-3 docker service logs --since 2m --timestamps --raw swarm-ingress-demo
docker logs --since 2m traefik
08

8. Лабораторна робота: resources

Перевірте кожен node, containers, disk і reclaimable data.

terminal
for host in swarm-manager-1 swarm-manager-2 swarm-manager-3; do ssh "$host" hostname; ssh "$host" docker stats --no-stream; ssh "$host" df -h / /var/lib/docker; ssh "$host" docker system df; done
ssh swarm-manager-3 sudo journalctl -u docker --since '10 minutes ago' --no-pager
09

9. Лабораторна робота: failure correlation

Оберіть node з task, завершіть container і виконайте 30 HTTPS-запитів. Знайдіть exit 137, events і replacement.

terminal
target=$(ssh swarm-manager-3 docker service ps --filter desired-state=running --format '{{.Node}}' swarm-ingress-demo | head -1)
ssh "$target" 'id=$(docker ps -q --filter label=com.docker.swarm.service.name=swarm-ingress-demo | head -1); test -n "$id"; docker kill "$id"'
failures=0
for n in $(seq 1 30); do curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/ || failures=$((failures+1)); done
printf 'http_failures=%s\n' "$failures"
sleep 15
terminal
ssh swarm-manager-3 docker service ps --no-trunc swarm-ingress-demo
ssh swarm-manager-3 docker events --since 10m --until 0s --filter type=container --filter label=com.docker.swarm.service.name=swarm-ingress-demo
ssh swarm-manager-3 sudo journalctl -u docker --since '10 minutes ago' --no-pager
desired=$(ssh swarm-manager-3 docker service inspect swarm-ingress-demo --format '{{.Spec.Mode.Replicated.Replicas}}')
running=$(ssh swarm-manager-3 docker service ps --filter desired-state=running --format '{{.ID}}' swarm-ingress-demo | wc -l)
test "$desired" -eq "$running"
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/
  • немає replacement — scheduler і capacity
  • HTTP errors — ingress і readiness
  • events порожні — node або time window
  • disk росте — rotation і retention
10

10. Контроль, критерії засвоєння та cleanup

  • Де видно desired state?
  • Чим events відрізняються від logs?
  • Чому stats недостатньо для trend?
  • Що означає exit 137?
  • Чому mismatch важливий?
  • Які поля потрібні alert?

Модуль засвоєно, якщо kill, die, failed task і replacement пов’язані, HTTP failures нуль, desired дорівнює running. Cleanup видаляє event file; service зберігається.

terminal
ssh swarm-manager-3 rm -f /tmp/swarm-m20-events
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker node ls
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/