Блог Amazon Web Services

Используйте CloudWatch Synthetics для мониторинга сайтов, конечных точек API, выполнения многостраничных сценариев и многого другого

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

Сервис CloudWatch Synthetics (анонсирован на AWS re:Invent 2019) позволяет вам следить за сайтами, конечными точками API, выполнением многостраничных сценариев и многим другим. Вы получаете отчёты с большей прозрачностью в отношении производительности и доступности, так что вы можете узнать о любых проблемах, а затем исправить их быстрее, чем когда-либо прежде. Вы можете повысить удовлетворённость клиентов и быть более уверенными в том, что производительность вашего приложения соответствует вашим целям.

Вы можете начать использовать CloudWatch Synthetics за считанные минуты. Вы просто создаете canaries, которые отслеживают отдельные веб-страницы, многостраничные сценарии, такие как мастера создания чего-либо или формы заказа, а также конечные точки API. При этом метрики хранятся в Amazon CloudWatch, а другие данные (снимки экрана и HTML-страницы) – в S3-бакете. По мере создания canaries можно настроить оповещения CloudWatch таким образом, чтобы получать уведомления о превышении пороговых значений, основанных на производительности, поведении или целостности сайта. Вы можете просматривать скриншоты, HAR-файлы (HTTP-архивы) и логи, чтобы больше узнать об ошибках и как можно быстрее их исправить.

CloudWatch Synthetics в действии
Канарейки (canaries) когда-то использовались для раннего предупреждения о присутствии смертоносных газов в угольной шахте. Canaries, предоставляемые CloudWatch Synthetics, обеспечивают подобное раннее оповещение. Я открываю CloudWatch-консоль и нажимаю раздел Canaries:

И могу оценить общее состояние моих canaries:

В прошлом месяце я создал несколько canaries в рамках подготовки к этой статье в блоге. Я выбрал несколько сайтов, включая домашнюю страницу CNN, мой личный блог, страницу Amazon Movers & Shakers и страницу Amazon Best Sellers. Я не знал, какие сайты дадут наиболее интересные результаты, и уж точно не собирался критиковать ни один из них. Я определенно считаю, что важно показать вам, как этот (и любой другой) функционал работает с реальными данными, так что поехали!

Я могу переключиться на раздел Canary runs и посмотреть результаты отдельных запусков. Каждая точка на графике представляет собой совокупность запусков для одного canary:

Я могу нажать на amzn_movers_shakers canary, чтобы посмотреть детальную информацию:

Я вижу, что за последние 24 часа произошла одна ошибка TimeoutError. Я вижу скриншоты, которые были сделаны во время каждого запуска, а также HAR-файлы и логи. Каждый HAR-файл содержит подробный лог HTTP-запросов, сделанных во время запуска canary, вместе с ответами и количеством времени, которое потребовалось для выполнения запроса:

Каждый запуск canary выполняется с помощью Lambda-функции. Доступ к метрикам выполнения Lambda-функции можно получить на вкладке Metrics:

И я могу найти canary скрипт и другие детали на вкладке Configuration:

Создание canary
Теперь, когда вы увидели canary в действии, позвольте мне показать процесс создания. Я возвращаюсь к списку canaries и нажимаю Create canary. Для создания canary, я могу использовать один из четырёх шаблонов, а также загрузить или импортировать существующий скрипт:

В конечном итоге все эти методы приводят к созданию скрипта, который выполняется либо один раз, либо периодически. Canaries, которые я показал выше, были построены на основе шаблона Heartbeat monitoring, подобного этому:

Я также могу создать canary для конечных точек API, используя либо GET, либо PUT методы, любые желаемые HTTP headers и данные запроса:

Другой шаблон позволяет мне создать canary для проверки веб-страницы на наличие неработающих ссылок (я буду использовать этот пост):

Наконец, мастер создания сценария позволяет мне создать canary со сложным сценарием, который может включать в себя эмуляцию нажатия кнопок мыши, проверку содержимого с помощью CSS-селектора, проверку наличия текста, ввод текста и проверку навигации по другим URL-адресам после нажатия на элементы страницы:

Как видно из этих примеров, canary скрипты используют среду выполнения syn-1.0. Эта среда выполнения поддерживает Node.JS скрипты, которые могут использовать модули Puppeteer и Chromium. Скрипты могут использовать набор библиотечных функций и могут (с соответствующими правами IAM) получать доступ к другим сервисам и ресурсам AWS. Вот пример скрипта, который вызывает AWS Secrets Manager:

var synthetics = require('Synthetics');
const log = require('SyntheticsLogger');

const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();

const getSecrets = async (secretName) => {
    var params = {
        SecretId: secretName
    };
    return await secretsManager.getSecretValue(params).promise();
}

const secretsExample = async function () {
    // Fetch secrets
    var secrets = await getSecrets("secretname")
    
    // Use secrets
    log.info("SECRETS: " + JSON.stringify(secrets));
};

exports.handler = async () => {
    return await secretsExample();
};

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

После того, как я создал свой скрипт, я могу установить расписание выполнения, а также периоды хранения успешных и ошибочных выполнений. Я также выбираю S3-бакет, в котором будут храниться артефакты, создаваемые при каждом запуске canary:

Я также могу настраивать роль IAM, устанавливать оповещения CloudWatch и настраивать доступ к конечным точкам, находящимся в VPC:

Посмотрите демонстрационное видео, чтобы увидеть CloudWatch Synthetics в действии:

Вещи, которые нужно знать
Несколько вещей, которые нужно знать о CloudWatch Synthetics:

Наблюдаемость – Вы можете использовать CloudWatch Synthetics в сочетании с ServiceLens и AWS X-Ray для поиска проблемных частей приложения. Чтобы узнать больше о том, как это сделать, прочитайте Debugging with Amazon CloudWatch Synthetics and AWS X-Ray, а также Using ServiceLens to Monitor the Health of Your Applications.

Автоматизация – Вы можете создавать canaries с помощью веб-консоли, командной строки (aws synthetics), API (CreateCanary, DescribeCanaries и других), а также из шаблонов CloudFormation (AWS::Synthetics::Canary).

Цены – В рамках AWS Free Tier вы получаете 100 бесплатных запусков canary в месяц. После этого вы платите за каждый запуск, цены начинаются с $0.0012 за запуск, плюс обычная плата за хранение данных в S3 и за вызовы Lambda.

Ограничения – Вы можете создать до 100 canaries на аккаунт в каждом из регионов US East (N. Virginia), Europe (Ireland), US West (Oregon), US East (Ohio), и Asia Pacific (Tokyo), а также до 20 canaries на аккаунт в других регионах, где доступны CloudWatch Synthetics.

Уже доступно
Сервис CloudWatch Synthetics доступен уже сейчас, и вы можете начать использовать его уже сегодня!

— Jeff;