我有很多 AWS Lambda 日志,我需要查询它们以找到相关的日志流名称,
我正在日志中记录一个特定的字符串,
我需要对其进行类似或精确查询。
日志格式是这样的 -
Request ID => 572bf6d2-e3ff-45dc-bf7d-c9c858dd5ccd
Run Code Online (Sandbox Code Playgroud)
我可以在没有 UUID 字符串的情况下查询日志 -
使用的查询 -
fields @timestamp, @message
| filter @message like /Request ID =>/
| sort @timestamp desc
| limit 20
fields @timestamp, @message
| filter @message like /Request ID => 572bf6d2-e3ff-45dc-bf7d-c9c858dd5ccd/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
是否可以根据 CloudWatch Logs Insights 查询设置警报?在此页面中,它说明了以下内容:此外,您可以发布基于日志的指标、创建警报并将日志和指标关联到 CloudWatch Dashboards 中,以获得完整的操作可见性。但我不知道该怎么做。我想要一个基于某个查询的自定义指标,将其添加到仪表板(我知道该怎么做)并设置警报。
amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
我正在尝试使用 aws log Insights 对包含 nginx 日志的日志组运行查询。
这是我在 ec2 机器上设置的日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Run Code Online (Sandbox Code Playgroud)
NGINX 日志示例:
xx.xx.xx.xx - - [10/Nov/2020:15:28:30 +0530] "POST /xx HTTP/1.1" 200 57 "https://xxxx.in/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
Run Code Online (Sandbox Code Playgroud)
我尝试使用日志见解和以下代码来解析它:
parse @message '* - - [*] "* * *" * * "-" "*"' as remote_addr, timestamp, request_type, location, protocol, response_code, body_bytes_sent
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Expression is invalid: parse@message'* - - …Run Code Online (Sandbox Code Playgroud) nginx amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
我在 EKS 集群上作为 sidecar 运行 Fluent-bit,以便应用程序跟踪应用程序日志文件并将事件写入 CloudWatch Logs。然后,我通过 CloudWatch Logs Insights 设置一些查询和仪表板来分析这些日志。这一切都很好。
在我能够让这个设置工作之前,我在过去的一周里有一些较旧的日志。在 Fluent-bit tail 输入中,如果发现新文件,它可以选择完全从顶部读取新文件。使用此选项,我能够将较旧的日志加载到与最新日志事件相同的日志组中的 CloudWatch Logs 中。
如果我进入 AWS 控制台并进入我的日志组,我可以看到列出的所有日志流。我可以点击每个事件并查看事件并搜索它们。一切看起来都不错。但是,当我尝试使用 Insights 查询较旧的流时,没有显示任何结果。我已确认我为查询设置了一个应包含事件的时间段。
当我运行此查询时,我没有得到任何结果:
filter @logStream = 'myfile.log'
| fields @timestamp, @message
Run Code Online (Sandbox Code Playgroud)
具有较旧时间戳的日志事件是否不会自动提取到 Insights 中?数据可用之前是否有很长的延迟?我在文档中没有看到任何有关它的内容。
amazon-web-services amazon-cloudwatchlogs aws-cloudwatch-log-insights
我想在 AWS CloudWatch Logs Insights 中创建包含两行的折线图。一条线代表移动用户和其他桌面用户,显示每组用户的成功率。
这是我正在使用的代码:
| fields
properties.device as device,
properties.success as success
| stats avg(success) by device, bin(1hour)
Run Code Online (Sandbox Code Playgroud)
这个查询的结果看起来很有希望。如您所见,结果包括设备类型、时间戳和要绘制在折线图上的浮点数:
# device bin(1hour) avg(success)
1 desktop 2023-02-01T10:00:00.000 0.6129
2 mobile 2023-02-01T10:00:00.000 0.7453
3 desktop 2023-02-01T09:00:00.000 0.5578
4 mobile 2023-02-01T09:00:00.000 0.6082
Run Code Online (Sandbox Code Playgroud)
但是,“可视化”选项卡向我显示了此错误:
The data is not suitable for a line chart.
Try a bar chart, or group your result by bin function.
Run Code Online (Sandbox Code Playgroud)
我认为 Logs Insights 对我重叠的时间戳感到困惑。它不知道我想要一个移动数据的时间序列和另一个桌面数据的时间序列。要按字段分组并按时间分组,我似乎正在使用带有两个参数的单个操作来执行标准操作by。但它还不足以创建折线图。
有没有更好的方法来构建我的查询以使 CloudWatch 相信我正在尝试做的事情?
visualization group-by amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
以下是一些包含单引号的文本:
Cannot read property 'email' of undefined:
Run Code Online (Sandbox Code Playgroud)
当我使用上述文本运行以下查询时
filter @message like /Cannot read property 'email' of undefined/
| stats count()
Run Code Online (Sandbox Code Playgroud)
我无法计数。然而,实际上我的日志中有很多上面的文字。
问题是,如何转义查询中的单引号?
鉴于 CloudWatch 上的以下查询提取包含“entry 1456” (其中 1456 是一个 ID)的消息的日志,我应该如何扩展它以获取多个 ID,相应的 CLI 命令是什么?
fields @message
| filter @message like "entry 1456"
| limit 10
Run Code Online (Sandbox Code Playgroud)
为了澄清,我想使用多个 ID 进行过滤,例如“像 1456|1257|879”。但不确定在这种情况下正则表达式的格式。
我假设相应的 CLI 命令将类似于:
aws logs filter-log-events
--log-group-name group_name
--app
--filter-pattern ........
Run Code Online (Sandbox Code Playgroud)
只是想确定制定此方案的最佳方法。
logging amazon-web-services amazon-cloudwatch aws-cli aws-cloudwatch-log-insights
假设我有以下 Insights 查询
fields @timestamp, @message
| parse @message 'status=*" as status
| display @timestamp, status, @message
Run Code Online (Sandbox Code Playgroud)
有些日志消息没有状态。我想把这些过滤掉。我怎么做?
我正在尝试在 CloudWatch Log Insights 中创建多方面的时间序列图。
我可以创建一个不是时间序列的多方面查询,并且我可以创建一个非方面时间序列查询,但我似乎无法同时执行这两项操作。
例如:我可以执行如下所示的查询:
fields @timestamp, someField1, @message
| stats count(*) by someField1, someField2
Run Code Online (Sandbox Code Playgroud)
这将为我提供一个按 someField1 和 someField2 细分的结果表。我还可以这样做:
fields @timestamp, someField1, @message
| stats count(*) by bin(1h)
Run Code Online (Sandbox Code Playgroud)
这会给我一个时间序列图。
但是,我无法弄清楚如何将两者结合起来,以便我得到一个带有多条线的时间序列图。
这在 AWS CloudWatch 日志中是否不可用,或者是否有我还没有找到的方法?
amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
您能否在 Cloudwatch Insights 中使用子查询运行过滤器?我想获取 requestID 并找到与其相关的所有日志。我可以单独运行查询,但正在尝试做一个。
像这样的东西:
filter @requestId in (filter @message like /Id 26313/ fields @requestId sort @timestamp desc limit 1)
| fields @message
| sort @timestamp desc
Run Code Online (Sandbox Code Playgroud)