Модуль 20 / 24
Observability і діагностика
Зміст
1. Цілі та результат модуля
Після модуля ви зберете logs, events і metrics, пов’яжете task failure з reconciliation та визначите alerts для replicas, restarts, disk і HTTP.
- починати з desired/actual state
- корелювати service, task, node і time
- розділяти симптоми та причини
- перевіряти зовнішню доступність
2. Теорія: сигнали спостережуваності
Metrics показують числовий стан, logs пояснюють роботу, events фіксують зміни, traces пов’язують request. CLI допомагає local diagnostics, а history та alerting потребують collector.
Manager знає desired state і history, Engine — containers і resources, proxy — зовнішній результат. Потрібні всі рівні.
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.
4. Кореляція та retention
Використовуйте UTC, service ID, task ID, node та container ID. Task history містить replacements, events мають обмежене window.
Обмежуйте json-file logs, задавайте retention, уникайте high cardinality. Secrets не пишуть до logs.
5. Методичні вказівки
- Зніміть baseline
- Створіть traffic
- Оберіть node за placement
- Порахуйте errors
- Зіставте exit code, event і task
- Перевірте desired дорівнює running
6. Лабораторна робота: baseline
Зафіксуйте nodes, replicas, task history і policies.
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}}'7. Лабораторна робота: logs
Створіть п’ять requests і знайдіть їх у service та proxy logs.
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 traefik8. Лабораторна робота: resources
Перевірте кожен node, containers, disk і reclaimable data.
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-pager9. Лабораторна робота: failure correlation
Оберіть node з task, завершіть container і виконайте 30 HTTPS-запитів. Знайдіть exit 137, events і replacement.
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 15ssh 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. Контроль, критерії засвоєння та cleanup
- Де видно desired state?
- Чим events відрізняються від logs?
- Чому stats недостатньо для trend?
- Що означає exit 137?
- Чому mismatch важливий?
- Які поля потрібні alert?
Модуль засвоєно, якщо kill, die, failed task і replacement пов’язані, HTTP failures нуль, desired дорівнює running. Cleanup видаляє event file; service зберігається.
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/