Как работает OpenTelemetry: трассировка, метрики и журналы в Kubernetes

Хроносфера спонсировала этот пост.

В этом отрывке из первой главы книги Мэннинга «Разработка платформ в Kubernetes» рассматривается среда Kubernetes, устанавливается пример приложения для конференций с помощью одной команды, проверяется работоспособность и изучаются базовые примитивы — развертывания, наборы реплик, сервисы и обнаружение сервисов — при этом решаются такие реальные проблемы, как нулевое время простоя, отказоустойчивость, согласованность состояния/данных, безопасность/идентификация и понимание поведения приложения. Чтобы прочитать полную главу, вы можете скачать книгу.

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

Сообщество OpenTelemetry (OTel) развивалось вместе с Kubernetes и теперь может предоставить большинство инструментов, которые вам понадобятся для мониторинга работы ваших сервисов. Как указано на его веб-сайте: «Вы можете использовать его для инструментирования, генерации, сбора и экспорта данных телеметрии (метрики, журналы и трассировки) для анализа, чтобы понять производительность и поведение вашего программного обеспечения».

Метрики, журналы и трассировки

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

Рис. 1. Объединение наблюдаемых данных со всех сервисов в одном месте снижает когнитивную нагрузку на команды, ответственные за поддержание работоспособности приложения. (Источник: «Разработка платформ в Kubernetes».)

OpenTelemetry в Kubernetes: основные концепции для инженеров платформ

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

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

Рисунок 2. Мониторинг данных телеметрии с помощью Prometheus и Grafana. (Источник: «Разработка платформ в Kubernetes».)

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

Коллектор OpenTelemetry: шаблоны приема, обработки и экспорта

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

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

Рисунок 3. Архитектура и библиотека OpenTelemetry. (Источник: документы OpenTelemetry.)

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

Безопасность приложений и управление идентификацией

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

Распространение идентификационных данных в распределенных системах и OAuth2 на границе

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

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

На рисунке ниже показана интерфейсная служба, взаимодействующая со службой управления идентификацией, которая отвечает за подключение к поставщику удостоверений (например, Google, GitHub, вашему внутреннему серверу LDAP) для проверки учетных данных пользователя, а также для предоставления ролей или членства в группах, которые определяют, что пользователь может и не может делать в различных службах. Интерфейсная служба обрабатывает поток входа в систему (аутентификацию и авторизацию), но после этого на серверные службы передается только контекст.

Рисунок 4. Управление идентификацией: роль/группа распространяется на серверные службы. (Источник: «Разработка платформ в Kubernetes».)

Конфиденциальность, вход в социальные сети и поставщики единого входа/идентификации

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

Некоторые популярные решения, такие как Keycloak и Zitadel, объединяют OAuth2 и управление идентификацией. Эти проекты с открытым исходным кодом предоставляют комплексный подход к решениям единого входа (SSO) и расширенному управлению идентификацией. Zitadel также предоставляет управляемую услугу, которую вы можете использовать, если не хотите устанавливать и поддерживать компонент единого входа и управления идентификацией внутри своей инфраструктуры.

То же самое относится и к отслеживанию и мониторингу. Планирование включения пользователей, включая SSO и управление идентификацией, в ходячий скелет заставит вас задуматься о специфике того, «кто и что сможет делать», что еще больше усовершенствует ваш вариант использования.

Узнать больше

Благодаря подключению OTel к вашему «ходячему скелету» Kubernetes у вас есть возможность быстро выявлять регрессии, проверять SLO и сокращать среднее время разрешения (MTTR) — до того, как сработает пейджер.

Если вам нужен комплексный сценарий, включающий развертывание в кластерах Kubernetes, CI/CD, шаблоны сборщиков, идентификацию, конвейеры доставки и мультиоблачную инфраструктуру, загрузите полную электронную книгу Мэннинга и продолжайте разработку.

Хроносфера — это платформа наблюдения, созданная для контроля в современном контейнерном мире. Признанная крупными аналитическими фирмами лидером, ChronSphere дает клиентам возможность сосредоточиться на данных и знаниях, которые важны для снижения сложности данных, оптимизации затрат и более быстрого устранения проблем. Узнайте больше Последние новости ChronSphere ТЕНДЕНЦИОННЫЕ ИСТОРИИ YOUTUBE.COM/THENEWSTACK Технологии развиваются быстро, не пропустите ни одной серии. Подпишитесь на наш канал YouTube, чтобы смотреть все наши подкасты, интервью, демонстрации и многое другое. ПОДПИСАТЬСЯ Группа, созданная в Sketch. Маурисио Салатино — автор книги «Разработка платформ в Kubernetes». Он является инженером-программистом в Diagrid и ранее работал в VMware и Red Hat. Будучи энтузиастом открытого исходного кода, Маурисио Салатино был членом программного комитета, председателем совета… Читать далее от Маурисио Салатино

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *