使用 Regex 的 AWS Cloudwatch Log Insights 查询不提取 MySql 慢速查询日志的列

AWS Cloudwatch Log Insights query using Regex does not extract columns for MySql Slow Query Logs

当我 运行 在 AWS Cloudwatch Log Insights 中执行以下查询时,我得到空白输出

parse @message /Query_time: (?<Query_time>[0-9](\.[0-9]+)?), Lock_time: (?<Lock_time>[0-9](\.[0-9]+)?), (?<Query>(?<=\;)(.*?)(?=\;))/ 

但是如果我 运行 它每个列单独提取值

parse @message /Query_time: (?<Query_time>[0-9](\.[0-9]+)?)/

# User@Host: ****[****] @ localhost [] Id: 10
# Query_time: 0.000283 Lock_time: 0.000075 Rows_sent: 1 Rows_examined: 1
SET timestamp=1589784518; SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'TIME_SINCE_ZERO_CONNECTIONS';

有没有我遗漏的东西

您可以使用

Query_time:\s*(?<Query_time>[0-9]+(?:\.[0-9]+)?)\s*Lock_time:\s*(?<Lock_time>[0-9]+(?:\.[0-9]+)?)[\s\S]*?;\s*(?<Query>[^;]*)

regex demo。详情:

  • Query_time: - 文字字符串
  • \s* - 任意 0+ 个空格
  • (?<Query_time>[0-9]+(?:\.[0-9]+)?) - 组 "Query_time":像数字
  • 这样的浮点数或整数
  • \s* - 任意 0+ 个空格
  • Lock_time: - 文字字符串
  • \s* - 任意 0+ 个空格
  • (?<Lock_time>[0-9]+(?:\.[0-9]+)?) - 组 "Lock_time":像数字
  • 这样的浮点数或整数
  • [\s\S]*? - 任何 0+ 个字符,包括换行符,尽可能少
  • ; - 一个分号
  • \s* - 0+ 个空格
  • (?<Query>[^;]*) - 组 "Query":除 ;.
  • 之外的任意 0 个或多个字符

这是我的,它提取了所有字段:

# fields @message |
parse @message /# Time:\s(?<Time>.*?)\sUser@Host: (?<User>.*)\[.*?\]\s@ \s.(?<Host>.*?). Id: \d*\s# Query_time: (?<Query_time>.*?)\s Lock_time: (?<Lock_time>.*?)\sRows_sent: (?<Rows_sent>.*?)\sRows_examined: (?<Rows_examined>.*?)\s(?<Query>.*)/ 
| sort Query_time desc