Используйте Prometheus и Grafana для визуализации показателей ваших микросервисов

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

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

Эта история является продолжением статьи Как использовать Istio для внедрения ошибок для устранения неполадок микросервисов в Kubernetes. Сегодня давайте обсудим сбор и визуализацию сервисной сетки Istio с помощью Прометей и Графана.

Как Istio собирает показатели?

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

Поскольку весь трафик проходит через эти прокси, они отправляют данные телеметрии в Prometheus, которые можно хранить и визуализировать с помощью таких инструментов, как Grafana.

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

Предпосылки

Мы также будем использовать приложение Bookinfo в этой задаче и генерировать некоторый трафик. Затем мы запросим метрики с помощью Prometheus и визуализируем данные телеметрии с помощью Grafana.

Убедитесь, что вы используете кластер Kubernetes и поверх него установлен Istio. Следуйте руководству Начало работы с Istio в Kubernetes и убедитесь, что вы выполнили все задачи из руководства и развернули приложение Bookinfo.

Сбор данных телеметрии

Служба ratings-v2 может подключаться к внутреннему серверу базы данных MongoDB. Давайте воспользуемся этим, чтобы смоделировать реалистичную ситуацию с интерфейсом и сервером.

Установите службу ratings-v2:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
serviceaccount/bookinfo-ratings-v2 created
deployment.apps/ratings-v2 created

Теперь установите службу mongodb:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-db.yaml
service/mongodb created
deployment.apps/mongodb-v1 created

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

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created

Следующим шагом является предоставление микросервисов с помощью виртуальных сервисов. Давайте сначала посмотрим на файл YAML.

Как вы видите в YAML, весь reviews трафик должен идти к reviews-v3, а весь ratings трафик к ratings-v2.

Примените виртуальную службу, запустив следующее:

$ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-db.yaml
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created

Отправить трафик

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

Посетите страницу продукта и обновите страницу в браузере несколько раз, чтобы привлечь трафик.

Метрики запроса с использованием Prometheus

Раскройте Prometheus через прокси-сервер переадресации портов.

$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
[1] 910
$ Forwarding from 127.0.0.1:9090 -> 9090

Теперь откройте ссылку http://127.0.0.1:9090 в своем браузере.

Если вы понимаете язык запросов Prometheus, мы можем выполнить поиск по определенной метрике, просто введя имя параметра.

Начнем с ввода istio_tcp_connections_opened_total.

А что насчет istio_tcp_connections_closed_total?

Давайте посмотрим на общее количество запросов с помощью istio_requests_total, но на этот раз посмотрим на графическое представление. Перейдите на вкладку «График», введите метрику в поле поиска и нажмите «Выполнить».

Давайте теперь попробуем несколько сложных запросов. Как насчет всех запросов к микросервису reviews-v3?

istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}

А скорость запросов к микросервису productpage?

rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])

Как видите, мы успешно можем собирать и запрашивать метрики телеметрии с помощью Prometheus.

Визуализируйте метрики с помощью Grafana

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

Раскройте Grafana через прокси-сервер переадресации портов.

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &

Откройте URL-адрес в браузере.

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

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

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

Теперь генерируйте некоторый трафик, обновляя страницу продукта несколько раз, и вы должны увидеть, что панель управления Grafana начала показывать показатели.

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

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

Поздравляю! Вы завершили задание по визуализации показателей своих микросервисов с помощью Prometheus и Grafana.

Заключение

Спасибо, что прочитали! Надеюсь, вам понравилась статья. В следующей части мы обсудим Как укрепить ваши микросервисы в Kubernetes с помощью Istio », так что до встречи в следующей истории!