О Наблюдаемости Микросервисов В Kubernetes



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

Привет, Хабр.

В рамках курса «Микросервисная архитектура» Мы подготовили для вас перевод материала.

Также приглашаем вас на открытый вебинар по теме «Распределенные очереди сообщений на примере Kafka».



О наблюдаемости микросервисов в Kubernetes




Вам нужны наблюдаемые микросервисы, но вы еще не знаете, как реализовать их с помощью Kubernetes? Что ж.

возможно, это именно та статья, которую вы искали.

Для начала давайте разберемся, что такое наблюдаемость.

Этот термин возник в области разработки систем управления и определялся как «мера того, насколько хорошо внутренние состояния системы могут быть определены на основе информации о ее внешних выходных данных».

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

Наблюдаемость опирается на три столпа:

  • Журналы событий: запись событий, произошедших в системе.

    События дискретны и содержат метаданные о системе на момент их возникновения.

  • Отслеживание: система обычно состоит из множества частей/компонентов, которые работают согласованно, выполняя определенные важные функции.

    Мониторинг потока запросов и ответов через распределенные компоненты имеет решающее значение для эффективной отладки и устранения неполадок определенных функций.

  • Метрики: производительность системы, измеренная за определенный период времени.

    Они отражают качество обслуживания системы.

Теперь к насущному вопросу — как все это реализовать для наших микросервисов в кластере Kubernetes?

Микросервисы — приложение Kubernetes

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

Давайте рассмотрим микросервисное приложение, предоставляющее информацию о погоде для определенного города.



О наблюдаемости микросервисов в Kubernetes

  • Weather-front: компонент, состоящий из фронтенда с интерфейсом для ввода названия города и просмотра информации о погоде.

    Смотрите скриншот выше.

  • Метеорологические службы: компонент, который принимает название города в качестве входных данных и вызывает внешний API погоды для получения информации о погоде.

  • Weather-db: это компонент базы данных Maria, в котором хранятся данные о погоде, полученные для города, отслеживаемого в фоновом режиме.

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

  
  
  
  
  
  
  
  
   

kubectl get deploy

.



О наблюдаемости микросервисов в Kubernetes

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

Погодный фронт:

- image: brainupgrade/weather:microservices-front imagePullPolicy: Always name: weather-front

Погодные службы:

- image: brainupgrade/weather-services:2.0.0 imagePullPolicy: Always name: weather-services

Погода-БД:

- image: mariadb:10.3 name: mariadb ports: - containerPort: 3306 name: mariadb



Наблюдаемость — первый компонент — журналы событий

Чтобы реализовать первый принцип наблюдаемости, нам нужно установить стек EFK: Elasticsearch, Fluentd и Kibana. Ниже приведены простые шаги установки.

Elasticsearch и Кибана:

helm repo add elastic https://helm.elastic.co helm repo update helm install --name elasticsearch elastic/elasticsearch --set replicas=1 --namespace elasticsearch helm install --name kibana elastic/kibana

свободно владеет:

containers: - name: fluentd imagePullPolicy: "Always" image: fluent/fluentd-kubernetes-daemonset:v1.12.0-debian-elasticsearch7-1.0 env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch-master.elasticsearch.svc.cluster.local" - name: FLUENT_ELASTICSEARCH_PORT value: "9200"

После установки вы можете запустить панель управления Kibana, которая будет выглядеть как на скриншоте ниже:

О наблюдаемости микросервисов в Kubernetes

Когда вы запустите Fluentd, вы увидите следующее (Fluentd работает как Daemonset — скриншот 4):

О наблюдаемости микросервисов в Kubernetes

Вскоре логи начнут публиковаться в Elasticsearch. Их можно посмотреть в Кибане:

О наблюдаемости микросервисов в Kubernetes

Первый принцип наблюдаемости реализован, поэтому давайте сосредоточимся на следующем — распределенной трассировке.



Наблюдаемость – второй компонент – (распределенная) трассировка

Для распределенной трассировки у нас есть несколько альтернатив — Java-приложения, такие как Zipkin, Jaeger, Elasticsesarch APM и т. д. Поскольку у нас уже есть стек EFK, давайте воспользуемся APM, предоставленным Elasticsearch. Сначала давайте запустим сервер APM как развертывание Kubernetes. Код развертывания эластичного сервера APM:

