Рубрики
Uncategorized

Облачный родной мониторинг в масштабе — собирать метрики

В рамках нашего сериала нативный мониторинг в масштабе, этот пост направлен на то, почему показания наших приложений настолько важны, и почему они имеют отношение к нашей способности мониторировать системы в масштабе. Tagged с Куберовщиком, мониторингом, DevOps, Plationnative.

Когда мы движемся к облачному родному миру, где нагрузки являются эфемерными, горизонтальными масштабированием являются ключевыми, а в микроэнергии являются нормой, мониторинг всех этих распределяемых компонентов становится не только необходимым, но обязательным на любой доходе на производстве.

Этот пост является частью серии по имени Облако родной мониторинг в масштабе Которые фокусируются на всех этапах мониторинга на облачно-местном применении, развернутых на Кубейнетах. Поскольку из одних запущенных приложений, чтобы понять, если он работает и работает, как ожидалось, (проверьте мой предыдущий пост ), вплоть до нескольких кластеров K8S, используя несколько приложений одновременно.

Этот пост направлен на понимание того, почему показания наших приложений настолько важны, и почему они имеют отношение к нашей способности контролировать системы в масштабе.

Я верю, что страница цифрового океана на Метрики, мониторинг и оповещение Дает очень хорошо написанное объяснение этих концепций:

Метрики, мониторинг и оповещение — все взаимосвязанные концепции, которые вместе составляют основу системы мониторинга. У них есть возможность обеспечить видимость в здоровье ваших систем, поможет вам понять тенденции использования или поведения, а также понять влияние изменений, которые вы делаете. Если метрики выходят за пределы ваших ожидаемых диапазонов, эти системы могут отправлять уведомления, чтобы подсказать оператора взглянуть, и затем может помочь в информации о наполнении информации, чтобы помочь определить возможные причины.

Эти метрики могут быть получены из нескольких уровней абстракции, на которую наш приложение работает сверху. Некоторые примеры:

  • На основе хоста (голый металл, виртуальные машины, контейнер) : Использование процессора, использование памяти, дисковое пространство и т. Д.
  • Контейнерная оркестровка (например, Кубернаны) : Подсчет RESTART POD, дросселирование CPU, статус здоровья контейнера (как показано на мой предыдущий пост ) и т. Д.
  • Приложение : Наиболее распространенные методологии метрики для мониторинга приложений являются красным (скорость запроса, ошибки, продолжительность), использование (использование, насыщенность, ошибки) или золотые метрики сигнала (задержка, трафик, ошибки, насыщенность);

Метрики — это способ к пониманию лучшего поведения и симптомов наших систем, которые позволяют нам действовать на них, возможно, предотвращение ухудшения сценариев, таких как деградация услуг или даже простоя.

Хороший способ посмотреть на метрики, выполняя аналогию с очень известной сложной системой, которую мы взаимодействуем с каждым днем: Человеческое тело Отказ

Наши собственные тела подвергают метрики все время, такие как:

  • Температура тела
  • О 2 насыщенность
  • Скорость сердцебиения
  • и т.п.

Эти метрики позволяют нам (или врачам) иметь более глубокое понимание общего состояния наших (теловых) систем и определить определенные пороги, на которых ненормальное поведение может вызвать предупреждение/беспокойство.

Например, если наша температура тела выше 38ºC (100,4ºF), мы определяем, что этот симптом имеет лихорадку, которая может иметь несколько корневых причин для него (инфекционные заболевания, иммунологические заболевания, расстройства обмена веществ и т. Д.) Но это помогает нам понять, что что-то в нашей общей системе не находится в «нормальном» пороге и должен быть исследован дальше.

Наши приложения не отличаются, подвергающиеся показанию метрик о наших приложениях, таких как задержка ответов, частота ошибок, количество кэш-миссных событий и т. Д. Позволяет отслеживать эти метрики и понять, когда ненормальное поведение присутствует и начинает расследовать, что может быть Отказ

