Как определить AWP MetricFilter FilterPattern, чтобы он соответствовал JSON-форматированному событию журнала в CloudWatch?

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

Если у вашего CSV есть заголовки

Обработать файл CSV и подсчитать количество свойств в результирующем объекте Powershell.

$columnCount = @( ( Import-Csv '\path\to\file.txt' ).PSObject.Properties ).Count

Нам нужно заставить объект Properties к массиву (который является синтаксисом @()), чтобы точно получить счет. Свойство PSObject является скрытым свойством для метаданных об объекте в Powershell, в котором мы ищем Properties (имена столбцов) и получаем количество их.

CSV без заголовки

Если ваш CSV не имеет заголовков, Import-Csv требует, чтобы вы вручную указывали заголовки. Есть трюки, которые вы можете сделать, чтобы создавать уникальные имена столбцов «на лету», но они слишком сложны, просто получая подсчет столбцов.

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

$columnCount = ( ( Get-Content "\path\to\file.txt" | Select-Object -First 1 ) -Split ',' ).Count

Что было не так с оригиналом

Оба вышеописанных решения объединяют счетчик столбцов до одной строки кода. Но в вашем исходном примере вы сделали пару небольших ошибок:

$columns=( Get-Content "\path\to\file.txt" | select  -First 1 ).Split(",")

# You forgot to prepend "columns" with a $. Should look like the below line
$Count=$columns.count

И вы забыли использовать фигурные скобки с блоком if:

if ($count -eq 280) {
  echo "column count is:$count"
} else { 
  email
}

Что касается использования оператор -Split по сравнению с методом .Split() - это чисто стилистическое предпочтение с моей стороны, и использование Split() вполне допустимо.

1
задан user3474985 21 January 2019 в 17:04
поделиться

1 ответ

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

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

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

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

0
ответ дан dheffx 21 January 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: