Уроки по инструментарию, Observability-as-Code и OpenTelemetry

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

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

Настоящая инновация заключается в том, чтобы сделать этот процесс максимально эффективным. После определения проблемы (что не работает) вы можете задать два вопроса: почему это не работает и где находится проблема? Например, приложение не работает (что), потому что не работает API аутентификации (почему) и не работает сервер API (где >).

Конечно, в реальной жизни задачи сложнее, чем в предыдущем примере. Именно об этом была конференция FutureStack — о том, как мы используем различные типы инструментов мониторинга программного обеспечения, такие как New Relic, AppDynamics и Datadog, для выявления основной причины и устранения проблем.

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

  1. Инструментарий. Это процесс добавления ведения журналов и мониторинга к приложениям для лучшего понимания их производительности.
  2. Наблюдаемость как код. Это процесс создания ресурсов наблюдения (панелей мониторинга, предупреждений) с использованием кода для сбора, регистрации и мониторинга информации при создании новых ресурсов инфраструктуры или приложений.
  3. OpenTelemetry. Это набор инструментов, API и SDK с открытым исходным кодом и независимых поставщиков для создания и сбора данных телеметрии (журналы, метрики и трассировки) из приложений.

Давайте погрузимся!

1. Инструменты

Software Instrumentation — это часть программного обеспечения, которое может собирать, регистрировать и отслеживать информацию о производительности другого программного обеспечения. Например, вы могли быть знакомы с агентом AppDynamics или агентом Datadog. В New Relic это тоже делается через разных агентов, например:

  • APM (управление производительностью приложений): мониторинг приложений Java, Python и других.
  • Мониторинг инфраструктуры: Linux, Windows, Kubernetes, Amazon, Azure и другие.

После установки эти агенты могут отправлять данные в New Relic на основе параметров инструментирования. Затем разработчики могут просматривать и анализировать эти данные, чтобы устранять проблемы и вносить постоянные улучшения.

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

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

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

2. Наблюдаемость как код

После того, как вы выясните проблему с помощью инструментария, вам нужно выяснить, почему проблема возникает и где она возникает. И в идеале вы хотите, чтобы этот процесс был автоматизирован, чтобы вам не приходилось делать это вручную каждый раз, когда что-то ломается. Вот тут-то и появляется Observability-as-Code (OaC).

Питер Марелас, главный архитектор Азиатско-Тихоокеанского региона и Японии в New Relic, объясняет разницу между мониторингом и наблюдаемостью простым, но эффективным способом:

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

Anything-as-Code — это пример автоматизации программного обеспечения, поскольку он может автоматизировать повторяющиеся задачи. OaC аналогичен и сам отвечает на вопросы почему и где, предоставляя нам дополнительную информацию, такую ​​как журналы, метрики и трассировки или распределенную трассировку для распределенных систем. Вот почему журналы, метрики и трассировки известны как три столпа наблюдаемости.

Как этот процесс автоматизируется? Давайте в качестве примера рассмотрим другую систему как код, инфраструктуру как код (IaC).

Как правило, инфраструктура относится к компьютерным ресурсам, таким как аппаратное обеспечение (ЦП, ОЗУ, хранилище) и программное обеспечение (например, операционные системы). Нам нужны эти ресурсы, чтобы мы могли развертывать и запускать наши приложения.

IaC — это метод создания, настройки, управления ресурсами и развертывания приложения с использованием кода, такого как JavaScript, TypeScript , Python, Go, язык конфигурации HashiCorp. Например, мы можем создавать такие ресурсы, как виртуальные машины, сети и балансировщики нагрузки, а также настраивать и управлять ими, например,добавляя или удаляя виртуальные машины с помощью кода.

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

Теперь давайте поближе познакомимся с OaC. Как и IaC, OaC позволяет нам установить наблюдаемость с помощью кода. Так что, как разработчик, вы можете автоматизировать задачи, которые будут более эффективными и менее подверженными ошибкам.

Например, с помощью Observability-as-Code мы можем создавать ресурсы для наблюдения (панели мониторинга, оповещения), используя код для сбора, регистрации и мониторинга информации при создании новых ресурсов инфраструктуры или приложений. Такие инструменты, как Terraform, можно использовать для создания информационных панелей с помощью кода при развертывании новых приложений для мониторинга производительности.

Все-as-Code создает повторяемый процесс. В результате вы можете эффективно масштабировать и поддерживать различные ресурсы. Вот почему стоит знать, как работает OaC, и внедрить его в свой бизнес, а не внедрять вручную.

3. Открыть телеметрию

OpenTelemetry (OTel) — это платформа наблюдения с открытым исходным кодом, основанная на двух других проектах с открытым исходным кодом OpenCensus и OpenTracing. OTel включает в себя набор инструментов, API и SDK. Он используется для инструментирования, генерации, сбора и экспорта данных телеметрии, поддерживаемых различными поставщиками, такими как New Relic, AppDynamics и Datadog.

OTel поддерживает инструменты для нескольких языков, включая Java, Python, C# и другие. После инструментирования желаемого приложения OTel создаст журналы, метрики и трассировки. После этого мы можем использовать эти открытые данные телеметрии следующими двумя способами.

Во-первых, отправьте данные телеметрии поставщику, например New Relic, для мониторинга и анализа.

Во-вторых, отправьте данные телеметрии в Коллектор OpenTelemetry. Он может получать, обрабатывать и экспортировать данные телеметрии одному или нескольким поставщикам для мониторинга и анализа.

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

Надеюсь, вы узнали что-то новое из этого поста и нашли информацию полезной! Эти уроки ясно показывают, что нам необходимо оснастить наши приложения инструментами для мониторинга, установки предупреждений и устранения проблем, связанных с производительностью. Кроме того, мы можем использовать Observability-as-Code для автоматизации инструментовки, устранения повторяющихся задач и эффективного масштабирования.

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

Что дальше? Как программист, вы должны сначала изучить вашу текущую систему мониторинга. После первоначальной оценки вы можете изучить области улучшения, используя Instrumentation, Observability-as-Code и OpenTelemetry.

Удачного кодирования!

Ресурсы

[1] https://www.bigmarker.com/the-misfits-media/FutureStack-2022-Data-talks-1

[2] https://newrelic.com/futurestack-2022-highlights

[3] https://opentelemetry.io/