Рубрики
Uncategorized

Тестирование обнаружения инцидентов ML с использованием приложения MicroServices Cloud Native

Нет лучшего способа попробовать обнаружение инцидентов с инцидентами с рынком Tagged с DevOps, Kubernetes, SRE, MachineLearning.

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

Этот блог покажет вам, как установить и сломать приложение пример, используя локальный кластер Minkube Kubernetes, работающий на вашем ноутбуке. Весь процесс, в том числе установка ISTIO, PROMETEUE, KIALI, Online Boutique, плюс регистрация для учетной записи зебрика и установка журнала Zebrium и коллекционеров метрик, занимает 20-30 минут.

ВАЖНО: Перед началом вам нужно будет установить minikube (Инструкции для Linux, MacOS и Windows Здесь ) Вам также нужно установить git , Хелм и curl (Google «Curl» для вашей платформы), если у вас их еще нет.

1. Зарегистрируйтесь на аккаунт с зебраей

Теперь давайте пойдем с вашим аккаунтом -зебрием! Вы можете зарегистрироваться на новую учетную запись Здесь Анкет

После того, как вы введете свои данные и установите пароль, вы увидите Страница настройки зебрия Анкет

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

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

Установите чувствительность к инциденту к высокой и включению инфраструктурных инцидентов:

В верхней RHS страницы настройки в пользовательском интерфейсе Zebrium (см. Рисунок выше) нажмите кнопку передачи (1) и выберите Incidents (2) из выпадающего списка. Теперь нажмите «Создать» (3) в рамках инфраструктурных инцидентов (это позволит включить определенные типы журналов инфраструктуры K8S для обнаружения инцидентов) и выберите «Высокий» (4) при чувствительности к инциденту.

Измените рефрактерный период

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

См. Рисунок выше — В верхней RHS нажмите кнопку Gear (1) и выберите Advanced (2) в раскрывающемся списке. Установите рефрактерный период до 10 минут (3). Наконец, щелкните значок ZE (4) в верхней части LHS, чтобы вернуться на страницу настройки.

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

2. Начните Minikube с достаточным количеством ресурсов

Обратите внимание на опцию -p для всех команд Minikube. Это потому, что мы будем использовать отдельный экземпляр Minikube с именем «Бутик» (это облегчит очистку, когда вы закончите).

minikube start --cpus=4 --memory 4096 --disk-size 32g -p boutique

Чтобы сделать IP -адрес Frontend IP -адреса онлайн -приложения для бутики (необходимо позже), вам нужно будет запустить «команду Minikube Tunnel». Он должен быть запущен в отдельном окне терминала.

# Make sure you run this command in a different window
minikube tunnel -p boutique

3. Установите коллекционеры Log и метриков

Перейдите на страницу настройки зебрика в своем браузере:

Начните с нажатия на «Kubernetes» под настройкой коллекционера журнала. Это создаст всплывающее окно, похожее на рисунок ниже. Вы должны выбрать для установки с «Helm V3»:

Теперь скопируйте и вставьте команды установки из пользовательского интерфейса Zebrium. При установке Zlog-Collector установите «Zebrium.deployment» на имя, подобное «бутику», и удалите часть линии, которая устанавливает Zebrium.Timezone. См. Пример ниже (убедитесь, что вы используете токен из своего собственного пользовательского интерфейса Zebrium):

# Install the Zebrium log collector by copying and pasting commands from the Zebrium UI.
kubectl create namespace zebrium
helm install zlog-collector zlog-collector --namespace zebrium --repo https://raw.githubusercontent.com/zebrium/ze-kubernetes-collector/master/charts --set zebrium.collectorUrl=https://zapi03.zebrium.com,zebrium.authToken=XXXXX,zebrium.deployment=boutique

Теперь установите коллекционер Metrics Zebrium, нажав на кнопку From Kubernetes под «установкой коллекционера метрик» в пользовательском интерфейсе настройки Zebrium. Еще раз используйте метод Helm V3 и вырежьте и вставьте команды из всплывающего окна пользовательского интерфейса. Обратите внимание, что при выполнении команды установки для Zstats-Collector используйте то же значение, которое вы использовали выше («Бутик») для «Zebrium.deployment»:

