- PVSM.RU - https://www.pvsm.ru -

В этой статье мы подробно рассмотрим мониторинг, расскажем о нескольких примерах использования, дадим рекомендации, а также поговорим о том, как конкретно мониторинг способен повысить безопасность, производительность и надёжность при помощи наблюдаемости.
В наблюдаемой системе мы собираем данные из логов, метрик и распределённых трассировок. В очень маленьких системах можно вручную искать и просматривать логи, визуализировать метрики в виде графиков, а трассировки в виде диаграмм, показывающих, как движется трафик по системе; однако при больших масштабах системы этого недостаточно. Вам будет необходим мониторинг — автоматизированный процесс, отслеживающий эти данные и отправляющий соответствующие алерты. (Более подробно о различиях между мониторингом и наблюдаемостью можно прочитать в этом ресурсе [2].)
На корпоративном уровне необходимы автоматизированные способы фильтрации, агрегации, обогащения и анализа всех этих данных. Также корпорациям требуются автоматизированные способы принятия мер в случае выявления необычного поведения. Автоматический ответ может уведомить соответствующую команду специалистов или даже напрямую предпринять действия по устранению проблем.
В медицине отслеживание основных жизненных показателей пациентов — это важнейший процесс, спасающий жизни. Мониторинг программных систем очень похож на него, мы даже используем ту же методологию при выполнении проверок «здоровья» и обсуждении состояния разных компонентов.
Но хватит теории, давайте рассмотрим конкретные примеры мониторинга.
Вот несколько типичных примеров использования преимуществ мониторинга:
4xx или 5xx) может помочь команде решать проблемы производительности и надёжности ещё до того, как они станут существенными.
Стоит заметить, что мониторинг — это гораздо сложнее, чем установка простого условия (например, «больше пяти запросов INSERT в базу данных orders за две минуты») и создание алерта в случае выполнения условия. Могут учитываться сезонные изменения, паттерны использования, вызывающие всплески в определённые временные промежутки в течение дня, недели или года. Эффективный мониторинг, выявляющий неожиданное поведение, учитывает контекст и способен распознавать тренды на основе данных прошлого.
Подобный тип мониторинга, особенно в случае его реализации при помощи инструмента, сочетающего в себе наблюдаемость, мониторинг и обеспечение безопасности, может быть чрезвычайно эффективным, например, как в этом анализе примера [3] Sumo Logic и Infor, когда Infor удалось сэкономить пять тысяч человеко-часов, которые раньше тратились на устранение инцидентов.

