Мониторинг является важной частью любого жизненного цикла разработки программного обеспечения (SLDC), и с повышением практики архитектуры микросервисов и DevOps он становится более важным и более сложным. Чтобы понять, как контролировать микросервисы, мы должны сделать шаг назад к приложению Monolith Legacy и как мы привыкли его контролировать. Философия трех пирамид
В монолитной среде мы использовали для получения некоторых показателей, которые сообщают нам, как статус нашего приложения, мы обычно начинаем с инфраструктуры, физическое оборудование, например, хост моего приложения, например: мой сервер? моя база данных? Может ли веб -сервер поговорить с базой данных?
Затем мы переходим к другому шагу, чтобы узнать о нашем приложении самостоятельно и задаем другой вопрос: работает ли мой процесс подачи заявки?
Затем мы перемещаем еще один уровень, мы отслеживаем функциональность и возможности бизнеса, и это приведет к тому, чтобы задать другой вопрос: может ли пользователь разместить заказ?
Последние 3 уровня инфраструктура, применение и возможности бизнеса называются областями мониторинга
Давайте перейдем к другой перспективе, и давайте немного изменим вопросы, давайте проверем на здоровье приложения, спросив мой сервер? И проверьте производительность приложения, спросив, есть ли высокий процессор? И проверить о пропускной способности, спросив, достаточно ли у меня места на диска? Отвечая на эти 3 вопроса, я получаю еще одну метрику о здоровье, производительности и возможностях системы, и это называется проблемами мониторинга.
И есть много отношений между областями мониторинга и проблем с мониторингом, и это зависит от комбинации вопроса, который мы задаем, например: мой сервер? Есть ли высокий процессор? У меня достаточно места на диска? Здесь я нацелен на здоровье, производительность и способность моей инфраструктуры и если я спрошу: создает ли мои приложения исключения? Как быстро системные сообщения? Могу ли я справиться с пакетной работой на конец месяца? Здесь я нацелен на здоровье, производительность и емкость слоя приложений, и если я снова меняю вопросы и задаю: могут ли пользователи получить доступ к корзине за кассе? Мы встречаемся с SLAS? Каково влияние добавления другого клиента? Мы ориентируемся на здоровье, производительность и способность к слою бизнес -возможностей.
Существует также третье разрешение, я хочу представить это типы взаимодействия, которые показывают, как я контролирую систему
- Пассивный мониторинг: где вы получаете доступ к системной панели панели и видите текущие и прошлые значения
- Реактивный мониторинг: где система мониторинга предупреждает меня, когда что -то происходит, как система отправки электронной почты, когда длина очереди достигается 50
- Упреждающий мониторинг: где система мониторинга применяет действие автоматически для ремонта системы, например, когда длина очереди достигает 50 автоматических масштабирования другого экземпляра, чтобы решить проблему
Итак, еще раз это много ко многим отношениям между 3 мониторингами пирамид, поэтому, если я задам первый вопрос в начале статьи: мой сервер? моя база данных? Может ли веб -сервер поговорить с базой данных? Затем я контролирую здоровье инфраструктуры в момент времени и пассивный мониторинг.
Поэтому всякий раз, когда вы решаете метрику, которую вы хотите следить за
Эти 3 пирамиды — это способ размышления о том, что вы контролируете, и опровергаете, является ли это монолитной системой или распределенной системой, которая полезна для вас.
Что происходит, когда мы имеем дело с распределенной системой? Проблема с распределенной системой начинается с одной точки, и мы выпускаем части функциональности, которые мы общаемся с протоколами обмена сообщениями, и мы раскручиваем несколько других областей, которые мы получили больше, чем сервер, чтобы наблюдать, как у каждого из них есть собственная база данных, которая много Больше инфраструктуры, чтобы беспокоиться о том, что динамическая природа микросервисов Что, если бы я ни разместил одну из моих услуг, вы получили 4 экземпляра, все это потребляет одну входную очередь или может также быть распределенной очередью, имеет смысл контролировать длину очереди. Это мало сложно, да, да, вы должны следить за этим, это может быть нет. И это становится все сложнее, когда вы увеличиваете динамический характер систем, которые вы можете запустить, и это будет много информации, которую мы можем собрать, и не имеет смысла мы смотрим на все.
Давайте посмотрим на компонент распределенной системы и посмотрим, как мы можем ее контролировать.
Длина очереди является самой простой метрикой. Каждая технология брокера или очередь имеет какой -то метод для обеспечения длины очереди, так что, что говорит нам этот показатель
- Длина очереди является индикатором выдающейся работы
- Высокая длина очереди не обязательно означает, что есть проблема, поэтому, если она высокая, но стабильная или уменьшающаяся или есть некоторые шипы, которые могут быть хорошими но Если это увеличивается за время, это проблема
Таким образом, для наших пирамид мы отслеживаем эффективность инфраструктуры, но это не дает нам четкого понимания, поэтому давайте поищим здесь еще одну важную метрику. Сообщение время обработки Таким образом, мы должны получить время из сообщения, чтобы быть в передней части очереди, пока не завершит свою задачу, независимо от того, что он был файлом загрузки через FTP, или выполнить какой -то запрос в базе данных, и завершить его и удалить сообщение из очереди
- Время обработки — это время, необходимое для успешного обработки сообщения
- Время обработки не включает время обработки ошибок
- Это зависит от времени ожидания очереди, которое успешно завершить процесс, потому что, если ошибка, выброшенная во время обработки, не должна быть удалена, она может отправить в другой стручок, чтобы обратиться к нему снова, если она стабилен или уменьшается, или есть некоторые шипы, которые могут быть хорошими но Если это увеличивается за время, это проблема
Это приведет нас к новой концепции, это критическое время. Настало время от поднятия нашего сообщения, чтобы достичь в передней части очереди обработанной, а затем остановки времени, так что, если есть задержка сети или даже экземпляр, который будет обработанно обработано и перезапущено, и было много повторений для доставки сообщения, которые критически важны время остановки нет Это на самом деле все еще считается. Из этого мы можем получить формулу, которая описывает критическое время.
Критический В очереди + Время обработки + повторение времени + задержка сети
и очень похоже на другие показатели, если они стабильны или уменьшаются, или есть некоторые шипы, которые могут быть хорошими но Если это увеличивается за время, это проблема
Давайте собрать все вместе
Each of these metrics represent a part of the puzzle. Looking at them from endpoint's perspective not per message. Look at them together gives great insight into your system.
Давайте покажем некоторые случаи и анализируем их
Дело 1:
Что у нас здесь? Стабильное критическое время. Колыбельное время обработки и стабильная длина очереди с течением времени. Что это говорит нам о системе? Система, которая не отстает от всех сообщений, которые приходят также, мы обрабатываем их, потому что длина очереди не увеличивается, но почему время обработки не является стабильным? Это может быть ряд вещей, потому что, как может быть, прыгать вокруг может быть утверждение ресурсов или может быть механизм блокировки, когда обработчик получит сообщение, которое оно блокирует, пока не обновит некоторые ресурсы, это также могут быть некоторые сообщения, которые обрабатывают эту конечную точку быстро идут быстро А другие нет, и вы можете использовать эту информацию, чтобы изолировать медленные в их конечной точке и масштабировать новую конечную точку независимо.
Случай 2:
Здесь мы имеем высокое критическое время, высокое время обработки и какая -то средняя длина очереди, но все стабильно. Что это говорит нам? Система не соответствует мощности, но мы находимся на пределе Поэтому, как только какой -либо всплеск движения, который длиной в очередь — небо ракета, и критическое время будет также. Так что это может быть хорошим показателем для масштабирования этих ресурсов.
Случай 3:
Здесь мы имеем высокое критическое время, низкое время обработки и низкая длина очереди. Что это значит? Может быть, есть проблема в сети, потому что, если вы помните уравнение критического времени, включающее время задержки сети, также может быть много RESRIE T при обработке сообщения, которое мы измеряем время обработки для успешно обработанного сообщения только для того, чтобы проблема подключения или повторения. Так что, если мониторинг распределенной системы, как у вас есть разбивки связи? На самом деле, если вы контролируете распределенную систему, простой способ, которым я выполняю проверку здоровья, и если ваши услуги отвечают на 200 статуса, это означает, что она возникла, но связь с распределенной системой обычно выполняется с использованием брокеров, а когда экземпляр отправляет сообщение брокеру, это не знает, если это Сообщение добраться до места назначения или нет самого простых вариантов, когда сообщение достигает своего назначения, квитанция о чтении отправляет обратно. это хорошая идея? !! Это не почему? Мы создаем, превратившуюся нашу отделенную систему в систему REQ/RES:( и мы получили вдвое больше сообщения, отправленного через систему. Решение здесь-одноранговая подключение говорит нам, что конечная точка фактически обрабатывает сообщение из другого.
Какие инструменты использовать? У нас есть куча инструментов, которые могут собирать метрики для нас Splunk, Kibana, D3 и Grafana, подходят для мониторинга.
Как мы будем собирать всю эту информацию, которую мы отправили? Если мы поговорим о критическом времени или времени обработки, это будет на показатели сообщений, когда мы отправим сообщение, что сообщение будет иметь свое время обработки и критическое время, связанное с ним. Длина и подключение к очереди вы можете периодически выполнять чеки каждую минуту или каждые 5 минут
Как мы это храним? Хорошая схема для хранения: тип метрик, тип сообщения, метка времени и значение. Но это очень дорогой способ хранения ваших метрик, есть разные методы для этого Но это вне этой лекции.
Как мы отображаем метрики? Мы можем использовать стек Elk для этого, он будет подходящим для использования.
Вывод:
Мониторинг распределенных систем не является легким процессом и прямым пропорциональным с тем, насколько динамика является система, но с пониманием философии мониторинга и выбора правильных метрик, которые помогают анализировать систему и сохранять ее здоровыми:)
Оригинал: «https://dev.to/mbiomee/monitoring-microservices-techniques-1004»