Рубрики
Uncategorized

Без серверного трассировки с рентгеновкой AWS

TL; DR Проверьте главу AWS CloudWatch ServiceLens о том, насколько мощный рентгенов AWS может быть в … Tags с AWS, DevOps, Server, Terraform.

Проверьте главу AWS CloudWatch ServiceLens о том, насколько мощный рентгенов AWS может быть при определении и сигнализации ошибок применения.

Посмотрите на репозиторий ниже для примера реализации.

RPStreef/OpenAPI-TF-пример

Пример того, как вы можете использовать OpenAPI с API API Gateway, также включает интеграции с Awslambda, AWS Cognito, AWS SNS и журналы CloudWatch

Спасибо за чтение, и до следующей недели!

  • Без серверного трассировки с рентгеновкой AWS
    • AWS Lambda
    • AWS SNS
    • AWS API Gateway
  • AWS CloudWatch ServiceLens
  • Вывод
  • Дальнейшее чтение

Для этой статьи мы используем Openapi Серия GitHub Repository. Пожалуйста, клон это Репо следовать.

Мы обсуждали в предыдущих статьях; Как сделать правильный мониторинг ваших без серверных приложений с помощью тревоги CloudWatch и как реализовать структурированные журналы, которые могут быть доступны для поиска.

На этой неделе я хотел бы закончить это, обсудив трассировка с Aws x-ray Анкет Так что же такое рентген AWS? Цитировать документацию AWS:

Рентген AWS помогает разработчикам анализировать и отлаживать производство, распределенные приложения, такие как построенные с использованием архитектуры микросервисов. Благодаря рентгеновской снимке вы можете понять, как ваше приложение и его базовые услуги выполняются для выявления и устранения неисправностей основной причины проблем и ошибок производительности.

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

Чтобы включить рентген AWS, мы должны применить конфигурацию на уровне инфраструктуры с Терраформ И мы должны сделать немного на уровне кода.

AWS Lambda

Чтобы включить рентгеновское отслеживание на Lambda, нам на самом деле не нужно делать все так много на стороне инфраструктуры. Это два шага в нашей реализации Terraform:

1) Ресурс AWS Lambda

В aws_lambda_function Ресурс нам нужно проверить на наличие tracing_config_mode параметр. По умолчанию этот параметр установлен на Переход , который пройдет через (как уже предлагается слово) соответствующие рентгеновские заголовки через вызов API API Gateway. В этом случае мы можем оставить эту настройку как есть. Мы должны установить это на Активный Если мы выполняем лямбду напрямую.

variable "tracing_config_mode" {
  description = "Can be either PassThrough or Active"
  default     = "PassThrough"
}

resource "aws_lambda_function" "_" {
  function_name                  = local.function_name
  role                           = var.lambda_role_arn
  runtime                        = var.lambda_runtime
  filename                       = var.lambda_filename
  handler                        = "handlers/${var.lambda_function_name}/index.handler"
  timeout                        = var.lambda_timeout
  memory_size                    = var.lambda_memory_size
  reserved_concurrent_executions = var.reserved_concurrent_executions

  source_code_hash = filebase64sha256("${var.dist_path}/${var.distribution_file_name}")

  layers = ["${var.lambda_layer_arn}"]

  tracing_config {
    mode = var.tracing_config_mode
  }

  environment {
    variables = var.lambda_environment_variables
  }

  tags = {
    Environment = var.namespace
    Name        = var.resource_tag_name
  }
}

2) Политика AWS IAM

Для ресурса AWS Lambda мы должны добавить следующую политику в наш существующий документ политики JSON, чтобы позволить рентгеновскому отслеживанию и прочитать правила скорости отбора проб (мы доберемся до этого, когда обсудим шлюз API):

{
    "Effect": "Allow",
    "Action": [
        "xray:PutTraceSegments",
        "xray:PutTelemetryRecords",
        "xray:GetSamplingRules",
        "xray:GetSamplingTargets",
        "xray:GetSamplingStatisticSummaries"
    ],
    "Resource": [
        "*"
    ]
}

Вот и все! На AWS Lambda нет необходимости настраивать какие-либо библиотеки, если вы не собираетесь настраивать сегменты рентгеновских лучей и добавлять мета-дата выполнения.

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

AWS SNS

Чтобы включить SNS (или S3, http (s) и т. Д.) отслеживание, вы должны использовать официальный Рентгеновский SDK для узла Анкет

Как только мы добавили эту библиотеку в Package.json, нам нужно включить отслеживание библиотеки SNS следующим образом:

const AWS = require('aws-sdk')
const AWSXRay = require('aws-xray-sdk')

const sns = AWSXRay.captureAWSClient(new AWS.SNS({ apiVersion: '2010-03-31' }))

Теперь отслеживание любой функции SNS автоматически выполняется для нас. Это также будет работать для других услуг AWS, которые мы потребляем, мы просто добавляем обертку CaptureawsClient, и мы закончили.

