使用 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
当我 运行 在 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