Мониторинг повышает производительность и надёжность системы, выявляя проблемы на ранних этапах с целью предотвращения снижения качества системы. Проблемы с производительностью часто становятся проблемами доступности и надёжности. Это особенно справедливо в случае наличия таймаутов. Например, предположим, что приложение выполняет таймаут спустя 60 секунд. Из-за недавней проблемы с производительностью обработка многих запросов начала занимать больше 60 секунд. Теперь все эти запросы оказываются сбойными, а приложение перестаёт быть надёжным.
Для решения подобных проблем применяется стандартная рекомендация: выполнять мониторинг четырёх «золотых» показателей любого компонента на критическом пути работы высокоприоритетных сервисов и приложений: задержки, трафик, ошибки и насыщение.
Сколько времени занимает обработка запроса? Стоит отметить, что задержка успешных запросов может отличаться от задержки сбойных запросов. Любое существенное увеличение задержек может быть показателем ухудшения производительности системы. С другой стороны, любое существенное снижение может быть признаком того, что какая-то часть обработки пропускается. Как бы то ни было, мониторинг привлечёт внимание к возможной проблеме.
Мониторинг трафика даёт понимание суммарной нагрузки на каждый компонент. Для разных компонентов трафик может измеряться разными способами. Например:
Рост трафика может быть связан с органическим ростом бизнеса, тогда это хороший признак. Однако он также может стать источником проблем для вышестоящей системы, генерирующей необычно большое количество трафика.
Рост количества ошибок любого компонента непосредственно влияет на надёжность и степень полезности системы. Кроме того, если сбойные компоненты автоматически выводятся из работы, это может привести к повышению трафика, что, в свою очередь, ведёт к проблемам с производительностью.
Какую часть имеющихся ресурсов использует сервис или приложение? Именно на этот вопрос даёт ответ мониторинг насыщения. Например, если диск заполнен, то сервис, записывающий логи на этот диск, будет сбоить при каждом последующем запросе. Пример более высокого уровня: если в узлах кластера Kubernetes недостаточно места, новые поды будут ждать обработки и не использоваться, что может привести к проблемам с задержками.
Как вы могли заметить, четыре «золотых» показателя связаны друг с другом. Проблемы часто проявляются в нескольких показателях.
Хотя любая проблема состояния системы может напрямую или косвенно влиять на безопасность, существуют непосредственные угрозы, которые мониторинг помогает выявить и устранить.
Система состоит из множества компонентов, но она больше, чем сумма всех своих частей. На базовом уровне вам следует выполнять мониторинг четырёх «золотых» показателей каждого компонента системы (по крайней мере, на критически важных путях). Что это значит на практике?
Также необходимо уделять большое внимание внешним зависимостям. Например, если система работает в облаке или интегрирована с сервисом стороннего поставщика, то нужно мониторить публичные конечные точки, от которых вы зависите, и устанавливать алерты для выявления проблем. Если сторонний сервис вышел из строя или его производительность снизилась, это может вызывать каскадные сбои в вашей системе.
Никакие компоненты не могут быть надёжными на 100%. Однако мониторинг поможет помочь создать надёжную систему из ненадёжных компонентов, выявляя проблемы компонентов (как внутренних, так и внешних) и заменять их или справляться с ухудшением качества сервиса. Например, если система работает в многозонной конфигурации и в одной зоне возникла проблема, то мониторинг может обнаружить это и запустить перенаправление (вручную или автоматически) всего трафика в другие зоны.
В сфере безопасности четыре «золотых» показателя также могут быть дополнительными индикаторами компрометации. Особенно это справедливо для случая, когда, например, вы видите всплеск использования CPU устройства в конечной точке или облачной рабочей нагрузки, или увеличение количества неудачных попыток входа. Однако мониторинг безопасности должен быть очень продуманным, ведь вы имеете дело со злоумышленниками. Необходимо определить поверхность атаки каждого компонента и всей системы, а также убедиться, что собираемой вами информации достаточно для выявления проблем. Например, для выявления эксфильтрации данных можно выполнять мониторинг IP-адресов и объёмы данных, передаваемых за пределы внутренней сети различными приложениями и сервисами. Если у вас нет таких данных, то вы слепы против подобной методологии атак.
Настроив сбор данных, можно выполнить представленные ниже шаги для внедрения надёжной и эффективной стратегии мониторинга.
В процессе сбора данных вы уже выполнили исчерпывающую инвентаризацию всех своих ресурсов. Теперь ваша задача заключается в том, чтобы выявить критически важные ресурсы, которые нужно тщательно мониторить для предотвращения катастроф и устранения их последствий. Можно просто сказать «давайте мониторить всё», но мониторинг связан с затратами. Мониторинг и алерты в промежуточных окружениях и окружениях разработки, а также в экспериментальных сервисах могут создавать ненужный стресс у инженеров. Частые алерты в три часа утра из-за несущественных проблем могут вызвать усталость от алертов, снижая мотивацию команды к устранению проблем, когда они действительно серьёзны.
Выявив критически важные ресурсы, нужно чётко определить ответственного за каждый из них. Ответственный может быть человеком или командой. Если это один человек, также назначьте ему заместителя. Также важно регулировать ответственность за ресурсы при найме и увольнении людей, а также при переходе на другие должности и в другие команды.
В конечном итоге, жизнь или смерть вашей стратегии мониторинга зависит от того, как вы зададите алерты для ресурсов, имеющих плохое состояние или имеющие потенциал для компрометации. Вам нужно понять, что нормально для каждого из ресурсов.
Если вы выполняете мониторинг метрик, то под определением «нормального» подразумевается задание атрибуту (например, использованию CPU) интервала значений (например, «50%-80%»). Интервалы нормальности могут динамически меняться с изменениями в бизнесе и могут варьироваться в зависимости от времени и места. В некоторых случаях могут быть только максимальные или минимальные значения. Задавая интервалы нормальных значений, вы создаёте алерты, уведомляющие ответственного за ресурс, что его ресурс работает вне пределов нормального интервала.
Если вы выполняете мониторинг логов, то алерты обычно задаются на основании результата определённых запросов логов (например, «количество ошибок 404, зафиксированных во всех API-сервисах за последние пять минут»), удовлетворяющих или не удовлетворяющих условию (например, «меньше 10»). В этом вам могут помочь инструменты управления логами и их аналитики [5].
Что делать, когда сработает критичный алерт? Вы не должны придумывать стратегию на ходу, пока клиенты жалуются в твитах на ненадёжность продуктов вашей компании, а руководство паникует.
Runbook — это рецепт, состоящий из простых шагов; он подготавливается и тестируется заранее, чтобы помочь вам собирать дополнительную информацию (например, инструкции о том, на какие дэшборды нужно смотреть и какие скрипты командной строки выполнять для диагностики первопричин) и устранять проблемы (например, развернуть предыдущую версию приложения). Ваш runbook должен помогать вам быстро выявить конкретную причину проблемы и определить, кто лучше всего справится с её устранением.
У вас есть ответственные, алерты и runbook-и. Часто алерты бывают недостаточно конкретными, чтобы связать их с конкретным ответственным. Лучше всего назначать дежурных (on-call) инженеров в разных областях бизнеса. Этот дежурный инженер получает алерт, выполняет инструкции runbook-а, смотрит на дэшборд и пытается понять первопричину. Если он не может понять или устранить проблему, то передаёт её ответственному. Помните, что этот процесс может быть сложным; часто проблема возникает из-за цепочки сбоев и для решения требуется совместная работа нескольких руководителей.
Runbook — это отлично, однако поддержка сложных runbook-ов и обучение пользования ими дежурных инженеров требует много усилий. А в конечном итоге процесс устранения проблем всё равно зависит от медленного и ошибающегося человека. Если ваш runbook неактуален, то выполнение его инструкций может усугубить кризис.
Теоретически, runbook может исполняться программно. Если в runbook-е говорится «при срабатывании алерта X нужно перезапустить процесс Y», то скрипт или программа могут получать уведомление алерта X и перезапускать процесс Y. Та же программа может выполнить мониторинг процесса Y после перезапуска, убедиться, что всё в порядке и сгенерировать отчёт об инциденте. И всё это без необходимости будить дежурного инженера. В случае сбоев действий по автоматическому устранению проблемы можно связаться с дежурным инженером.
Автоматическое устранение — отличная система, однако болезнь легче предупредить, чем лечить её, поэтому лучше предотвращать возникновение проблем. Каждый инцидент — это возможность учиться и потенциально предотвращать целый класс проблем. Например, если множество инцидентов произошло из-за того, что код с багами добрался до продакшена, то из постмортемов можно извлечь урок и улучшить тестирование на промежуточном этапе. Если реакция дежурного инженера на алерт была слишком медленной или устарел runbook, это может говорить о том, что команде нужно вложить средства в практики автоматического устранения проблем.
Мониторинг — критически важная часть наблюдаемости в целом и конкретно наблюдаемости в целях безопасности. При больших масштабах систем людям не имеет смысла просто постоянно следить за разными дэшбордами и графиками для выявления проблем. Вам нужен целый набор практик реакций на инциденты, включающий в себя назначение ответственных, настройку алертов, написание runbook-ов, автоматизацию runbook-ов и организацию процессов дежурства и постмортемов.
Автор:
ru_vds
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/382668
Ссылки в тексте:
[1] предыдущей: https://habr.com/ru/company/ruvds/blog/713682/
[2] этом ресурсе: https://assets-www.sumologic.com/resources/brief/Observability_vs_Monitoring_Ebook_R3.pdf
[3] анализе примера: https://www.sumologic.com/case-study/infor/
[4] атакой port knocking: https://en.wikipedia.org/wiki/Port_knocking
[5] инструменты управления логами и их аналитики: https://www.sumologic.com/solutions/log-management/
[6] Источник: https://habr.com/ru/post/715638/?utm_source=habrahabr&utm_medium=rss&utm_campaign=715638
Нажмите здесь для печати.