#amazon-cloudwatch #aws-cloudwatch-log-insights
Вопрос:
Я регистрирую сообщения, которые являются объектами JSON. В JSON есть массив, содержащий пары ключ/значение:
{
...
"arr": [{"key": "foo", "value": "bar"}, ...],
...
}
Теперь я хочу отфильтровать результаты, содержащие определенный ключ, и извлечь значения для определенного ключа в массиве.
Я пробовал использовать регулярное выражение, что-то вроде parse @message /.*"key":"my_specific_key","value":(?<value>.*}).*/
того, что извлекает значение, но также возвращает остальную часть сообщения. Кроме того, он не фильтрует результаты.
Как я могу фильтровать результаты и извлекать значения для определенного ключа?
Ответ №1:
Если в вашей записи журнала в группе журналов cloudwatch они на самом деле отображаются как json, вы можете просто указать ключ непосредственно в любом месте поля.
(не нужно @, cloudwatch автоматически добавляет его ко всем значениям по умолчанию)
Если вы используете python, вы также можете использовать aws_lambda_powertools для этого очень простым способом (и это настоящий продукт aws).
Если они отображаются в вашем журнале в виде строки, то это может быть экранированная строка, и вам придется точно сопоставить ее, включая пробелы и все остальное. когда вы проанализируете, вам захочется сделать что-то вроде этого:
если это строка вашего сообщения журнала ‘{«aKey» : «AValue», «Ключ2» : «Значение 2»}
parse @message "{"*" : "*","*" : "*"} akey, akey_value, key2, key2_value
затем вы можете фильтровать, подсчитывать или что-то еще в отношении этих переменных. синтаксический анализ-это, в частности, инструкция, которая соответствует шаблону и присваивает подстановочный знак переменной по одному за раз в порядке
хотя со сложным json, если ваше приведенное выше регулярное выражение работает, все, что вам нужно, — это оператор фильтра
field @message
| pares @message ... your regex as value_var
| filer value_var /some more regex/
если это не строка в записи журнала, а фактический json, вы можете просто сослаться на ключ:
filter a_key ~="some value" (or regex here)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html
для получения дополнительной информации