Как вы смотрите на вывод Console.Log функции Amazon Lambda?
Вы создаете лямбда-функцию? В настоящее время вы занимаетесь отладкой и задаетесь вопросом, где вы можете получить доступ к выходным данным ваших записей console.log
?
Понимание того, как работают журналы, часто вызывает затруднения при работе с AWS Lambda. Сегодня мы собираемся устранить путаницу и получить ваши журналы AWS Lambda, чтобы вы могли начать отлаживать свою функцию Lambda.
К концу этой статьи вы поймете, как и куда выходные данные console.log поступают из функции AWS Lambda, а также как отладить настройку AWS Lambda, если вы все еще не видите вывод журнала.
Доступ к AWS Lambda Console.Вывод журнала
Существует три основных способа доступа к журналам в AWS Lambda…
- Через консоль AWS,
- С помощью Serverless Framework
- Или с помощью интерфейса командной строки AWS.
Если вы все еще не видите, что ваши журналы приходят, есть несколько шагов отладки, которые вы должны предпринять.
Способ 1. Просмотр журналов в консоли
Самый простой способ просмотреть журналы лямбда-функции AWS — в консоли.
Перейдите на вкладку мониторинга вашей лямбда-функции и нажмите кнопку «Просмотреть журналы в CloudWatch».
Вкладка Lambda Monitoring
Теперь вы должны быть внутри CloudWatch и просматривать выходные данные журнала. В качестве альтернативы вы можете перейти непосредственно в CloudWatch, а не через лямбда-интерфейс. Перейдите в CloudWatch и выберите «группы журналов» в левой панели навигации.
Шаблон имени вашей группы журналов теперь должен быть…
/aws/lambda/yourFunctionName
Группы журналов CloudWatch
Способ 2. Просмотр журналов с помощью Serverless Framework
Иногда вы не хотите прекращать разработку среду для просмотра вывода журнала. Если вы используете бессерверную платформу, вы можете просмотреть вывод журнала своей функции, выполнив команду…
Прочтите документы Serverless Framework для получения дополнительной информации.
Метод 3. Просмотр журналов с помощью интерфейса командной строки AWS
Или, если вы не используете Serverless Framework (а используете обычный AWS), вы можете просматривать журналы с помощью интерфейса командной строки AWS.
Дополнительные сведения см. в документации AWS.
Все еще не видите журналы в CloudWatch?
Возможно, вы обнаружите, что ваша лямбда-выражение по-прежнему не отображает вывод журнала. Вот несколько вещей, которые вы, возможно, захотите перепроверить во время отладки…
Убедитесь, что вы вызвали свою лямбду
Это может показаться очевидным (или нет), но убедитесь, что ваша лямбда также была вызвана, особенно если вы сделали некоторые изменения в вашей настройке Lambda.
Самый простой способ запустить AWS Lambda — выполнить тестовое событие из консоли AWS. Щелкните раскрывающийся список «выберите тестовое событие» и нажмите кнопку «тест», чтобы вызвать вашу лямбду.
Пример триггера Lambda Event
Убедитесь, что вы просматриваете регион Lambda
Группы журналов CloudWatch разделены по регионам, поэтому, если вы находитесь в неправильном регионе, вы не увидите выходные данные журнала. Убедитесь, что вы смотрите на тот же регион, что и ваша функция Lambda, когда вы находитесь в консоли AWS. Или убедитесь, что вы передаете правильный регион как часть настройки CLI.
Убедитесь, что Lambda имеет правильные разрешения
Чтобы Lambda могла войти в CloudWatch, необходимо создать группу журналов и два набора разрешений, назначенных для функции: createLogStream
и putLogEvents
. Эти разрешения дают лямбде необходимые разрешения для ведения журнала.
Если ваши разрешения Lambda настроены неправильно, нет простого способа предупредить вас о том, что журналы не отправляются в CloudWatch. Поэтому обязательно убедитесь, что назначенная вам роль AWS Lambda имеет как минимум эти разрешения.
Разрешения на ведение журнала Lambda
Если вы все еще застряли, обязательно ознакомьтесь со статьей: Как получить журналы AWS Lambda в CloudWatch
Убедитесь, что группа журнала правильно названа
Наконец, если у вас все еще есть проблемы, учтите, что Lambda может передавать только в группу журналов с тем же именем, что и функция lambda. Если вы создали группу журналов CloudWatch вручную, убедитесь, что имя группы CloudWatch соответствует следующему формату:
/aws/lambda/yourFunctionName
Развлекайтесь с журналами Lambda
Надеюсь, вы уже на правильном пути к настройке AWS Lambda, которая правильно генерирует журналы! Я признаю, что поначалу доступ к журналам Lambda может быть немного затруднительным, но вскоре вы привыкнете переходить в CloudWatch, чтобы увидеть выходные данные журнала.
Тем не менее, если вы устали щелкать мышью в консоли AWS, настройте интерфейс командной строки и используйте команды для доступа к своим журналам.
Говорите скорее Облачные друзья!
- Автор
- Последние сообщения
Лу Бичард
Эй, я Лу! Я облачный инженер-программист из Лондона. Я создал Open Up The Cloud, чтобы помочь людям начать и развивать свою карьеру в облаке. Я редактирую ежемесячный информационный бюллетень Open Up The Cloud, который, я думаю, вам очень понравится. Вы можете найти меня в Twitter или LinkedIn, я всегда рад общению. Когда я не пишу, вы обычно можете увидеть, как я поднимаю тяжелые вещи и опускаю их или еду на двух колесах (иногда с двигателем, иногда без него).
Последние сообщения Лу Бишара (посмотреть все)
Опубликовано
Категории: AWS, Serverless
Lambda CloudWatch Metrics — Lumigo
90 Yan1ch20 Как контролировать Lambda с помощью облака Cui Благодаря AWS Lambda у вас есть базовый бессерверный мониторинг, встроенный в платформу с CloudWatch. CloudWatch — это платформа мониторинга AWS, которая предлагает поддержку как метрик, так и ведения журналов, а также API CloudWatch, обеспечивающий программный доступ к метрикам. Мониторинг CloudWatch предоставляет базовые метрики, визуализацию и оповещения, а журналы CloudWatch регистрируют все, что записывается в стандартный вывод и стандартный поток ошибок.
В этом посте мы подробно рассмотрим метрики CloudWatch, чтобы узнать, как их можно использовать для мониторинга AWS Lambda, а также ограничения встроенных инструментов мониторинга производительности AWS.В этой статье
Ключевые показатели Lambda AWS для мониторинга с помощью CloudWatch
Давайте рассмотрим ключевые показатели Lambda, которые можно отслеживать с помощью инструментов мониторинга AWS.
Ошибки AWS Lambda
Метрика ошибок в Lambda подсчитывает два типа проблем:
- Неперехваченные исключения, создаваемые вашим кодом
- Ошибки выполнения, включая недопустимый тип, время ожидания API или деление на ноль количество вызовов функций, которые привели к ошибке. Чтобы исправить ошибки, вам нужно проверить журналы Lambda, чтобы диагностировать проблему.
Ошибки недоставленных сообщений AWS Lambda
Такие службы, как SQS или DynamoDB, асинхронно отправляют события в Lambda. Если событие не удается более одного раза, оно отправляется в «очередь недоставленных сообщений». Ошибка недоставленных сообщений означает, что возникла проблема с отправкой события в эту очередь недоставленных сообщений. Эти ошибки являются критическими, поскольку они могут привести к потере данных. Они могут быть вызваны неправильными разрешениями, неправильной конфигурацией ресурсов или ограничениями по размеру.
Продолжительность функции AWS Lambda
Длительность выполнения функции — время, необходимое для выполнения каждой функции Lambda, — важный показатель, поскольку он может повлиять на многие аспекты вашего бессерверного приложения:
- Длительно работающие функции без необходимости увеличивают затраты, поскольку функции оплачиваются по фактическому времени выполнения
- Длительный продолжительность функции может указывать на проблемы с производительностью или большую задержку для пользователей
- Если функции превышают настроенный тайм-аут, они прекращаются, что может привести к нарушению обслуживания пользователей
Важно понимать, что если время ожидания функции действительно истекло, CloudWatch не регистрирует продолжительность функции, поэтому важно определить функции, продолжительность которых близка к тайм-ауту. Одно из следующих условий может увеличить продолжительность работы функции:
- Недавние изменения кода снизили эффективность функции
- Зависимость, на которую ссылается функция, реагирует медленно
- Ошибка алгоритма или запрос неправильных данных
Время ожидания функции AWS Lambda
В AWS Lambda тайм-ауты являются серьезной проблемой, которая может снизить производительность бессерверного приложения. Когда продолжительность функции достигает заданного времени ожидания, функция немедленно прекращает работу. CloudWatch не сообщает об этой метрике отдельно — она сообщается вместе с другими общими ошибками. Чтобы определить тайм-ауты, вам нужно создать собственное оповещение в CloudWatch или использовать бессерверный инструмент мониторинга, такой как Lumigo. Если у вас возникли тайм-ауты, используйте следующий процесс для решения проблемы:
- Увеличьте время ожидания до значения, которое не приведет к завершению ваших функций (предпочтительно ниже максимального значения в 300 секунд)
- Найдите основную причину медленных функций и устраните ее
- Убедитесь, что функции работают с соответствующей продолжительностью, и восстановите время ожидания до меньшего значения
Вызовы функций AWS Lambda
Когда функция вызывается успешно, CloudWatch записывает, что вызов произошел. Эта метрика не учитывает регулируемые вызовы. Важность этой метрики заключается в том, что она используется AWS при расчетах счетов. Любые серьезные изменения в количестве вызовов резко увеличат ваши затраты на AWS Lambda. Если вы заметили всплеск числа вызовов, проверьте следующее:
- Возможно, возникла проблема с триггерами, которые вызывают вашу бессерверную функцию, например слишком много событий в таких службах, как Kinesis или SQS.
- Функции могут дать сбой, вызывая повторные попытки, которые приводят к дополнительным вызовам для одного и того же события.
AWS Lambda Iterator Age
Этот показатель в основном используется для потоковой передачи данных. Возраст итератора определяется как время, необходимое для того, чтобы последняя запись в потоке достигла Lambda и была обработана функцией. Если метрика увеличивается, это означает, что бэклог событий накапливается, а бессерверное приложение не поспевает за ним. Чтобы решить проблему возраста итератора, рассмотрите возможность увеличения параллелизма или убедитесь, что события не слишком велики или сложны для своевременной обработки вашими функциями.
Ограничения метрик CloudWatch
К сожалению, в мониторинге CloudWatch отсутствует ряд ценных метрик, в том числе:
- Параллельные выполнения : CloudWatch сообщает об этой метрике, но только для функций с зарезервированным параллелизмом. Тем не менее, это полезная метрика для всех функций.
- Количество холодных запусков
- Использование памяти и выставленная счету продолжительность : Lambda сообщает об этом в журналах CloudWatch в конце каждого вызова. Но они недоступны в качестве показателей. Однако вы можете превратить их в пользовательские метрики с помощью фильтров метрик.
- Количество тайм-аутов : тайм-ауты — это особый тип систематической ошибки, который следует регистрировать как отдельный показатель. Очень часто я видел, как команды тратят драгоценное время на поиск сообщений об ошибках в журналах, только чтобы понять, что их нет, потому что их функция истекла. Вместо этого вы должны регистрировать эти события тайм-аута и использовать фильтры метрик, чтобы записывать их как пользовательскую метрику.
- Оценочная стоимость : еще одна полезная метрика — предполагаемая стоимость функции. Это может помочь вам принять обоснованное решение о том, какие функции следует оптимизировать. Например, нет смысла оптимизировать функцию, чьи чистые расходы в месяц составляют 10 долларов. Усилия и затраты на оптимизацию функции намного перевешивают любую потенциальную экономию.
Еще одна проблема с CloudWatch Metrics заключается в том, что его процентные метрики для Lambda не работают последовательно. Когда дело доходит до мониторинга задержек, вы должны использовать процентили вместо среднего. Однако, когда функция испытывает более ~100 вызовов в минуту, процентные задержки перестают работать! Это критическая проблема, которую мы подняли перед AWS, и, надеюсь, она будет решена в ближайшем будущем. А пока вы можете вернуться к использованию комбинации средней и максимальной продолжительности. Для API вы также можете вместо этого использовать показатели задержки и интеграции шлюза API. обновление 19/01/2020: в этом выпуске от 26 ноября 2019 г. устранена проблема с процентильными показателями задержки Lambda. Узнайте больше о мониторинге Lambda в нашем руководстве: Lambda Logs: a Complete Guide
CloudWatch Dashboards
Вы также можете установить создавать информационные панели в CloudWatch по цене 3 доллара США в месяц за каждую панель (первые 3 – бесплатно). CloudWatch поддерживает различные типы виджетов, и вы даже можете включать результаты запросов из CloudWatch Logs Insights. Вы можете составлять свои информационные панели с любыми метриками из CloudWatch (включая пользовательские метрики). Например, следующая панель мониторинга состоит из нескольких показателей шлюза API и показывает работоспособность и производительность API. Вы также можете использовать Metric Math для создания вычисляемых показателей и включения их в свои информационные панели. Например, виджет «Коды состояния» ниже использует метрическую математику для расчета количества ответов 2XX, которые недоступны в качестве метрики. После того, как вы вручную изготовили свою приборную панель. Вы можете нажать «Действия», «Просмотреть/редактировать исходный код», чтобы просмотреть код панели управления. Затем вы можете кодифицировать панель мониторинга как ресурс AWS::CloudWatch::Dashboard в шаблоне CloudFormation. Вам нужно будет параметризовать некоторые поля, такие как имя API и регион, чтобы шаблон можно было использовать для разных этапов и регионов.
Разработка панелей мониторинга служб
Как показывает опыт, панели мониторинга следует ограничивать только самой актуальной и значимой информацией о состоянии системы. Для API рассмотрите возможность включения следующего:
- 95-й/99-й процентиль и максимальное время отклика.
- Количество 2ХХ, 4ХХ и 5ХХ.
- Частота ошибок, т. е. процент запросов, которые не были выполнены успешно.
Это просто и сразу показывает мне общее состояние API. «Не усложнять» — пожалуй, самый важный совет для создания эффективных дашбордов. Это также труднее всего соблюдать, потому что всегда есть соблазн добавить больше информации на информационные панели. В результате они часто оказываются загроможденными, запутанными для чтения и медленными для рендеринга, поскольку на экране слишком много точек данных. Вот несколько советов по созданию сервисных панелей:
- Используйте простые (скучные) визуализации.
- Используйте горизонтальные аннотации для обозначения пороговых значений SLA и т. д.
- Используйте согласованную цветовую схему.
- Поместите самые важные показатели вверху, чтобы создать иерархию. Также имейте в виду, что виджеты внизу страницы редко видны.
На этой странице приведены простые рекомендации по разработке информационных панелей. «Дизайн информационной панели» Стивена Фью также отлично подходит для чтения, если вы хотите глубже погрузиться в визуализацию данных с помощью информационных панелей.
Предупреждение CloudWatch Metrics
Помимо показателей по функциям, мониторинг CloudWatch также сообщает о ряде показателей, объединенных по всем функциям: Хотя большинство из них не очень полезны (учитывая отсутствие конкретики), я настоятельно рекомендую вы настроили оповещение для метрики ConcurrentExecutions. Установите порог оповещения примерно на 80 % регионального ограничения параллелизма (по умолчанию 1000 в большинстве регионов). Когда вы повышаете это мягкое ограничение через службу поддержки, не забудьте обновить предупреждение, чтобы оно отражало новое региональное ограничение. Для отдельных функций рассмотрите возможность добавления следующих оповещений для каждой:
- Частота ошибок : используйте метрическую математику для расчета частоты ошибок (количество ошибок/количество вызовов). Оповещение, когда частота ошибок превысит, скажем, 1%.
- Тайм-ауты : как обсуждалось ранее, CloudWatch не публикует отдельную метрику для ошибок тайм-аута. Вместо этого вы должны создать фильтр метрик для захвата сообщений об истечении времени ожидания (см. ниже) в качестве пользовательской метрики и настроить для него оповещение.
- Iterator age : для потоковых функций установите оповещение для метрики IteratorAge, чтобы вы знали, когда ваша функция отстает.
- Возраст сообщения SQS : для функций SQS установите оповещение для метрики ApproximateAgeOfOldestMessage в очереди. Когда эта метрика растет, это сигнализирует о том, что ваша функция SQS не справляется с пропускной способностью.
- Ошибки DLQ : установите предупреждение, когда количество ошибок DLQ больше 0. Обычно это плохой знак. DLQ — ваш последний шанс зафиксировать неудачные события до того, как они будут потеряны. Поэтому, если Lambda не сможет опубликовать их в DLQ, данные будут потеряны.
- Дросселирование : иногда мы используем зарезервированный параллелизм, чтобы ограничить максимальный параллелизм функции, и в таких случаях вполне ожидаемо регулирование. Но для функций, у которых нет зарезервированного параллелизма, у нас должны быть оповещения о том, когда они регулируются. Это особенно верно для функций API, ориентированных на пользователя, где мы не можем рассчитывать на встроенные повторные попытки, а регулирование влияет на взаимодействие с пользователем.
- Задержка API : для API, особенно для пользовательских API, следует настроить оповещения на основе вашего SLA/SLO. Например, оповещение, когда 9Задержка 5-го процентиля составляет более 3 секунд в течение пяти минут подряд. Это предупреждает вас о снижении производительности системы. Это можно сделать и с длительностью лямбда. Но я считаю, что лучше использовать метрику задержки API Gateway, потому что она ближе к сквозной метрике. Если снижение производительности связано с проблемами в шлюзе API, вы все равно хотите получать уведомления, поскольку это, тем не менее, влияет на пользователя.
Итак, мы должны настроить множество предупреждений! Поскольку большинство из них следуют определенному соглашению, нам следует автоматизировать процесс их создания. Команда ACloudGuru создала удобный плагин для бессерверной среды. Тем не менее, он по-прежнему требует большой настройки, особенно если вы не согласны с настройками плагина по умолчанию. Я предпочитаю автоматически создавать макросы предупреждений CloudFormation. Если вы хотите узнать больше о макросах CloudFormation и о том, как их создавать, ознакомьтесь с отличным постом Алекса Дебри.
События AWS Lambda CloudWatch
События CloudWatch позволяют получать поток событий, указывающих на изменения в любом сервисе AWS. Обычно события CloudWatch используются для запуска автоматических действий, которые могут помочь решить проблему в рабочей среде. События CloudWatch обычно не используются для диагностики или исправления образов в AWS Lambda. Скорее, их можно использовать для запуска функций Lambda для решения проблем в других сервисах AWS. Например, вы можете вызывать функцию Lambda каждый раз, когда изменяется состояние экземпляра EC2, и использовать ее для регистрации или обслуживания.
Сводка
В этом посте мы подробно рассмотрели, как можно использовать CloudWatch Metrics для мониторинга функций Lambda. Мы рассмотрели метрики, которые вы получаете «из коробки», и то, как публиковать пользовательские метрики. Мы изучили некоторые ограничения CloudWatch Metrics. Мы увидели, что вы можете делать с инструментальными панелями в CloudWatch, и обсудили несколько советов по разработке сервисной информационной панели. Наконец, мы обсудили, какие оповещения вы должны настроить, чтобы вы были должным образом уведомлены, когда что-то пойдет не так. В моем следующем посте мы подробно рассмотрим журналы CloudWatch, чтобы узнать, как вы можете использовать их для устранения проблем и ограничения с помощью журналов CloudWatch.