# Install the Zebrium metrics collector by copying and pasting commands from the Zebrium UI.
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm install node-exporter --namespace zebrium stable/prometheus-node-exporter
helm install zstats-collector zstats --namespace zebrium --repo https://raw.githubusercontent.com/zebrium/ze-stats/master/charts --set zebrium.collectorUrl=https://zapi03.zebrium.com/stats/api/v1/zstats,zebrium.authToken=XXXX,zebrium.deployment=boutique

Зебриум ML начнет получать и структурировать журналы и метрики из вашей недавно созданной среды K8S.

4. Установить Istio, Prometheus и Kiali

Более подробные инструкции по установке Istio Сервисная сетка можно найти Здесь Анкет Истио и Прометея на самом деле не нужны для демонстрационного приложения, но это позволяет использовать Киали который даст вам действительно хороший графический вид окружающей среды!

Первая загрузка istio:

# Make a directory for this environment
mkdir onlineboutique
cd onlineboutique

# Get the latest version of Istio
curl -L https://istio.io/downloadIstio | sh -

# Check the name of the Istio directory that was created
ls

# go into Istio directory (name in ls output)
cd istio-1.8.0

Теперь установите Istio и Prometheus:

#install istio. Note: if on a Mac and you get a message about istioctl being from an unidentified developer, see the note above.
kubectl create namespace istio-system
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
kubectl label namespace default istio-injection=enabled

# Install Prometheus
kubectl apply -f ./samples/addons/prometheus.yaml

Теперь вы готовы установить и поднять Kiali

# Make sure you are still in the Istio directory from the steps above
kubectl apply -f ./samples/addons/kiali.yaml

Важно- вы можете увидеть кучу ошибок, говорящих что-то вроде: « Невозможно распознать … «. Если так, это известная ошибка Анкет Чтобы исправить это, снова запустите команду Apply, и вы увидите несколько «… созданные» сообщения:

kubectl apply -f ./samples/addons/kiali.yaml

Убедитесь, что все работает:

# Verify that Istio, Prometheus and Kiali pods are running. You should see something similar to below:
kubectl get pods -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
istio-egressgateway-d84f95b69-zghjf     1/1     Running   0          20m
istio-ingressgateway-75f6d79f48-zcpk2   1/1     Running   0          20m
istiod-c9f6864c4-q68bj                  1/1     Running   0          21m
kiali-7476977cf9-jkz6b                  1/1     Running   0          15m
prometheus-7bfddb8dbf-8sg46             2/2     Running   0          19m

Теперь вы можете поднять Киали UI. Он появится на новой вкладке в вашем браузере.

# Bring up the Kiali UI (this will open the UI in a new browser tab)
istioctl dashboard kiali &

5. Время установить и запустить онлайн -бутик -приложение

В приложении есть 12 услуг (AdService, Cardervice, CakeOutservice, CurrenceService, электронный сервис, фронт, нагрузка, платежный сервис, ProductCatalogService, Рекомендации, Redis-Cart и ShippingService), и потребуется несколько минут, чтобы запустить. Во время запуска вы можете увидеть, как некоторые стручки вводят ошибку/Crashloopbackoff несколько раз. Убедитесь, что вы подождите, пока они не в состоянии бега.

# Go back to the directory you created above (onlineboutique)
cd ..

# Clone the Online Boutique repository
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo

# Install the app.
kubectl apply -f ./release/kubernetes-manifests.yaml

# Check to see if everything has started - this takes a few minutes. Keep checking and don't move on until all pods are in a running state
kubectl get pods
adservice-5f6f7c76f5-mnn2v               2/2     Running   0          4m18s
cartservice-675b6659c8-nzrnb             2/2     Running   2          4m19s
checkoutservice-85d4b74f95-jm4z8         2/2     Running   0          4m20s
currencyservice-6d7f8fc9fc-l74nc         2/2     Running   0          4m19s
emailservice-798f4f5575-b72s6            2/2     Running   0          4m20s
frontend-6b64dc9665-g22mp                2/2     Running   0          4m19s
loadgenerator-7747b67b5-8946m            2/2     Running   4          4m19s
paymentservice-98cb47fff-rxqjm           2/2     Running   0          4m19s
productcatalogservice-7f857c47f-kml88    2/2     Running   0          4m19s
recommendationservice-5bf5bcbbdf-9g5l2   2/2     Running   0          4m20s
redis-cart-74594bd569-vbx5h              2/2     Running   0          4m18s
shippingservice-75f7f9dc6c-sfczx         2/2     Running   0          4m18s

