Наши клиенты хотят, чтобы их пользователи получали максимальное удовольствие от запуска своего приложения на AWS. Чтобы это произошло, вам необходимо как можно быстрее отслеживать и устранять проблемы с программным обеспечением. Это усложняется из-за растущего объема данных, которые необходимо быстро обнаруживать, анализировать и сохранять. В этом посте мы познакомим вас с автоматизированным процессом сбора и мониторинга данных приложений ведения журналов в режиме, близком к реальному времени, чтобы вы могли быстрее устранять проблемы с приложениями.
В этом посте показано, как унифицировать и централизовать журналы на разных вычислительных платформах. С помощью этого решения вы можете унифицировать журналы из Эластичное вычислительное облако Amazon (Амазон EC2), Amazon Elastic Контейнерный Сервис (Амазон ЭКС), Амазон Эластик Кубернетес Сервис (Амазон ЭКС), Пожарный шланг данных Amazon Kinesisи AWS Lambda с помощью агентов, маршрутизаторов журналов и расширений. Мы используем Сервис Amazon OpenSearch (преемник Amazon Elasticsearch Service) с инструментальными панелями OpenSearch для визуализации и анализа журналов, собранных на разных вычислительных платформах, для получения информации о приложениях. Вы можете развернуть решение с помощью Комплект для разработки облачных сервисов AWS (AWS CDK), предоставляемые как часть решения.
преимущества для клиентов
Единая агрегированная система журналов дает следующие преимущества:
- Единая точка доступа ко всем журналам на разных вычислительных платформах
- Помогите определить и стандартизировать преобразования журналов, прежде чем они будут доставлены в нижестоящие системы, такие как Простой сервис хранения Amazon (Amazon S3), Amazon OpenSearch Service, Амазонка Redshift, и другие услуги
- Возможность использовать Amazon OpenSearch Service для быстрого индексирования и OpenSearch Dashboards для поиска и визуализации журналов с маршрутизаторов, приложений и других устройств.
Обзор решения
В этом посте мы используем следующие сервисы для демонстрации агрегации журналов на разных вычислительных платформах:
- Amazon EC2 – Веб-служба, обеспечивающая безопасные вычислительные мощности с изменяемым размером в облаке. Он предназначен для упрощения облачных вычислений в веб-масштабе для разработчиков.
- Амазон ЭКС – веб-сервис, упрощающий запуск, масштабирование и управление контейнерами Docker на AWS, разработанный для облегчения работы с Docker для разработчиков.
- Амазон ЭКС – Веб-сервис, упрощающий запуск, масштабирование и управление контейнерами Docker на AWS.
- Пожарный шланг Kinesis Data – Полностью управляемый сервис, упрощающий потоковую передачу данных в Amazon S3, Amazon Redshift или Amazon OpenSearch Service.
- Лямбда – Служба вычислений, позволяющая запускать код без выделения серверов или управления ими. Он предназначен для упрощения облачных вычислений в веб-масштабе для разработчиков.
- Сервис Amazon OpenSearch – Полностью управляемая служба, упрощающая интерактивный анализ журналов, мониторинг приложений в реальном времени, поиск по веб-сайтам и многое другое.
На следующей диаграмме показана архитектура нашего решения.
В архитектуре используются различные инструменты агрегирования журналов, такие как агенты журналов, маршрутизаторы журналов и расширения Lambda, для сбора журналов с нескольких вычислительных платформ и доставки их в Kinesis Data Firehose. Kinesis Data Firehose передает журналы в Amazon OpenSearch Service. Записи журнала, которые не удалось сохранить в сервисе Amazon OpenSearch, будут записаны в AWS S3. Чтобы масштабировать эту архитектуру, каждая из этих вычислительных платформ передает журналы в другой поток доставки Firehose, добавляется как отдельный индекс и обновляется каждые 24 часа.
В следующих разделах показано, как решение реализовано на каждой из этих вычислительных платформ.
Amazon EC2
Агент Kinesis собирает журналы приложений, работающих на инстансах EC2, и передает их в Kinesis Data Firehose. Агент представляет собой автономное программное приложение Java, которое предлагает простой способ сбора и отправки данных в Kinesis Data Firehose. Агент постоянно отслеживает файлы и отправляет журналы в поток доставки Firehose.
Сценарий AWS CDK, предоставляемый как часть этого решения, развертывает простое приложение PHP, которое создает журналы под /etc/httpd/logs
каталог на экземпляре EC2. Агент Kinesis настраивается через /etc/aws-kinesis/agent.json
собирать данные из access_logs
и error_logs
, и периодически передавать их в Kinesis Data Firehose (ec2-logs-delivery-stream
).
Поскольку Amazon OpenSearch Service ожидает данные в формате JSON, вы можете добавить вызов функции Lambda для преобразования данных журнала в формат JSON в Kinesis Data Firehose перед потоковой передачей в Amazon OpenSearch Service. Ниже приведен пример ввода для преобразователя данных:
Наш вывод следующий:
Мы можем улучшить функцию Lambda, чтобы извлекать метку времени, информацию о HTTP и браузере из данных журнала и сохранять их как отдельные атрибуты в документе JSON.
Амазон ЭКС
В случае с Amazon ECS мы используем FireLens для отправки журналов непосредственно в Kinesis Data Firehose. FireLens — это контейнерный маршрутизатор журналов для Amazon ECS и АМС Фаргейт это дает вам возможность использовать весь спектр сервисов AWS или партнерских решений для аналитики и хранения журналов.
Архитектура использует FireLens в качестве вспомогательного компонента, который собирает журналы из основного контейнера, на котором запущено приложение httpd, и отправляет их в Kinesis Data Firehose, а затем передает в Amazon OpenSearch Service. Сценарий AWS CDK, предоставляемый как часть этого решения, развертывает контейнер httpd, размещенный за Application Load Balancer. Журналы httpd передаются в Kinesis Data Firehose (ecs-logs-delivery-stream
) через маршрутизатор журналов FireLens.
Амазон ЭКС
После недавнего объявления о поддержке Fluent Bit для Amazon EKS вам больше не нужно запускать sidecar для маршрутизации журналов контейнеров из модулей Amazon EKS, работающих на Fargate. Благодаря новой встроенной поддержке ведения журнала вы можете выбрать место назначения по вашему выбору для отправки записей. Amazon EKS на Fargate использует версию Fluent Bit для AWS — дистрибутив Fluent Bit, совместимый с основной ветвью, управляемый AWS.
Сценарий AWS CDK, предоставляемый как часть этого решения, развертывает контейнер NGINX, размещенный за внутренним балансировщиком нагрузки приложений. Журналы контейнера NGINX передаются в Kinesis Data Firehose (eks-logs-delivery-stream
) через плагин Fluent Bit.
Лямбда
Для функций Lambda вы можете отправлять журналы непосредственно в Kinesis Data Firehose с помощью расширения Lambda. Вы можете запретить запись записей в Amazon CloudWatch.
После развертывания рабочий процесс выглядит следующим образом:
- При запуске расширение подписывается на получение журналов событий платформы и функций. Внутри внешнего расширения запускается локальный HTTP-сервер, который получает логи.
- Расширение буферизует события журнала в синхронизированной очереди и записывает их в Kinesis Data Firehose с помощью записей PUT.
- Журналы отправляются в нижестоящие системы.
- Журналы отправляются в Amazon OpenSearch Service.
Имя потока доставки Firehose указывается как переменная среды (AWS_KINESIS_STREAM_NAME
).
Для этого решения, поскольку мы сосредоточены только на сборе журналов выполнения функции Lambda, преобразователь данных потока доставки Kinesis Data Firehose отфильтровывает записи типа function
("type":"function"
) перед отправкой в Amazon OpenSearch Service.
Ниже приведен пример ввода для преобразователя данных:
Предпосылки
Для реализации этого решения вам потребуются следующие предварительные условия:
Создайте код
Проверьте код AWS CDK, выполнив следующую команду:
Создайте расширение лямбда, выполнив следующую команду:
Обязательно замените регион AWS по умолчанию, указанный в значении firehose.endpoint
атрибут внутри lib/computes/ec2/ec2-startup.sh
.
Соберите код, выполнив следующую команду:
Разверните код
Если вы запускаете AWS CDK впервые, выполните следующую команду, чтобы загрузить среду AWS CDK (укажите идентификатор учетной записи AWS и регион AWS):
Вам нужно загрузить AWS CDK только один раз (пропустите этот шаг, если вы уже это сделали).
Выполните следующую команду, чтобы развернуть код:
Вы получите следующий вывод:
AWS CDK позаботится о создании необходимой инфраструктуры, развертывании примера приложения и сборе журналов из разных источников в Amazon OpenSearch Service.
Ниже приводится некоторая ключевая информация о стеке:
- ec2iадрес – Общедоступный IP-адрес экземпляра EC2, развернутого с помощью примера приложения PHP.
- Экслоадбалансерурл – URL-адрес балансировщика нагрузки Amazon ECS, развернутого с помощью приложения httpd.
- екскластерClusterNameCE21A0DB – Имя кластера Amazon EKS, развернутого с помощью приложения NGINX.
- образецлямбдафункция – Пример функции Lambda, использующей расширение Lambda для отправки журналов в Kinesis Data Firehose.
- opensearch-домен-arn – ARN домена Amazon OpenSearch Service.
Создание журналов
Чтобы визуализировать журналы, сначала необходимо создать несколько образцов журналов.
- Чтобы сгенерировать журналы Lambda, вызовите функцию с помощью следующей команды интерфейса командной строки AWS (выполните ее несколько раз):
Не забудьте заменить samplelambdafunction
с фактическим именем функции Lambda. Путь к файлу необходимо обновить в зависимости от базовой операционной системы.
Функция должна вернуть "StatusCode": 200
, со следующим выводом:
- Выполните следующую команду пару раз, чтобы сгенерировать журналы Amazon EC2:
Не забудьте заменить ec2ipaddress
с общедоступным IP-адресом экземпляра EC2.
- Выполните следующую команду пару раз, чтобы сгенерировать журналы Amazon ECS:
Не забудьте заменить ecsloadbalancerurl
с общедоступным ARN балансировщика нагрузки приложений AWS.
Мы развернули приложение NGINX с внутренним балансировщиком нагрузки, поэтому балансировщик нагрузки достигает контрольной точки работоспособности приложения, что достаточно для создания журналов доступа к Amazon EKS.
Визуализируйте журналы
Чтобы визуализировать журналы, выполните следующие действия:
- В консоли Amazon OpenSearch Service выберите гиперссылку, указанную для URL-адреса панели инструментов OpenSearch 7URL.
- Настройте доступ к панели управления OpenSearch..
- Под Панель инструментов OpenSearch, На Ознакомиться меню, начните создавать новый шаблон индекса для каждого журнала вычислений.
Мы можем видеть отдельные индексы для каждого журнала вычислений, разделенные по дате, как на следующем снимке экрана.
На следующем снимке экрана показан процесс создания шаблонов индексов для журналов Amazon EC2.
После создания шаблона индекса мы можем приступить к анализу журналов с помощью Ознакомиться меню в разделе Панель инструментов OpenSearch в панели навигации. Этот инструмент предоставляет единый унифицированный интерфейс с возможностью поиска для всех записей с различными вычислительными платформами. Мы можем переключаться между различными журналами, используя Изменить шаблон индекса подменю.
Убирать
Запустите следующую команду из корневого каталога, чтобы удалить стек:
Заключение
В этом посте мы показали, как унифицировать и централизовать журналы на разных вычислительных платформах с помощью Kinesis Data Firehose и Amazon OpenSearch Service. Такой подход позволяет быстро анализировать журналы и основную причину сбоев, используя единую платформу, а не разные платформы для разных сервисов.
Если у вас есть отзывы об этом посте, оставьте свои комментарии в разделе комментариев.
Полезные ресурсы
Для получения дополнительной информации см. Следующие ресурсы:
Об авторе
Хари Ом Прасат является старшим архитектором модернизации в AWS, помогая клиентам перейти на облачные технологии. Хари любит программировать и активно участвует в инициативах с открытым исходным кодом. Вы можете найти его на Medium, Github и Twitter @hariohmprasath.
Баллу Сингх является главным архитектором решений в AWS. Он живет в районе залива Сан-Франциско и помогает клиентам разрабатывать и оптимизировать приложения на AWS. В свободное время любит читать и проводить время с семьей.
- '
- "
- &
- 100
- 11
- 7
- 9
- О нас
- доступ
- Учетная запись
- через
- адрес
- агенты
- Все
- уже
- Amazon
- Amazon EC2
- аналитика
- Объявление
- Применение
- Приложения
- архитектура
- ПЛОЩАДЬ
- Автоматизированный
- AWS
- стабилизатор
- залив
- не являетесь
- ЛУЧШЕЕ
- Немного
- браузер
- Строительство
- призывают
- Пропускная способность
- заботится
- Вызывать
- облако
- облачных вычислений
- Облако родное
- код
- Сбор
- улавливается
- Комментарии
- Вычисление
- вычисление
- Консоли
- Container
- Контейнеры
- Пара
- Создающий
- Клиенты
- приборная панель
- данным
- поставка
- развертывание
- застройщиков
- Развитие
- различный
- Docker
- Elasticsearch
- Окружающая среда
- События
- надеется
- опыт
- расширения
- семья
- быстрее
- Обратная связь
- фильтры
- Во-первых,
- Впервые
- фиксированный
- формат
- Франциско
- функция
- Функции
- порождать
- идти
- GitHub
- Рост
- Медицина
- помогает
- Как
- How To
- HTTPS
- IAM
- осуществлять
- в XNUMX году
- индекс
- информация
- Инфраструктура
- размышления
- интерактивный
- IP
- IP-адрес
- вопросы
- IT
- Java
- путешествие
- Основные
- Kubernetes
- загрузка
- локальным
- средний
- модернизация
- Мониторинг
- БОЛЕЕ
- Навигация
- NGINX
- Предложения
- открытый
- с открытым исходным кодом
- операционный
- операционная система
- Другое
- партнер
- шаблон
- Платформа
- Платформы
- плагин
- Стручки
- Основной
- процесс
- обеспечивать
- приводит
- что такое варган?
- Reading
- реального времени
- запись
- учет
- замещать
- Полезные ресурсы
- дорога
- Run
- Бег
- Сан -
- Сан-Франциско
- область залива Сан-Франциско
- Шкала
- Поиск
- Услуги
- выключение
- просто
- So
- Software
- Решения
- Расходы
- Начало
- и политические лидеры
- ввод в эксплуатацию
- Область
- Статус:
- диск
- магазин
- потоковый
- потоки
- успех
- поддержка
- Коммутатор
- система
- системы
- Через
- время
- инструментом
- инструменты
- Transform
- пользователей
- ценностное
- версия
- объем
- Web
- Вебсайт
- окна
- в
- без
- рабочий