Для того, чтобы мы в полной мере воспользоваться этим возможностями, нам нужно выставить метрики обо всех компонентах, которые могут повлиять на общее состояние здоровья нашего применения.

Сценарий

Давайте рисуем сценарий, в котором у нас есть приложение Golang, которое читает в очереди и отправляет электронные письма, это приложение работает в контейнере в верхней части оркестратора, такого как Kubernetes, который работает в наших голых металлических машинах на премьении.

В этом сценарии мы можем четко разделить три уровня абстракции:

  • Голая металлическая машина (слой хоста)
  • Кубернеты (оркестография)
  • Наше приложение (уровень приложений)

Как мы хотим иметь максимально возможной информации относительно всех слоев, которые могут повлиять на наше приложение, нам нужно будет разоблачить метрики каждого из этих слоев.

Слой хоста

Для того, чтобы собрать метрики о нашем хост-слое, например, использование ЦП, использование диска/доступность, сетевое движение и т. Д. Мы можем воспользоваться экспортерами метрики с открытым исходным кодом, которые не только подвергают эту метрику, но и позволяют их собираться самыми распространенными использованными инструментами на рынке (например, PROMETHEUS/PROMQL).

Все упомянутые выше метрики могут быть выставлены наличие Узел экспортер Бег в вашем слое хоста, который сделает ваш хост выставлять свои метрики в определенном порту (по умолчанию: 9100), например:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 3.8996e-05
go_gc_duration_seconds{quantile="0.25"} 4.5926e-05
go_gc_duration_seconds{quantile="0.5"} 5.846e-05
# etc.

Эти метрики могут затем собираться внешней системой, как показано на разделе «Сбор средств».

Оркостный слой

При использовании Orchestration слой для управления развертыванием, такими как Kubernetes, оно облегчает наши эксплуатационные усилия на необходимость оправдывания всех наших нагрузок, но также добавляет некоторую сложность сверху, что означает другой слой, который может привести к операционным вопросам, если не контролируется должным образом Отказ

Слой оркестрации может предоставлять метрики, такие как:

  • Статус развертывания/POD (работает, ожидается, ошибка и т. Д.)
  • Использование ресурсов контейнера (CPU, память и т. Д.)

В случае Кубернаны , он может разоблачить метрики о некоторых его ресурсах, таких как: daemonset, работа, развертывание, cronjob, persistentvolume, storageClass, recessistquota, пространства имен, стручок, вертикальный характер

Эти метрики могут быть выставлены с использованием таких инструментов, как Kube-State-Metrics которые также делают эти метрики доступными для сбора.

Слой приложения

Поскольку этот слой является тем, который варьируется больше всего, и это может быть адаптальным, сделанным на любой бизнес-ценность, ваша заявка направлена на получение, в большинстве случаев требует, чтобы мы выполняли исследование того, что ключевые метрики ценны для нашего применения, которые Вам важно больше всего, когда мы хотим понять его поведение и автоматизировать его мониторинг.

В нашем сценарии наше приложение, которое фокусируется на чтении сообщений из определенной очереди, затем на основе какой-либо бизнес-логики отправляет электронное письмо с определенным шаблоном.

Может быть полезно разоблачить некоторые метрики о использовании и общем здоровье способности нашей заявки на выполнение добавленной бизнес-значений, например:

email_messages_processed{template="sales_approved"} 532
email_messages_processed{template="sales_rejected"} 21
email_messages_read{source="finance_queue"} 68
email_messages_read{source="human_resources_queue"} 11
email_messages_read{source="management_queue"} 14
email_messages_failed{reason="unknown"} 7
email_messages_failed{reason="timeout"} 2

Он может быть достигнут путем внедрения приборов в нашей кодовой базе и имейте эти метрики, подверженные воздействию под конечной точкой (например, /Metrics ), чтобы понять немного лучше, как добиться этого, не стесняйтесь пройти через Руководство Prometheu Используя любой из их клиентской реализации для Голанг , Python , Ruby и Java Отказ

