Используйте структурированное ведение журналов в AWS CloudWatch и как создавать настраиваемые информационные панели для визуализации журналов и показателей.
Amazon Web Services (AWS) CloudWatch — это мощный инструмент для мониторинга и регистрации вашей инфраструктуры AWS. Он может собирать и отслеживать метрики, журналы и события из различных ресурсов и сервисов AWS, предоставляя в режиме реального времени информацию о производительности и работоспособности ваших приложений и систем.
Однако использовать CloudWatch может быть сложно, особенно если вам нужно отслеживать большое количество ресурсов и служб. Одной из наиболее распространенных проблем с CloudWatch является понимание журналов, созданных вашими приложениями и системами. Здесь на помощь приходит структурированное ведение журнала.
Структурированное ведение журнала — это метод добавления контекста и метаданных в сообщения журнала, что делает их более удобочитаемыми и доступными для поиска. Вместо того, чтобы просто записывать сообщение, структурированное ведение журнала добавляет в сообщение журнала пары «ключ-значение», которые можно легко запрашивать и анализировать в CloudWatch.
В этой статье мы рассмотрим, как использовать структурированное ведение журналов в AWS CloudWatch и как создавать настраиваемые информационные панели для визуализации журналов и показателей. Мы будем использовать AWS CDK с TypeScript для создания пользовательской панели мониторинга, отображающей структурированные журналы из функции Lambda.
Настройка функции Lambda и структурированного ведения журнала
Прежде чем мы сможем начать регистрировать структурированные данные, нам нужна функция Lambda для создания журналов. Давайте создадим простую функцию Lambda, используя AWS CDK с TypeScript:
import * as cdk from 'aws-cdk-lib'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; const app = new cdk.App(); const stack = new cdk.Stack(app, 'MyStack'); const lambdaFunction = new NodejsFunction(stack, 'MyFunction', { entry: 'src/index.ts', handler: 'handler', }); app.synth();
Это создает новую функцию Lambda, используя конструкцию NodejsFunction
из пакета aws-lambda-nodejs
. Мы указываем файл ввода (src/index.ts
) и функцию-обработчик (handler
) для лямбда-функции. При необходимости вы можете заменить эти значения своим собственным кодом и функцией-обработчиком.
Теперь, когда у нас есть функция Lambda, давайте добавим к ней структурированное ведение журнала. Мы будем использовать пакет winston
для регистрации структурированных данных. Установите его с помощью npm:
npm install winston
Теперь давайте обновим код нашей функции Lambda, чтобы использовать winston
для ведения журнала:
import * as winston from 'winston'; const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), ], }); export async function handler(event: any, context: any) { logger.info('Function invoked', { event, context }); return { statusCode: 200, body: 'Hello, world!', }; }
Здесь мы создаем новый регистратор winston
с форматом json
. Мы указываем транспорт Console
для входа в консоль. В функции handler
мы регистрируем сообщение info
с некоторыми дополнительными метаданными в виде пары ключ-значение.
Разверните обновленную функцию Lambda с помощью cdk deploy
и вызовите ее для создания журналов.
Создание пользовательской панели управления CloudWatch
Теперь, когда у нас есть несколько журналов, давайте создадим пользовательскую панель мониторинга CloudWatch для их визуализации. Мы будем использовать пакет aws-cloudwatch
из AWS CDK для создания информационной панели.
Сначала установите пакет с помощью npm:
npm install aws-cdk-lib aws-cdk-lib/aws-cloudwatch aws-cdk-lib/aws-cloudwatch-actions
Теперь давайте создадим новый стек CDK для создания информационной панели:
import * as cdk from 'aws-cdk-lib'; import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch'; import * as cloudwatch_actions from 'aws-cdk-lib/aws-cloudwatch-actions'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as logs from 'aws-cdk-lib/aws-logs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; const app = new cdk.App(); const stack = new cdk.Stack(app, 'MyStack'); const lambdaFunction = new NodejsFunction(stack, 'MyFunction', { entry: 'src/index.ts', handler: 'handler', }); const logGroup = new logs.LogGroup(stack, 'LogGroup', { logGroupName: `/aws/lambda/${lambdaFunction.functionName}`, retention: logs.RetentionDays.ONE_MONTH, }); const metricFilter = logGroup.addMetricFilter('MetricFilter', { metricNamespace: 'MyApp', metricName: 'Invocations', filterPattern: logs.FilterPattern.all(), }); const widgetLogs = new cloudwatch.LogsWidget({ logGroupNames: [logGroup.logGroupName], }); const widgetMetrics = new cloudwatch.MetricWidget({ width: 6, height: 6, title: 'Lambda Metrics', metrics: [metricFilter.metric({ statistic: 'Sum' })], }); const dashboard = new cloudwatch.Dashboard(stack, 'MyDashboard', { dashboardName: 'My Dashboard', widgets: [ widgetLogs, widgetMetrics, ], }); const alarm = new cloudwatch.Alarm(stack, 'MyAlarm', { metric: metricFilter.metric({ statistic: 'Sum' }), threshold: 1, evaluationPeriods: 1, alarmDescription: 'Lambda invoked at least once', }); alarm.addAlarmAction(new cloudwatch_actions.AddToDashboardAction(dashboard, { comment: 'Alarm triggered!', })); app.synth();
Здесь мы создаем новый LogGroup
для нашей лямбда-функции и указываем срок хранения 30 дней. Мы создаем MetricFilter
для группы журналов, чтобы извлечь метрику количества вызовов функций. Мы создаем два виджета, один для отображения журналов, а другой для отображения метрики. Объект dashboard
создается с двумя виджетами, а alarm
настроен на срабатывание, когда значение метрики превышает пороговое значение 1.
Разверните стек с помощью cdk deploy
и перейдите к панели управления CloudWatch в Консоли управления AWS. Вы должны увидеть журналы функции Lambda, отображаемые в первом виджете, и метрику для вызовов функции, отображаемую во втором виджете.
Заключение
Структурированное ведение журнала — это мощный метод добавления контекста и метаданных в сообщения журнала, что делает их более читабельными и доступными для поиска. AWS CloudWatch — это мощный инструмент для мониторинга и регистрации вашей инфраструктуры AWS, а настраиваемые информационные панели позволяют визуализировать ваши журналы и показатели в режиме реального времени.
В этой статье мы рассмотрели, как использовать структурированное ведение журналов в AWS CloudWatch и как создать пользовательскую панель мониторинга для визуализации ваших журналов и показателей. Мы использовали AWS CDK с TypeScript для создания функции Lambda, которая генерирует структурированные журналы, и настраиваемую панель мониторинга CloudWatch, которая отображает журналы и метрики.
Используя возможности структурированного ведения журналов и настраиваемых информационных панелей, вы можете получить ценную информацию о производительности и работоспособности вашей инфраструктуры AWS, а также быстро выявлять и устранять проблемы до того, как они повлияют на ваши приложения и системы.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу