16 января 2020, 18:02

Определения
Единого словарного запаса используемого для обсуждения тем, связанных с мониторингом не существует. Даже в Google, приведённые ниже термины не являются общеупотребительными, но мы перечислим наиболее распространенные интерпретации.Мониторинг
Сбор, обработка, агрегирование и отображение количественных данных в реальном времени о системе: количество запросов и типы запросов, количество ошибок и типы ошибок, время обработки запроса и время работы сервера.Мониторинг White-box
Мониторинг, основанный на показателях, отображаемых внутренними компонентами системы, включая журналы, метрики профилирования виртуальной машины Java или обработчика HTTP, которые генерируют внутреннюю статистику.Мониторинг Black-box
Тестирование поведения приложения с точки зрения пользователя.Dashboard (панели мониторинга)
Интерфейс (обычно веб), который предоставляет обзор основных показателей здоровья сервисов. На панели мониторинга могут быть фильтры, возможность выбора демонстрируемых показателей и т. д. Интерфейс создан, чтобы выявить наиболее важные для пользователей показатели. На панели мониторинга также могут отображаться информация для сотрудников технической поддержки: очередь запросов, список высокоприоритетных ошибок, закреплённый инженер для заданной зоны ответственности.Alert (уведомление)
Уведомления, предназначенные для получения человеком по электронной почте или другим путём, которые могут быть инициированы в результате возникновения ошибок или увеличения очереди запросов. Уведомления классифицируются как: тикеты, оповещения по электронной почте и сообщения в мессенджеры.Root cause (корневая причина)
Дефект программного обеспечения или человеческий фактор, которые при устранении не должны возникать снова. Проблема может иметь несколько основных причин: недостаточная автоматизация процессов, дефект программного обеспечения, недостаточная проработка логики работы приложения. Каждый из этих факторов может быть первопричиной, и каждый из них должен быть устранён.Node and machine (нода и машина)
Взаимозаменяемые понятия, чтобы обозначить один экземпляр работающего приложения на физическом сервере, виртуальной машине или контейнере. На одной машине может находиться несколько сервисов. Сервисы могут быть: связанные друг с другом: например, сервер кеширования и веб-сервер; не связанные сервисы на едином аппаратном обеспечении: например, репозиторий кода и мастер для системы конфигурации, такие как Puppet или Chef.Push
Любое изменение конфигурации программного обеспечения.Зачем нужен мониторинг
Есть несколько причин, почему приложения нужно ставить на мониторинг:Анализ длительных трендов
Насколько велика база данных и как быстро она растёт? Как меняется ежедневное количество пользователей?Сравнение быстродействия
Быстрее ли выполняются запросы на Acme Bucket of Bytes 2.72 в сравнении с Ajax DB 3.14? Насколько лучше кэшируются запросы после появления дополнительной ноды? Стал ли медленнее работать сайт по сравнению с прошлой неделей?Alerting (уведомления)
Что-то сломалось и кто-то должен это починить. Или что-то скоро сломается и кто-то должен это скоро проверить.Создание дашбордов
Дашборды должны отвечать на основные вопросы и включать что-то из "4 золотых сигналов" — задержки (latency), трафик (traffic), ошибки (errors) и величину нагрузки (saturation).Проведение ретроспективного анализа (debugging)
Задержка обработки запроса увеличилась, а что ещё случилось примерно в это же время? Системы мониторинга полезны как источник данных для систем бизнес-аналитики и упрощения анализа инцидентов по безопасности. Поскольку эта книга посвящена инженерным областям, в которых SRE обладают экспертизой, мы не будем обсуждать здесь методики мониторинга. Мониторинг и оповещения позволяют системе рассказать, когда она сломалась, или вот-вот сломается. Когда система не может автоматически восстанавливать себя, мы хотим, чтобы оповещение анализировал человек, определил, актуальна ли проблема, устранил и определил её основную причину. Если вы не осуществляете аудит компонентов системы, вы никогда не получите оповещение просто потому, что "что-то кажется немного странным". Нагрузка оповещениями человека — довольно дорогое использование времени сотрудника. Если сотрудник работает, оповещение прерывает рабочий процесс. Если сотрудник находится дома, оповещение прерывает личное время и, возможно, сон. Когда оповещения происходят слишком часто, сотрудники бегло их просматривают, откладывают или игнорируют входящие предупреждения. Время от времени они игнорируют настоящее оповещение, которое замаскировано шумовыми событиями. Перерывы в сервисе могут продолжаться длительное время, поскольку шумовые события мешают быстрой диагностике и устранению проблемы. Эффективные системы оповещения имеют хорошее соотношение сигнал/шум.Определение разумных ожиданий от системы мониторинга
Настройка мониторинга комплексного приложения — сама по себе сложная инженерная задача. Даже имея значительную инфраструктуру инструментов сбора, отображения и оповещения, команда Google SRE с 10–12 членами обычно включает одного или двух человек, основное назначение которых в создании и обслуживании систем мониторинга. Это количество со временем сократилось, по мере того, как мы обобщаем и централизуем инфраструктуру мониторинга, но каждая команда SRE обычно имеет по крайней мере одного сотрудника занимающегося только мониторингом. Должны сказать, что хотя довольно интересно наблюдать за дашбордами системы мониторинга, команды SRE тщательно избегают ситуаций, которые требуют от кого-то смотреть на экран, чтобы следить за проблемами. В целом, Google перешел на простые и быстрые системы мониторинга с оптимальными инструментами постфактум-анализа. Мы избегаем "волшебных" систем, которые пытаются прогнозировать пороговые значения или автоматически обнаруживают первопричину. Сенсоры, которые обнаруживают непредусмотренное содержимое в запросах конечных пользователей, являются единственным контрпримером; до тех пор пока эти сенсоры остаются простыми, они позволяют быстро обнаружить причины серьезных аномалий. Другие форматы использования данных мониторинга, такие как планирование мощностей или прогнозирование трафика представляют из себя более сложную задачу. Наблюдение, проводимое в течение очень долгого времени (месяцы или годы) с низкой частотой дискретизации (часы или дни), позволит вскрыть долговременную тенденцию. Команда Google SRE работала с переменным успехом со сложными иерархиями зависимостей. Мы редко используем такие правила, как "если я узнал, что база данных стала медленно работать, получаю оповещение о замедлении базы данных, иначе получаю оповещение о медленно работающем сайте". Правила, основанные на зависимостях, обычно относятся к неизменным частям нашей системы, таким как система для фильтрации пользовательского трафика к центру обработки данных. Например, "если настроена фильтрация трафика к центру обработки данных, не предупреждайте меня о задержках обработки пользовательских запроов" — это одно общее правило для оповещений от центра обработки данных. Немногие команды в Google поддерживают сложные иерархии зависимостей, потому что наша инфраструктура имеет постоянную скорость непрерывного рефакторинга. Некоторые из идей, описанных в этой главе, по-прежнему актуальны: всегда есть возможность быстрее двигаться от симптома к первопричине, особенно в постоянно меняющихся системах. Поэтому, хотя в этой главе изложены некоторые цели для систем мониторинга и способы достижения этих целей, важно, чтобы системы мониторинга были просты и понятны всем в команде. Аналогично, чтобы поддерживать низкий уровень шума и высокий уровень сигнала, подходы к мониторингу объектов, по которым производится оповещения, должны быть очень простыми и надежными. Правила, которые генерируют предупреждения для людей, должны быть простыми для понимания и представлять собой явную проблему.Симптомы против причин
Ваша система мониторинга должна отвечать на два вопроса: "что сломалось" и "почему сломалось". "Что сломалось" говорит о симптоме, а "почему сломалось" о причине. В таблице ниже приведены примеры таких связок.Симптом | Причина |
Получение HTTP-ошибки 500 или 404 | Серверы базы данных отклоняют подключения |
Медленные ответы сервера | Высокая утилизация CPU или повреждение кабеля Ethernet |
Пользователи в Антарктике не получают гифки с котами | Ваша CDN ненавидит ученых и кошачьих, таким образом, некоторые IP-адреса оказались в чёрном списке |
Приватный контент стал доступен отовсюду | Накатывание нового релиза ПО заставило файрволл забыть все ACL и пускает всех подряд |
Black-box против White-box
Мы сочетаем обширный White-box мониторинг со скромным Black-box мониторингом для критичных метрик. Самый простой способ сравнить Black-box с White-box — это то, что Black-box ориентирован на симптомы и представляет собой реактивный, а не проактивный мониторинг: "система прямо сейчас работает некорректно". White-box зависит от возможностей внутренней проверки систем: журналов событий или веб-серверов. Таким образом, White-box позволяет обнаруживать грядущие проблемы, неисправности, выглядящие как повторная передача запроса и т. д. Обратите внимание, что в многослойной системе симптом в зоне ответственности одного инженера является симптомом в зоне ответственности другого инженера. Например, снизилась производительность базы данных. Медленные чтения из базы данных являются симптомом для SRE по базам данных, который их обнаруживает. Тем не менее, для SRE по фронтэнду, наблюдающего медленный веб-сайт, причиной того же медленного чтения базы данных является медленная работа базы данных. Поэтому White-box мониторинг иногда ориентирован на симптомы, а иногда на причины, в зависимости от того, насколько он обширен. При сборе телеметрии для отладки необходим White-box мониторинг. Если веб-серверы медленно реагируют на запросы, связанные с базой данных, вам нужно знать, насколько быстро веб-сервер взаимодействует с базой данных и насколько быстро она выдаёт ответ. В противном случае, вы не сможете отличить медленный сервер базы данных от сетевой проблемы между веб-сервером и базой данных. Black-box мониторинг имеет ключевое преимущество при отправке оповещений: вы инициируете отправку уведомления получателю, когда проблема уже привела к возникновению реальных симптомов. С другой стороны, для еще не возникшей, но грядущей проблемы Black-box мониторинг бесполезен.Четыре золотых сигнала
Четыре золотых сигнала мониторинга — это задержка, трафик, ошибки и насыщенность. Если вы можете измерить только четыре показателя пользовательской системы, сосредоточьтесь на этих четырех.Задержка
Время, необходимое для обработки запроса. Важно различать задержку успешных и неудачных запросов. Например, ошибка HTTP 500, вызванная потерей соединения с базой данных или другим бэкендом может быть диагностирована очень быстро, однако, ошибка HTTP 500 может указывать на неудачный запрос. Выявление влияния ошибки 500 на общую задержку может привести к ошибочным выводам. С другой стороны, медленная ошибка даже быстрой ошибки! Поэтому важно отслеживать задержку с ошибкой, а не просто отфильтровывать ошибки.Трафик
Количество запросов к вашей системе, измеряется в высокоуровневыми метриками системы. Для веб-службы это измерение обычно представляет количество HTTP-запросов в секунду, разделённые по характеру запросов (например, статический или динамический контент). Для системы потоковой передачи звука это измерение может быть сконцентрировано на скорости ввода-вывода сети или количестве одновременных сеансах. Для системы хранения ключ-значение такое измерение может являться транзакциями или результатами поиска в секунду.Ошибки
Это частота неудачных запросов, которые явно (например, HTTP 500), неявно (например, HTTP 200, но в сочетании с неправильным контентом) или политикой (например, "Если вы зафиксировали ответ за одну секунду, любой односекундный является ошибкой "). Если кодов ответа протокола HTTP недостаточно для выражения всех условий сбоя, для выявления частичного отказа могут потребоваться вторичные (внутренние) протоколы. Мониторинг всех таких ошибочных запросов может оказаться неинформативным, в то время как сквозные системные тесты помогут обнаружить, что вы обрабатываете неправильный контент.Насыщение
Метрика показывает насколько интенсивно используется ваш сервис. Это мера системного мониторинга, выявляющая ресурсы, которые наиболее ограничены (например, в системе с ограниченной памятью, показывает память, в системе с ограничениями ввода/вывода показывается количество вводов-выводов). Обратите внимание, что многие системы ухудшают производительность, прежде чем они достигают 100% использования, поэтому наличие цели использования имеет важное значение. В сложных системах насыщение может быть дополнено измерением нагрузки более высокого уровня: может ли ваша сервис должным образом обрабатывать двойной трафик, обрабатывать только на 10% больше трафика или обрабатывать еще меньше трафика, чем в настоящее время? Для простых сервисов, у которых нет параметров, которые изменяют сложность запроса (например, "Дайте мне ничего" или "Мне нужно уникальное одно целое монотонное целое число"), которые редко меняют конфигурацию, статическое значение теста нагрузки может быть адекватным, Однако, как обсуждалось в предыдущем абзаце, большинство служб должны использовать косвенные сигналы, такие как утилизация CPU или пропускную способность сети, которые имеют известную верхнюю границу. Повышение задержки часто является основным показателем насыщения. Измерение времени отклика 99-го процентиля в небольшом окне (например, одна минута) может дать очень ранний сигнал насыщения. Наконец, насыщение также связано с предсказаниями о надвигающемся насыщении, например: "Похоже, ваша база данных заполнит жесткий диск за 4 часа". Если вы измеряете все четыре золотых сигнала и, когда возникает проблема с одной из метрик (или, в случае насыщения, почти проблема), оповещаете человека, ваш сервис будет более-менее охвачен мониторингом.Беспокойство о "хвосте" (или инструментация и производительность)
При создании системы мониторинга "с нуля" возникает соблазн разработать систему, основанную на средних значениях: средняя задержка, средняя утилизация CPU узлов или средняя заполненность баз данных. Опасность двух последних примеров очевидна: процессоры и базы данных утилизируются очень непредсказуемым образом. То же самое относится к задержке. Если вы запускаете веб-сервис со средней задержкой в 100 мс при 1000 запросах в секунду, 1% запросов может занять 5 секунд. Если пользователи зависят от нескольких таких веб-сервисов, 99-й процентиль одного бэкэнда может легко стать медианным временем ответа интерфейса. Простейший способ разграничения между медленным средним и очень медленным "хвостом" запросов состоит в том, чтобы собирать измерения запросов, выраженные в статистике (подходящий инструмент для отображения — гистограммы), а не фактические задержки: сколько запросов обслужил сервис, которые занимали между 0 мс и 10 мс, между 10 мс и 30 мс, между 30 мс и 100 мс, между 100 мс и 300 мс и т. д. Расширение границ гистограммы приблизительно экспоненциально (с примерным коэффициентом 3) часто является простым способом визуализации распределения запросов.Выбор подходящей степени детализации для измерений
Различные элементы системы должны измеряться с разной степенью детализации. Например:- Наблюдение за утилизацией загрузки CPU в определенный промежуток времени не покажет длительные выбросы, которые приводят к высоким задержкам.
- С другой стороны, для веб-сервиса, ориентированного на не более чем 9 часов простоев в год (99,9% годового времени безотказной работы), проверка на HTTP ответ 200 более одного или двух раз в минуту будет, вероятно, излишне частой.
- Точно так же проверка наличия свободного места на жестком диске для 99,9% доступности более одного раза каждые 1–2 минуты, вероятно, не нужна.
- Измерять загрузку CPU каждую секунду.
- Урезать детализацию до 5%.
- Агрегировать метрики каждую минуту.
Как можно проще, но не проще
Наложение различных требований друг на друга может привести к очень сложной системе мониторинга. Например, ваша система может обзавестить следующими усложняющими элементами:- Оповещения согласно разных пороговых значений для задержки обработки запросов, в разных процентилях, по всем видам различных показателей.
- Написание дополнительного кода для обнаружения и выявления возможных причин.
- Создание связанных дашбордов для каждой из возможных причин проблем.
- Правила, которые чаще всего ловят реальные инциденты, должны быть максимально простыми, предсказуемыми и надежными.
- Конфигурация для сбора данных, агрегации и оповещения, которые редко выполняются (например, менее чем раз в квартал для некоторых команд SRE), должна быть удалена.
- Метрики, которые собираются, но не отображаются на какой-либо предварительной панели и не используются каким-либо предупреждением, являются кандидатами на удаление.
Связывание принципов воедино
Принципы, обсуждаемые в этой главе, могут быть объединены в философию мониторинга и оповещения, которая одобрена и соблюдается в командах Google SRE. Соблюдение этой философии мониторинга желательно, она является хорошей отправной точкой для создания или пересмотра методики оповещений и может помочь задавать правильные вопросы службе эксплуатации независимо от размера вашей организации или сложности сервиса или системы. При создании правил мониторинга и оповещения, задавая следующие вопросы, вы можете избежать ложных срабатываний и излишних оповещений:- Обнаруживает ли это правило, иначе не обнаруживаемое состояние системы, которое является срочным, призывающим к действию и неизбежно влияющим на пользователя?
- Могу ли я игнорировать это предупреждение, зная, что оно доброкачественное? Когда и почему я могу игнорировать это предупреждение и как я могу избежать этого сценария?
- Означает ли это оповещение, что пользователи подвергаются негативному воздействию? Существуют ли ситуации, когда пользователи не подвергаются негативному воздействию, например, из-за фильтрации трафика или при использовании тестовых систем, оповещения по которым следует отфильтровать?
- Могу ли я принять меры в ответ на это оповещение? Является ли эти меры срочными или они могут ждать до утра? Можно ли безопасно автоматизировать действие? Будет ли это действие долгосрочным решением или краткосрочным обходным решением?
- Некоторые люди получают несколько оповещений по этой проблеме, поэтому можно ли сократить их количество?
- Каждый раз, когда приходит оповещение, я должен неотложно реагировать. Я могу неотложно реагировать несколько раз в день, прежде чем устану.
- Каждое оповещение должно быть актуально.
- Каждая реакция на оповещение должно требовать вмешательства человека. Если оповещение может обрабатываться автоматически, она не должно приходить.
- Оповещения должны быть о новой проблеме или событии, которого не было раньше.