6. Почему нужно уметь разбираться с проблемами сервисов?
!
• Одна из основных задач системных администраторов
• Улучшить понимание работы ОС и сервиса
• Получить идеи оптимизации сервиса
• Безысходность
6
Мотивация
7. Почему эта часть работы не должна существовать?
!
• Тесты
• Не существует проблем в сети
• Не существует проблем с ресурсами
• Идеальный код
7
Демотивация
8. • Знать свой shell
• Освоить командные утилиты для обработки текста (grep, awk)
• Иметь представление о принципах работы ОС и сетей
• Знать скриптовый язык программирования (python, perl)
8
Полезные умения
9. • Работающий мониторинг
• Знание принципов работы сервисов
• Знание парка машин
9
Всегда готов - стандартные ситуации
10. • Бэкапы логов
• Быстрый откат к предыдущей(-им) конфигурации(-ям)
• Возможность оставить несколько инстансов в проблемном
состоянии для исследования
10
Всегда готов - пожар
12. • Информация о состоянии сервиса в реальном времени
• Дать понимание состояния сервиса в целом (запросы, неудачи,
время ответа и т.п.)
• Дать понимание состояния конкретных машин (потребление
CPU, памяти, сетевая и дисковая активности)
• Дать понимание работы сети на машинах, в роутерах и т.п.
• Исторические данные - тренды
• Количественный и качественный мониторинг
12
Задачи мониторинга
13. • Nagios
• Zabbix
• Cacti
• Ganglia
• Своё
13
Системы мониторинга
15. • Процентили - 50, 90, 95.
• Максимальные и минимальные значения
• Выбросы
• И всё это уметь соотносить со временем релиза (CI)
15
Объекты мониторинга
20. • Быстрое понимание того, что произошло что-то нехорошее
• Быстрое понимание того, где произошло что-то нехорошее
• Возможность отличить общесистемную проблему от проблемы
на ограниченном подмножестве серверов
20
Что даёт мониторинг
27. • Всё ещё не говорят, что сломалось
• Могут навести на неправильные мысли. Например, при
поломке DNS будет казаться, что потерялась связность
• ICMP может быть заблокирован правилами firewall (или опять
обманывать про связность)
27
Грубые инструменты - недостатки
28. • netstat -i - список интерфейсов
• netstat -r - таблица маршрутизации
• netstat -b <interval> - in/out пакеты на интерфейсе
• netstat -d <interval> - drop пакетов
• netstat -Latn - listen queue для слушающих tcp сокетов
• netstat -qI eth0 - статистика очередей на интерфейсе
28
netstat
29. Программа tcpdump - это швейцарский нож, который покажет все
проблемы с сетью.
Синтаксис:
tcpdump -i <interface> [options] <expression>
expression - выражение, фильтрующее пакеты
29
Швейцарский нож - tcpdump
30. • tcpdump -i eth0 tcp port 80
• tcpdump -i eth0 -n tcp port 80
• tcpdump -i en1 tcp port 443 and host ssllabs.com
• tcpdump -i eth0 ‘host ssllabs.com and (tcp port 80 or tcp port 443)’
• А также UDP, (R)ARP, ICMP и тысячи других
30
tcpdump - примеры
31. Кроме собственно tcpdump есть вспомогательные программы
• wireshark - GUI над tcpdump. Другой синтаксис фильтров
(tcp.port == 80 против tcp port 80).
• tshark - пакетная обработка pcap-файла
31
wireshark tcpdump
32. • Общение - удаётся ли переходить между состояниями tcp
• Потери пакетов (ретрансмиты)
• Время, затрачиваемое каждым из участников общения
• Какими порциями происходит передача данных
• Опции tcp: maximum segment size и прочие
• Сопоставлять с логами сервиса
• Различия восприятия передачи клиентом и сервером
32
На что смотреть
34. • ps - %CPU, %MEM, VSS, RSS, SHR
• top (htop) - на машине, realtime
• uptime
• /proc/meminfo
• /proc/cpuinfo
34
Смотрим процессы ОС
35. • Стандартные места - /var/log/
• Сервис-специфичные места (/usr/local/www/logs)
• Системные - dmesg, /var/log/messages
• lsof - потому что все врут
• /proc/<pid>
35
Логи и где их искать
36. • Факт записи coredump’а можно поискать в dmesg’е
• ulimit -c
• sysctl kernel.core_pattern
%p - pid
%s - номер сигнала
%t - timestamp
%e - название программы
%h - hostname
36
Coredump
44. Показывает утилизацию система ввода-вывода, процессора и
памяти.
hint: печатайте ещё и текущее время
perl -ne «print scalar localtime(), ‘ ‘, $_;» | vmstat 1
44
vmstat
46. • procs: r - в state: running, b - заблокировнные
• memory: free, buff, cache
• swap: si - swap in, so - swap out
• io: bi - block in, bo - block out
• system:in - interrupts, cs - context switches
• cpu: us - user, sy - system, id - idle, wa - waiting on io
46
Расшифровка