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

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

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

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

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

Learning Rate - это информационный бюллетень для тех, кто интересуется миром AI и MLOps. Каждую пятницу вы будете получать от меня обновления и мысли о последних новостях и статьях об искусственном интеллекте. Подпишитесь здесь!

Мониторинг Vs. Наблюдаемость

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

Мы отслеживаем системы и наблюдаем за приложениями

Мониторинг

В мониторинге мы смотрим на саму систему. Например, в облачном мире система, скорее всего, будет кластером Kubernetes. Однако мониторинг не скажет нам, что происходит внутри нашего приложения. Он покажет такие индикаторы, как низкая доступность памяти, но не поможет нам определить причину проблемы.

Наблюдаемость

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

Как правило, помните: мы отслеживаем системы и наблюдаем за приложениями. Вы также услышите, как люди используют термин наблюдаемость, чтобы сгруппировать две концепции (т. Е. Мониторинг и наблюдаемость).

Инструменты наблюдения

Среди популярных экспертов по наблюдению за стеком - Прометей, Графана и Джагер.

Prometheus - ведущее решение для мониторинга с открытым исходным кодом. Он был создан SoundCloud в 2012 году и принадлежит Cloud Native Computing Foundation (CNCF). Prometheus собирает системную информацию, имеет базу данных временных рядов и собственный язык запросов, называемый PromQL. Кроме того, Prometheus имеет собственные встроенные средства оповещения.

Uber создал Jaeger в 2015 году, он также принадлежит CNCF. Jaeger собирает информацию о приложениях, в отличие от Prometheus, и предоставляет распределенную систему отслеживания.

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

Установка

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

curl -sfL https://get.k3s.io | sh -
# Check for Ready node, takes maybe 30 seconds
k3s kubectl get node

Далее мы установим Prometheus и Grafana с помощью Helm. Итак, установим Helm:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

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

kubectl create namespace monitoring

Теперь мы готовы установить Prometheus. Выполните следующие команды:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --kubeconfig /etc/rancher/k3s/k3s.yaml

Чтобы проверить установку, запустите kubectl get pods -n monitoring. Вы должны увидеть 6 капсул, которые вот-вот будут готовы. Теперь вы можете запустить команду переадресации портов, чтобы просмотреть панель управления Grafana:

kubectl port-forward prometheus-grafana-5855d975d8-495bn --address 0.0.0.0 3000:3000 -n monitoring

Перейдите к 127.0.0.1:3000; имя пользователя admin и пароль по умолчанию prom-operator.

И последнее, но не менее важное: давайте установим Jaeger в нашем кластере. Мы будем использовать файлы, размещенные в официальном репозитории Jaeger GitHub. Чтобы установить Jaeger, мы создадим новое пространство имен observability:

kubectl create namespace observability

Затем выполните следующие команды:

kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml

Вот и все! Теперь у вас есть кластер Kubernetes с установленными стандартными инструментами наблюдения.

Предисловие

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

Наконец, мы увидели, как создать кластер Kubernetes и установить Prometheus, Jaeger и Grafana, стандартные инструменты для мониторинга и наблюдения.

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

об авторе

Меня зовут Димитрис Поулопулос, я инженер по машинному обучению, работающий в Arrikto. Я разработал и внедрил AI и программные решения для крупных клиентов, таких как Европейская комиссия, Евростат, МВФ, Европейский центральный банк, ОЭСР и IKEA.

Если вы хотите прочитать больше сообщений о машинном обучении, глубоком обучении, науке о данных и DataOps, подпишитесь на меня в Medium, LinkedIn или @ james2pl в Twitter.

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