Нет лучшего способа попробовать обнаружение инцидентов с инцидентами с помощью инцидента с рынком, чем с производственным применением, которое испытывает проблему. Машечковое обучение не только обнаружит проблему, но и покажет свою основную причину. Но ни один пользователь не хочет вызвать проблему в своем приложении, просто чтобы испытать магию нашей технологии! Таким образом, хотя это является вторым лучшим, альтернативой является попробовать зебрику с образцом реального приложения, сломать приложение, а затем посмотреть, что обнаруживает зебрик. Один из наших клиентов любезно представил нас в демо -приложение 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»