Как определить AWP MetricFilter FilterPattern для соответствия событию журнала в формате JSON в CloudWatch? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь определить метрический фильтр в шаблоне AWS CloudFormation для сопоставления событий журнала в формате JSON из CloudWatch. Вот пример события журнала:

{
    "httpMethod": "GET",
    "resourcePath": "/deployment",
    "status": "403",
    "protocol": "HTTP/1.1",
    "responseLength": "42"
}

Вот моя текущая попытка создать MetricFilter для соответствия полю состояния, используя примеры, приведенные в документации здесь: FilterAndPatternSyntax

"DeploymentApiGatewayMetricFilter": {
  "Type": "AWS::Logs::MetricFilter",
  "Properties": {
    "LogGroupName": "/aws/apigateway/DeploymentApiGatewayLogGroup",
    "FilterPattern": "{ $.status = \"403\" }",
    "MetricTransformations": [
      {
        "MetricValue": "1",
        "MetricNamespace": "ApiGateway",
        "DefaultValue": 0,
        "MetricName": "DeploymentApiGatewayUnauthorized"
      }
    ]
  }
}

Я получаю сообщение «Неверный шаблон фильтра метрик» в CloudFormation.

Другие варианты, которые я пробовал, не работали:

"{ $.status = 403 }" <- no escaped characters
{ $.status = 403 } <- using a json object instead of string

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

1 Ответ

0 голосов
/ 15 марта 2019

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

Похоже, что ему нужен каждый критерий, заключенный в скобки.

- FilterPattern: '{ $.priority = "ERROR" && $.message != "*SomeMessagePattern*" }'
+ FilterPattern: '{ ($.priority = "ERROR") && ($.message != "*SomeMessagePattern*") }'

К сожалению, документы AWS для MetricFilter в CloudFormation не имеют примеров шаблонов JSON.

...