Рубрики
Uncategorized

4 ключевые показатели наблюдения для распределенных приложений

В наши дни общий архитектурный дизайн — разбить монолит применения на меньший … Tagged с DevOps, Analytics, Kubernetes.

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

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

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

Поскольку достаточно большой набор микросервисов требует некоторого уровня координации, мы собираемся предположить, что вы используете Kubernetes для оркестровки. Мы также предполагаем, что у вас есть база данных временных рядов, такую как Прометей или Influxdb Для хранения данных ваших метрик. Вам также может понадобиться контроллер входа, такой как One Kong предоставляет управлять потоком трафика и сервисную сетку, такую как Кума , чтобы лучше облегчить соединения между услугами.

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

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

В то время как данные о воздействии определяют Кто затрагивается, причинно -следственные данные идентифицируют Что затронут и почему. Kong Ingress, который может отслеживать сетевую деятельность, может дать нам представление о влиянии данных. Между тем, Кума может собирать и сообщать причинно -следственные данные.

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

Задержка

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

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

  • Клиент нажимает кнопку «Добавить в корзину»
  • Браузер делает запрос на стороне сервера, инициируя событие
  • Сервер принимает запрос
  • Запрос базы данных гарантирует, что продукт все еще в наличии
  • Ответ базы данных анализируется, ответ отправляется пользователю, а событие завершено

Чтобы успешно следовать этой последовательности, вы должны стандартизировать шаблон именования, который идентифицирует как происходящее, так и когда это происходит, например, customer_purchase.initiate , customer_purchase.queried В customer_purchase.finalized , и так далее. В зависимости от вашего языка программирования, вы можете предоставить функциональный блок или лямбда для сервиса метрик:

statsd.timing('customer_purchase.initiate') do
  # ...
end

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

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

statsd.histogram('customer_purchase.initiate') do
  statsd.histogram('customer_purchase.external_database_query') do
    # ...
  end
end

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

Движение

Вы хотите, чтобы ваше приложение было полезным и популярным, но приток пользователей может быть слишком хорошим, если вы не готовы! Изменения в трафике сайта могут быть трудно предсказать. Возможно, вы сможете обслуживать пользовательские нагрузки на повседневной жизни, но события (как ожидаемые, так и неожиданные) могут иметь непредвиденные последствия. Ваш сайт электронной коммерции работает на выходных? Ваш сайт стал вирусным из -за неожиданной похвалы? Отклонение трафика также может зависеть от геолокации. Возможно, пользователи в Японии испытывают нагрузку на трафик так, как нет пользователей во Франции. Вы можете подумать, что ваши системы работают как предполагаемые, но все, что нужно, — это огромный приток пользователей, чтобы проверить это убеждение. Если событие занимает 200 мс, но ваша система может обрабатывать только одно событие за раз, это может показаться, что возникает проблема — до тех пор, пока очередь событий внезапно забита работой.

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

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

Показатели ошибок

Скорость ошибок отслеживания довольно проста. Любой 5xx (или даже 4xx), выпущенный в качестве ответа HTTP вашим сервером, должен быть помечен и подсчитан. Даже ситуации, которые вы учитывали, такие как пойманные исключения, следует контролировать, потому что они по-прежнему представляют собой недейское состояние. Эти вопросы могут служить предупреждениями о более глубоких проблемах, связанных с защитным кодированием, которое не решает фактические проблемы.

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

Насыщенность

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

Kong Ingress контролирует только сетевую деятельность, поэтому она не идеальна для отслеживания насыщения. Однако есть Многие инструменты доступны Для отслеживания этого с помощью Kubernetes.

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

Установите Prometheus

Prometheus-это стандарт для мониторинга, системы с открытым исходным кодом, которая легко установить и интегрировать с настройкой Kubernetes. Установка особенно проста, если вы используете Хелм Анкет

Сначала мы создаем Мониторинг Пространство имен:

$ kubectl create namespace monitoring

Затем мы используем руль для установки Prometheus. Мы также обязательно добавим диаграммы Prometheus в руль::

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
$ helm repo update
$ helm install -f https://bit.ly/2RgzDtg -n monitoring prometheus prometheus-community/prometheus

Файл значений, упомянутый в https://bit.ly/2rgzdtg Устанавливает интервал Data Scrape для Прометея на десять секунд.

Включить плагин Prometheus в Конге

Предполагая, что вы используете Cong Ingress Controller (KIC) для Kubernetes, ваш следующий шаг будет создавать пользовательский ресурс — A Kongplugin ресурс, который интегрируется в KIC. Создайте файл с именем Prometheus-plugin.yml :

apiVersion: configuration.konghq.com/v1
kind: KongClusterPlugin
metadata:
  name: prometheus
  annotations:
    kubernetes.io/ingress.class: kong
  labels:
    global: "true"
plugin: prometheus

Установите Grafana

Grafana — это платформа наблюдения, которая обеспечивает отличные панели панели для визуализации данных, скрещенных Prometheus. Мы используем руль для установки Графаны следующим образом:

$ helm install grafana stable/grafana -n monitoring --values http://bit.ly/2FuFVfV

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

Включить пересылку портов

Теперь, когда Прометей и Графана работают в нашем кластере Kubernetes, нам понадобится доступ к их мониторингам. Для этой статьи мы настроем основную пересылку портов для разоблачения этих услуг. Это просто, но не очень безопасно — для получения доступа, но не рекомендуется для развертывания производства.

$ POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitoring  port-forward $POD_NAME 9090 &

$ POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitoring port-forward $POD_NAME 3000 &

Вышеуказанные две команды разоблачают сервер Прометеуса на порту 9090 и приборная панель Grafana на порту 3000 .

Этих простых шагов должны быть достаточными, чтобы оттолкнуть и запустить. С контроллером Ingess Ingress и его интегрированным плагином Prometheus, захват метрик с помощью Prometheus и визуализация их с помощью Grafana быстро и просты в настройке.

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

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

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

Оригинал: «https://dev.to/mbogan/4-key-observability-metrics-for-distributed-applications-4d27»