Полное руководство по развертыванию, ведению журналов, распределенной трассировке, мониторингу производительности и показателей, включая работоспособность кластера.
Привет, Хабр.В рамках курса
«Микросервисная архитектура» Мы подготовили для вас перевод материала.Также приглашаем вас на открытый вебинар по теме
«Распределенные очереди сообщений на примере Kafka».
Вам нужны наблюдаемые микросервисы, но вы еще не знаете, как реализовать их с помощью Kubernetes? Что ж.
возможно, это именно та статья, которую вы искали.
Для начала давайте разберемся, что такое наблюдаемость.
Этот термин возник в области разработки систем управления и определялся как «мера того, насколько хорошо внутренние состояния системы могут быть определены на основе информации о ее внешних выходных данных».
Проще говоря, наблюдаемость подразумевает адекватное понимание системы для облегчения корректирующих действий.
Наблюдаемость опирается на три столпа:
- Журналы событий: запись событий, произошедших в системе.
События дискретны и содержат метаданные о системе на момент их возникновения.
- Отслеживание: система обычно состоит из множества частей/компонентов, которые работают согласованно, выполняя определенные важные функции.
Мониторинг потока запросов и ответов через распределенные компоненты имеет решающее значение для эффективной отладки и устранения неполадок определенных функций.
- Метрики: производительность системы, измеренная за определенный период времени.
Они отражают качество обслуживания системы.
Микросервисы — приложение Kubernetes
Ниже приведен пример, который может служить руководством по созданию собственного приложения на основе микросервисов.Давайте рассмотрим микросервисное приложение, предоставляющее информацию о погоде для определенного города.
- Weather-front: компонент, состоящий из фронтенда с интерфейсом для ввода названия города и просмотра информации о погоде.
Смотрите скриншот выше.
- Метеорологические службы: компонент, который принимает название города в качестве входных данных и вызывает внешний API погоды для получения информации о погоде.
- Weather-db: это компонент базы данных Maria, в котором хранятся данные о погоде, полученные для города, отслеживаемого в фоновом режиме.
.kubectl get deploy
Ниже приведены фрагменты кода, которые будут использоваться для развертывания микросервисов.
Погодный фронт: - 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, которая будет выглядеть как на скриншоте ниже:
Когда вы запустите Fluentd, вы увидите следующее (Fluentd работает как Daemonset — скриншот 4):
Вскоре логи начнут публиковаться в Elasticsearch. Их можно посмотреть в Кибане:
Первый принцип наблюдаемости реализован, поэтому давайте сосредоточимся на следующем — распределенной трассировке.
Наблюдаемость – второй компонент – (распределенная) трассировка
Для распределенной трассировки у нас есть несколько альтернатив — 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).
После того, как вы нажмете на службу Weather Front, вы сможете увидеть транзакции:
Нажмите на любую из транзакций, и вы увидите детализированное представление с более подробной информацией о транзакции, включая задержку, пропускную способность, образец трассировки и т. д.
На приведенном выше снимке экрана показана распределенная трассировка, которая наглядно иллюстрирует взаимосвязь между микросервисами прогноза погоды и метеорологических служб.
Нажав кнопку «Образец трассировки», вы увидите подробную информацию о транзакции.
Раскрывающийся список «Действия» в сведениях о транзакции предоставляет возможность просмотра журналов для этой конкретной транзакции.
Что ж, на данный момент мы рассмотрели два из трех столпов наблюдаемости.
Наблюдаемость – третий компонент – метрики
Для реализации третьего «столпа», то есть метрик, мы можем использовать панель мониторинга сервисов APM, где записываются задержка, пропускная способность и частота ошибок.
Кроме того, мы можем использовать плагин 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 и выберите микросервис, метрики которого вы хотите просмотреть.
На скриншоте ниже показан погодный фронт:
А чтобы увидеть метрики по всему кластеру, импортируйте панель приборов Grafana с идентификатором 6417 и вы увидите что-то вроде:
Узнайте больше о курсе «Микросервисная архитектура» .Теги: #Kubernetes #Микросервисы #руководство #архитектура микросервисов #наблюдаемость #метрикаПосмотрите открытый вебинар по теме «Распределенные очереди сообщений на примере Kafka».
-
Глобальное Распределение Призов Fppp!
19 Oct, 24 -
Drupal Как Игровая Платформа (Часть 1)
19 Oct, 24 -
Скайп Hd 2010
19 Oct, 24 -
Уязвимость Нулевого Дня В Roundcube
19 Oct, 24