containers: - name: apm-server image: docker.elastic.co/apm/apm-server:7.5.0 ports: - containerPort: 8200 name: apm-port

Как только сервер APM заработает, мы должны неинвазивно добавить агент APM в наши микросервисы.

См.

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

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

Код агента APM для микросервиса прогнозирования погоды:

initContainers: - name: elastic-java-agent image: docker.elastic.co/observability/apm-agent-java:1.12.0 volumeMounts: - mountPath: /elastic/apm/agent name: elastic-apm-agent command: ['cp', '-v', '/usr/agent/elastic-apm-agent.jar', '/elastic/apm/agent'] containers: - image: brainupgrade/ weather:microservices-front imagePullPolicy: Always name: weather-front volumeMounts: - mountPath: /elastic/apm/agent name: elastic-apm-agent env: - name: ELASTIC_APM_SERVER_URL value: " http://apm-server.elasticsearch.svc.cluster.local:8200 " - name: ELASTIC_APM_SERVICE_NAME value: "weather-front" - name: ELASTIC_APM_APPLICATION_PACKAGES value: "in.brainupgrade" - name: ELASTIC_APM_ENVIRONMENT value: prod - name: ELASTIC_APM_LOG_LEVEL value: DEBUG - name: JAVA_TOOL_OPTIONS value: - javaagent:/elastic/apm/agent/elastic-apm-agent.jar

После повторного развертывания компонентов микросервиса вы можете перейти в консоль Observability -> APM в Kibana, чтобы посмотреть, как появляются сервисы (см.

скриншот 6).



О наблюдаемости микросервисов в Kubernetes

После того, как вы нажмете на службу Weather Front, вы сможете увидеть транзакции:

О наблюдаемости микросервисов в Kubernetes

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

О наблюдаемости микросервисов в Kubernetes



О наблюдаемости микросервисов в Kubernetes

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

Нажав кнопку «Образец трассировки», вы увидите подробную информацию о транзакции.



О наблюдаемости микросервисов в Kubernetes

Раскрывающийся список «Действия» в сведениях о транзакции предоставляет возможность просмотра журналов для этой конкретной транзакции.



О наблюдаемости микросервисов в Kubernetes

Что ж, на данный момент мы рассмотрели два из трех столпов наблюдаемости.



Наблюдаемость – третий компонент – метрики

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



О наблюдаемости микросервисов в Kubernetes

Кроме того, мы можем использовать плагин Spring Boot Prometheus Actuator для сбора данных метрик.

Для этого сначала установите Prometheus и Grafana, используя следующие простые команды: Прометей и Графана:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm install --name prometheus prometheus-community/prometheus helm install --name grafana grafana/grafana

После запуска Prometheus и Grafana вам необходимо добавить приведенный ниже код в свои микросервисы и повторно развернуть:

template: metadata: labels: app: weather-services annotations: prometheus.io/scrape: "true" prometheus.io/port: "8888" prometheus.io/path: /actuator/prometheus containers: - image: brainupgrade/weather-services:2.0.0 imagePullPolicy: Always name: weather-services volumeMounts: - mountPath: /elastic/apm/agent name: elastic-apm-agent env: - name: management.endpoints.web.exposure.include value: "*" - name: spring.application.name value: weather-services - name: management.server.port value: "8888" - name: management.metrics.web.server.request.autotime.enabled value: "true" - name: management.metrics.tags.application value: weather-services

После повторного развертывания микросервисов откройте Grafana, импортируйте панель приборов с идентификатором 12685 и выберите микросервис, метрики которого вы хотите просмотреть.

На скриншоте ниже показан погодный фронт:

О наблюдаемости микросервисов в Kubernetes

А чтобы увидеть метрики по всему кластеру, импортируйте панель приборов Grafana с идентификатором 6417 и вы увидите что-то вроде:

О наблюдаемости микросервисов в Kubernetes




Узнайте больше о курсе «Микросервисная архитектура» .

Посмотрите открытый вебинар по теме «Распределенные очереди сообщений на примере Kafka».

Теги: #Kubernetes #Микросервисы #руководство #архитектура микросервисов #наблюдаемость #метрика
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.