我通常运行一个查询
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)
有没有办法在包含“错误”的消息周围获得额外的上下文行?类似于带有 grep 的 A、B 和 C 标志?
例如,如果我有一个给定的日志,其中包含以下几行
DEBUG Line 1
DEBUG Line 2
ERROR message
DEBUG Line 3
DEBUG Line 4
Run Code Online (Sandbox Code Playgroud)
目前我得到以下结果
ERROR message
Run Code Online (Sandbox Code Playgroud)
但我想获得更多的上下文行,例如
DEBUG Line 2
ERROR message
DEBUG Line 3
Run Code Online (Sandbox Code Playgroud)
如果需要,可以选择获取更多上下文行。
amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
我正在尝试使用 AWS Cloudwatch Logs 洞察力来搜索我们 lambda 函数的一些相当旧的日志。我正在AWS docs 上阅读本指南,但没有任何地方记录如何按时间戳过滤。我尝试了以下方法:
fields @timestamp, @message
| filter @timestamp > '2019-12-04T18:09:10.000+01:00'
| limit 200
| sort @timestamp desc
Run Code Online (Sandbox Code Playgroud)
但不起作用(返回 0 个结果)。
最初,当我自 2015年以来遇到此功能请求时,我试图找出是否有办法按时间戳列(而不是默认的日志组名称)对日志组进行排序- 这在eu-west-1 他们建议使用新的日志见解,但我无法完成这项工作。
有谁知道我如何按时间戳过滤日志,或者是否可以使用 Cloudwatch 日志见解来过滤日志?
谢谢!
amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
尝试运行包含reqHeaders.x-forwarded-for以下内容的 CloudWatch Insights 查询:
fields @timestamp, status, err, method, url, req_id, reqHeaders.x-forwarded-for
| filter status >= 400
| sort @timestamp desc
| limit 10
Run Code Online (Sandbox Code Playgroud)
但该字段始终为空,尽管已正确解析@message。我怀疑这是因为子字段名称中的连字符。有谁知道如何重新格式化查询以使其显示?
编辑:这是一个日志消息示例(纯 JSON,我只是对其进行了格式化)
{
"cache": null,
"client": "172.31.10.31",
"component": "server",
"err": "Invalid access token",
"hostname": "0da665ab5653",
"level": 30,
"method": "PUT",
"msg": "REQ: 401 PUT /api/xxxxxxxxxx",
"name": "rocket",
"pid": 10,
"reqHeaders": {
"accept-encoding": "gzip",
"cloudfront-forwarded-proto": "https",
"cloudfront-is-desktop-viewer": "true",
"cloudfront-is-mobile-viewer": "false",
"cloudfront-is-smarttv-viewer": "false",
"cloudfront-is-tablet-viewer": "false",
"cloudfront-viewer-country": "XX",
"content-length": "74",
"content-type": "application/json; charset=UTF-8",
"host": "xxxxxxxxxx", …Run Code Online (Sandbox Code Playgroud) amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
我必须监控特定 lambda 的 CloudWatch 日志。当特定错误消息(例如 HTTP-50X)记录到 CloudWatch 时,我们需要发送电子邮件通知以提醒出现问题。
我们需要帮助在 AWS 中创建警报电子邮件,以手动监控日志以查看是否记录了任何此类错误。
amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights cloudwatch-alarms
有没有办法对 AWS CloudWatch Logs Insights 进行分页?谢谢。
我在想像下面这样的东西,但这不起作用
fields @message | page 2 | limit 20
Run Code Online (Sandbox Code Playgroud)
编辑:
在我的应用程序中,我通过AWS.Logger.Serilog访问它。但如果我可以对日志结果进行分页,我可以采用不同的方法(例如原始 API 调用)。
我尝试浏览 AWS CloudWatch 文档、谷歌和堆栈溢出。我试图克服的问题是如何对日志进行分页,这样它就不会加载给定查询的所有日志。
pagination amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
我有一个包含此类消息的日志组。
{
"m": [
{
"id": "5b6973c7c86e8689368b4569",
"ts": 1634112000.062
},
{
"id": "6116d21e02e38f5045079c42",
"ts": 1634120807.402
},
{
"id": "60c368ff1085fc0d546fad52",
"ts": 1634120807.512
},
{
"id": "6053536817a46610797ed472",
"ts": 1634120809.249
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想对字段 m.*.ts (它是一个数组)运行查询。像这样的东西...
fields @message
| filter (m.*.ts > 1634112000.062 and m.*.ts < 1634120807.000 )
Run Code Online (Sandbox Code Playgroud)
有可能吗?
在 AWS Cloudwatch Log Insights 上,通常在您过滤日志并找到有趣的日志消息之后,您希望查看该消息之前或之后发生的事情。
在另一条消息旁边查找日志消息的最佳方法是什么?
我想一个好方法是基于@tiemstamp 进行过滤,它们方便地提供了一个date_floor函数,但我无法弄清楚适用于时间戳相等的语法。
我想将我的用户直接发送到特定的日志组和过滤器,但我需要能够生成正确的 URL 格式。例如,这个网址
https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/
%252Fmy%252Flog%252Fgroup%252Fgoes%252Fhere/log-events/$3FfilterPattern$3D$255Bincoming_ip$252C$2Buser_name$252C$2Buser_ip$2B$252C$2Btimestamp$252C$2Brequest$2B$2521$253D$2B$2522GET$2B$252Fhealth_checks$252Fall$2B*$2522$252C$2Bstatus_code$2B$253D$2B5*$2B$257C$257C$2Bstatus_code$2B$253D$2B429$252C$2Bbytes$252C$2Burl$252C$2Buser_agent$255D$26start$3D-172800000
Run Code Online (Sandbox Code Playgroud)
将带您到一个名为的日志组,/my/log/group/goes/here并使用此模式过滤过去 2 天的消息:
[incoming_ip, user_name, user_ip , timestamp, request != "GET /health_checks/all *", status_code = 5* || status_code = 429, bytes, url, user_agent]
Run Code Online (Sandbox Code Playgroud)
我可以解码 URL 的一部分,但我不知道其他一些字符应该是什么(见下文),但这对我来说看起来并不像任何标准的 HTML 编码。有人知道这种 URL 格式的编码器/解码器吗?
%252F == /
$252C == ,
$255B == [
$255D == ]
$253D == =
$2521 == !
$2522 == "
$252F == _
$257C == |
$2B == +
$26 == &
$3D == =
$3F == ?
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
有什么方法可以获取在云监视日志洞察解析的 JSON 对象中找到的数组的长度?
例如,当发送以下结构的 JSON 对象以记录洞察时:
{
names: ['john', 'doe', 'joe', 'schmoe']
}
Run Code Online (Sandbox Code Playgroud)
它被解析为以下字段:
names.0: john
names.1: doe
names.2: joe
names.3: schmoe
Run Code Online (Sandbox Code Playgroud)
并且可以通过
fields @timestamp, names.0, names.1, ...
Run Code Online (Sandbox Code Playgroud)
在这个例子中,有没有办法得到一个field被调用的number_of_names?
| parse get_length(names) as number_of_namesjson amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
我有一个非常简单的查询:
fields @timestamp, req.url, msg
| sort @timestamp desc
| filter msg = "request completed"
| stats count() by req.url
Run Code Online (Sandbox Code Playgroud)
它显示了由 url 聚合的我的应用程序提供的所有请求。不过,我也想通过的总价值的结果进行排序count()-但两者| sort count desc并| sort "count()" desc没有工作。我怎样才能做到这一点?