Реализация и разоблачение этих метрик позволяет нашим мониторинговым стекам не только отслеживать здоровье наших подчеркивающих систем, но и метрики, связанные с нашей конкретной бизнес-логикой и определяют конкретные вопросы, связанные с нашей кодовой базой.

Как только нам удалось установить метрики всех этих различных слоев, нам нужно собрать и хранить их таким образом, чтобы позволить нам запросить и анализировать их значение со временем. Prometheus Будучи вторым размещенным проектом в CNCF, сразу после Kubernetes, делает его облачным стандартом нативной отрасли для сбора метрик, мониторинга и оповещения. Этот стек может быть составлен следующими компонентами:

  • Prometheus (Сбор и мониторинг метрик)
  • AlertManager (управление оповещениями)
  • Графана (визуализация метрик)

Сбор и мониторинг метрики

Основная ответственность PROMETHEUS состоит в том, чтобы соскрести целевые конечные точки для сбора метрик в нескольких системах, через:

  • Предварительно определенные конечные точки HTTP (E.g. https://example.com/metrics );
  • Открытие услуг (E.g. Kubernetes Prometheus Operator ServiceMonitor )

При сборе этих метрик Prometheus позволяет использовать свой собственный язык запроса PROMQL Проанализировать эти метрики и получить больше информации обо всех наших системах, например,

http_requests_total{app={"email_processor"}}[5m]

Или проверьте, есть ли какой-нибудь контейнер в статусе не готов в наших кластере Kubernetes:

 kube_pod_container_status_ready == 0

Используя нашу способность запросить метрики всех наших систем, включая наши собственные показатели приложений, это позволяет создавать так называемые выражения оповещения, когда он возвращает результаты, он вызывает предупреждение, например:

alert: EmailProcessTimeout
expr: rate(email_messages_failed{reason="timeout"}[5m]) > 0.5
for: 5m
labels:
  severity: warning
annotations:
  message: Suddently multiple email message processing have failed with reason Timeout over the last 5 minutes.

Если в последних 5 минутах появляется внезапное изменение электронных писем.

Управление предупреждением

Как упоминалось ранее, другой основной компонент стека прометея является AlertManager Какие его основные фокусировки состоит в том, чтобы обрабатывать оповещения, отправленные клиентскими приложениями, такими как PROMETHEUS.

AlertManager не только обрабатывает маршрутизацию этих предупреждений к внешним поставщикам, таким как Pagerduty , Opsgenie , Слабый , Электронная почта и т. Д. Но это также обрабатывает:

  • Дедупликация
  • Группировка
  • Силление и ингибирование
  • Высокая доступность (развернуто как кластер)

Которые являются высокогодными основными функциональными возможностями для предотвращения Удаление усталости И лучше обрабатывать оповещения по окружающей среде.

AlertManager также позволяет проводить оповещения на основе предопределенных этикеток, таких как Серьезность: предупреждение Определяется в приведенном выше приведенном выше приведенном выше.

Экспозиция, сбор и анализ метрик всех слоев, которые оказывают влияние на нашу инфраструктуру, оркестографию и применение, которые в конце дня могут препятствовать нашей способности генерировать бизнес-значение, является не только важной, но важной, чтобы обеспечить раннее обнаружение проблем в наших инженерных решениях.

Используя эти инструменты, чтобы увеличить нашу наблюдаемость по всему нашу стопку, не только расширяет команду SRE для легкого выполнения своей работы, но и способность анализировать метрики и его влияние на общее состояние здоровья системы.

Если вы хотите, чтобы обсудить больше о том, как мониторинг не только ваша инфраструктура, но и все слои, которые могут повлиять на ваш бизнес, имеют решающее значение для вашей организации, а затем добраться до меня в твиттере Отказ

Оригинал: «https://dev.to/schmittfelipe/cloud-native-monitoring-at-scale-collecting-metrics-3j4i»