Если вы хотите дополнительно настроить журнал с добавлением (sub) сегменты и Мета данных , обзор это Документация на их странице GitHub, которая покажет пример кода о том, как его достичь.

Совет профессионала: в вашем коде AWS Lambda захватите идентификатор трассировки рентгеновского трассировки из переменной среды, process.env._x_amzn_trace_id и добавьте это в свою библиотеку регистрации, чтобы вы могли использовать ее в поисках журнала.

AWS API Gateway

Опять же, вот два шага для настройки в нашей реализации Terraform:

1) Ресурс API Gateway Stage

Чтобы включить рентгеновское отслеживание для шлюза API, настройте ресурс сцены следующим образом:

variable "xray_tracing_enabled" {
  description = "Enables the XRay tracing and will create the necessary IAM permissions"
  type        = bool
  default     = false
}

resource "aws_api_gateway_stage" "_" {
  stage_name    = var.namespace
  rest_api_id   = aws_api_gateway_rest_api._.id
  deployment_id = aws_api_gateway_deployment._.id

  xray_tracing_enabled = var.xray_tracing_enabled

  tags = {
    Environment = var.namespace
    Name        = var.resource_tag_name
  }
}

2) Правила выборки рентгеновских лучей AWS

Затем, необязательно, мы можем настроить правила выборки для ваших конечных точек API Gateway. Рентгеновская документация AWS говорит следующее:

Настраивая правила выборки, вы можете контролировать объем данных, которые вы записываете, и изменить поведение выборки на лету без изменения или перераспределения вашего кода. Правила выборки сообщают рентгеновским SDK, сколько запросов на запись для набора критериев. По умолчанию рентгеновский SDK записывает первый запрос каждую секунду и пять процентов от любых дополнительных запросов. Один запрос в секунду — это водохранилище, которое гарантирует, что по крайней мере один трассировка записывается каждую секунду, пока услуга обслуживает запросы. Пять процентов — это ставка, по которой отображаются дополнительные запросы за пределы размера резервуара.

По умолчанию используется следующее правило выборки:

Мы можем переопределить это правило или создать правила с другим приоритетом через aws_xray_sampling_rule ресурс:

resource "aws_xray_sampling_rule" "example" {
  rule_name      = "example"
  priority       = 10000
  version        = 1
  reservoir_size = 1
  fixed_rate     = 0.05
  url_path       = "*"
  host           = "*"
  http_method    = "*"
  service_type   = "*"
  service_name   = "*"
  resource_arn   = "*"

  attributes = {
    Hello = "Tris"
  }
}

В приведенном выше примере, который является конфигурацией по умолчанию, это правило будет отслеживать 5% ( fixed_rate.05 ) всего трафика на всех конечных точках не менее 1 записанных трассировки в секунду ( reveroire_size ).

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

С этим мы закончили настройку рентгеновского излучения AWS для нашего конкретного примера. Следующим является частью консоли AWS, где я покажу вам, как отладка будет работать на практике.

Новое дополнение к CloudWatch называется Servicelens Эта служба аккуратно интегрирует рентгеновские трассировки AWS, тревоги CloudWatch и журналы CloudWatch. Чтобы добраться до этой новой услуги, в конце прошлого года 2019 года перейти в CloudWatch, и вы найдете его в меню слева.

Чтобы сгенерировать этот пример данных, я выполнил пример API несколько раз с Postman, а также ввел несколько ошибок кодирования, это результат:

Если мы сверлим в конкретные детали выполнения, мы увидим зарегистрированные следы, а какие не удалось:

Давайте рассмотрим второй журнал сверху:

Мы уже можем сказать, что ошибка в SNS вызов, не просмотрев каких -либо файлов журнала!

Когда мы нажимаем на этот сегмент под названием Sns , мы можем увидеть прямо под временной шкалой сведения о сегменте и фактическую ошибку, которая возобновляется, включая трассировку стека.

Пример продемонстрировал, насколько легко можно обнаружить ошибки в определенном сегменте вашего кода, используя рентгеновские трассировки. Это в сочетании с мониторингом тревоги без сервера и структурированным журналом на AWS Lambda. У вас есть очень мощный набор отладки и мониторинга услуг и инструментов, которые позволят вам гораздо быстрее разрешать ошибки.

Надеюсь, это было полезно! Пожалуйста, оставьте комментарий ниже с вашим опытом отладки на архитектурах без сервера/микрос обслуживания.

На следующей неделе я хотел бы обсудить, как правильно сделать развертывание на AWS с без серверной архитектуры, поэтому мы рассмотрим CI/CD с помощью AWS Codepipeline.

Спасибо за чтение!

Оригинал: «https://dev.to/rolfstreefkerk/serverless-tracing-with-aws-x-ray-3119»