Как только все услуги будут запущены, вы можете поднять приложение в своем браузере. Вам нужно будет получить IP -адрес Frontend, выполнив приведенную ниже команду (убедитесь, что вы не забыли команду «Minikube Tunnel» на шаге 1 выше, иначе это не сработает).

#get IP address for boutique and then open EXTERNAL-IP in a browser tab (sample output below)
kubectl get service/frontend-external
NAME                TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
frontend-external   LoadBalancer   10.99.208.30   10.99.208.30   80:32326/TCP   6h8m

Теперь откройте адрес внешнего IP на новой вкладке браузера! И вы должны увидеть онлайн -бутик -приложение:

На вкладке Kiali в вашем браузере нажмите График. В выпадении дисплея выберите «Анимация трафика». Вы должны увидеть что -то вроде изображения ниже:

Важно : А теперь идите и возьмите чашку своего любимого напитка и вернитесь через 10 минут. Да я серьезно! Это даст The Zebrium ML возможность выучить структуры и паттерны, которые возникают в нормальных условиях бега.

6. Переломайте онлайн -бутик -приложение

На приборной панели Kiali вы можете видеть, что большой трафик перемещается через «ProductCatalogService» (выберите анимацию трафика под раскрывающейся дисплеем на панели панели графика Kiali). Итак, давайте убьем ProductCatalogService Pod!

# Kill the productservicecatalog pod by scaling it to zero
kubectl scale deploy productcatalogservice --replicas=0; date

Обратите внимание на время с вывода команды «дата» на шаге выше. Перейдите в свой браузер, и вы должны увидеть, что приложение больше не работает, а на панели мониторинга Kiali много красного:

7. Результаты, достижения

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

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

Когда Зебриум обнаружит инцидент, вы получите предупреждение о слабых (у вас должно быть получено электронное письмо, чтобы присоединиться к рабочее пространство ZebriumCommunity Slack). Вы также можете нажать на Вкладка инцидентов В пользовательском интерфейсе в Zebrium в любое время, чтобы увидеть список обнаруженных инцидентов. Вот как выглядит моя среда:

Инцидент с красной коробкой — это тот, который мы вызвали. Вот как понять список инцидентов (см. Рисунок выше):

  • 1 — показывает время инцидента
  • 2 — показывает хосты и журналы, которые простирается инцидент
  • 3 — показывает первое событие в инциденте. Это часто дает подсказку об основной причине.
  • 4 — показывает худшее событие в инциденте. Обычно это событие, которое человек считает самым серьезным событием в инциденте.

Теперь, чтобы увидеть подробную информацию о том, что было обнаружено, нажмите «

  • 1 — показывает события, которые составляют этот инцидент. Они рассказывают историю о том, что произошло. Примечание, в частности, которая сообщает нам основную причину «Удаленная стручка: ProductCatalogService-7F857C47F-N9CXN»:
  • 2 — показывает связанные показатели. Вы можете видеть, что все внезапно падает одновременно, когда стручка была удалена.
  • 3 — показывает график инцидента. Вы можете нажать на любую из точек, чтобы перейти к этому конкретному событию (это очень полезно, если вы выключите фильтр — см. Ниже)
  • 4 — это шоу поблизости. Это принесет дополнительные аномалии и ошибки, которые наш ML обнаружил поблизости. Это часто помогает предоставить более подробную информацию об инциденте.
  • 5 — кнопка фильтра для инцидента. Нажмите кнопку «Зеленый фильтр», чтобы отключить фильтрацию инцидентов. Это покажет вам все события журнала вокруг вашей текущей позиции.

8. Дополнительная очистка экземпляра Minikube K8S

Когда вы закончите с тестированием приложения MicroServices, вы можете удалить весь кластер Minikube K8S со следующими командами. Предупреждение, вы не можете отменить этот шаг!

# Stop and delete the minikube K8s cluster - WARNING: you can't undo this!
minikube stop -p boutique
minikube delete -p boutique

Резюме

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

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

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

Оригинал: «https://dev.to/gdcohen/testing-ml-incident-detection-using-a-cloud-native-microservices-app-24f0»