Использование AWS CloudWatch
Когда ваше приложение готово к развертыванию в производственной среде, отслеживание каждой связанной с ним деятельности существенно влияет на его производительность. Возможно, вам потребуется проанализировать загрузку ЦП сервера, пропускную способность сети, количество подключений, которые он обслуживает одновременно, и так далее.
AWS предоставляет службу мониторинга CloudWatch, которая позволит вам отслеживать различные метрики для серверов, на которых размещено ваше приложение, и сохранять эти метрики для последующего анализа. Однако ваше приложение может создавать настраиваемые внутренние журналы, связанные с различными бизнес-событиями: выполняются ли они должным образом, как долго выполняется каждое бизнес-событие и т. Д., И вы хотите централизовать процесс мониторинга журналов, отправляя каждый журнал в тот же монитор, а также агрегировать данные для дальнейшего анализа.
Чтобы продемонстрировать эту возможность CloudWatch, я буду использовать AWS Java SDK для создания простого приложения Spring Boot, которое будет измерять время, необходимое для выполнения действия, и публиковать метрики в CloudWatch. Обратите внимание, что метрики будут доступны CloudWatch в виде временных рядов, которые вы сможете анализировать в дальнейшем. Этот вариант использования может быть полезен при создании архитектуры решения MicroService и при необходимости измерить время, необходимое для бизнес-события, которое включает в себя несколько обращений к другим службам для завершения.
Стоит отметить, что по умолчанию у нас есть разрешение на публикацию показателей через интерфейс командной строки или API AWS. Чтобы продемонстрировать это, я создал настраиваемую политику, которая будет явно отказывать в разрешении на публикацию показателей в CloudWatch, как показано ниже, и если я назначу эту политику пользователю IAM, я не смогу публиковать данные настраиваемых показателей. через интерфейс командной строки или SDK.
Сначала я создал пользователя IAM с разрешениями EC2 (так как я также собираю метрики из экземпляров EC2, но не буду показывать это в этой статье). Я также создал простое приложение Spring Boot с зависимостью AWS CloudWatch и буду использовать принципы АОП, чтобы добавить логирование в существующий код. Полный исходный код демонстрационного сервиса и функции регистрации метрик доступен по ссылке this.
Дополнительное поведение, упомянутое выше, будет измерять время, необходимое для выполнения бизнес-функции, в нашем случае симуляции функции биллинга, и публиковать эту метрику в CloudWatch.
Метрики CloudWatch сгруппированы по пространству имен, и все сервисы AWS публикуют свои метрики в пространстве имен /aws
(например, экземпляры EC2 публикуют метрики в пространстве имен /aws/ec2
), поэтому мы не можем использовать это пространство имен для наших настраиваемых журналов. Вместо этого мы будем использовать собственный для нашей биллинговой службы: /APP_NAME/billing-service
. Обратите внимание, что в этом сценарии у нас может быть приложение с несколькими службами и сгруппировать все метрики, генерируемые каждой службой, в одном пространстве имен - имени приложения APP_NAME
.
В следующем фрагменте кода показан процесс ведения журнала для настраиваемой метрики. Я постараюсь подробно объяснить каждую часть кода.
Запрос PutMetricData
выполняется в описанном ранее пространстве имен. Для запроса требуется MetricDatum
объект, который будет содержать данные метрики - ее имя и значение. Теперь для каждого объекта данных метрики нам нужно предоставить один или несколько Dimension
, которые также будут содержать данные «ключ-значение» для дальнейшей классификации метрики. Это может быть Server Id
, на котором запущена служба (поскольку мы говорим об архитектуре MicroService, эту службу можно масштабировать по горизонтали на несколько серверов для обеспечения высокой доступности).
В следующем коде показан простой тест, который вызывает метод журнала со случайными данными.
В пользовательском интерфейсе CloudWatch, как показано на изображениях ниже, в меню Metrics
слева мы можем заметить настраиваемое пространство имен только с одной метрикой, которая будет ServerId
и будет содержать данные, регистрируемые каждым сервером.
Как я упоминал ранее, несколько серверов с разными идентификаторами могут публиковать метрики в одном и том же пространстве имен. На следующем изображении показана панель управления CloudWatch, которая отслеживает два экземпляра биллинговой службы.
Спасибо, что прочитали эту статью, и я надеюсь, что она окажется для вас полезной.
Заботиться
Ресурсы
CloudWatch - AWS
CloudWatch Java SDK - AWS