发布于 2026-01-06 5 阅读
0

🔎🔍 AWS CloudWatch - 你需要了解的五件事 📖 在 CloudWatch 中搜索日志 🕵️‍♀️ Insights 👨‍🚒 控制面板 🚨 告警 结论

🔎🔍 AWS CloudWatch - 你需要了解的五件事

📖 在 CloudWatch 中搜索您的日志

🕵️‍♀️ 见解

👨‍🚒 仪表盘

🚨 警报

结论

如果你的日志记录、监控和警报功能可靠,你就可以无所畏惧地编写代码,那感觉如何?

替代文字

Monisnap,我们的整个后端都是基于 AWS 功能构建的,例如 API Gateway、Lambda、SQS 和 SNS 等。因此,使用 CloudWatch 作为监控系统对我们来说是顺理成章的选择。在本文中,我将与您分享一些我在 CloudWatch 中使用的技巧。内容并不复杂,只是一些基础知识,足以让您感受到 CloudWatch 的强大功能并找到您所需的信息。

📖 在 CloudWatch 中搜索您的日志

在深入探讨日志搜索本身之前,我想建议大家始终记录 JSON 对象而不是纯文本。虽然可以使用 grep 命令在字符串中查找文本,但这样会失去更精细的过滤、分组或排序功能,而这些功能对于提升日志记录效率至关重要。

📃 搜索特定日志组

如果您进入某个特定的日志组(无论是您自己创建的日志组还是特定 Lambda 函数创建的日志组),请点击“搜索日志组”按钮。现在,您就可以搜索该日志组内的所有日志流。

搜索组

现在我们来深入探讨如何过滤这些日志。

搜索框

✅ 查找特定值,或筛选出特定值

想查找错误信息?可以直接在搜索栏输入“ERROR”。不过,我习惯性地会用双引号括起来“ERROR”,以防要查找的值包含“-”或其他特殊字符。

    "ERROR"
Enter fullscreen mode Exit fullscreen mode

加个“-”会对我的搜索结果产生什么影响?它会过滤掉相关内容。如果您不需要所有“INFO”日志,可以这样做:

    -"INFO"
Enter fullscreen mode Exit fullscreen mode

✅✅ 查找特定值(与)

您现在想要获取请求 ID 为“c8ae6b2c-1750-4f5d-bfda-14403cb978a0”的所有错误,但不包括“NotImportantException”异常导致的错误。在这种情况下,您可以将搜索操作逐个执行:

"ERROR" "c8ae6b2c-1750-4f5d-bfda-14403cb978a0" -"NotImportantException"
Enter fullscreen mode Exit fullscreen mode

✅🔘 找出其中一个值(或)

如果要获取所有包含 ERROR 或 WARN 的日志,可以使用问号作为 OR 运算符。在本例中,搜索语句如下:

?"ERROR" ?"WARN"
Enter fullscreen mode Exit fullscreen mode

注:我还没找到同时使用 AND 和 OR 进行过滤的方法。如果您知道,请在下方评论区留言,我会将其添加到文章中,让大家都能受益于您的智慧 :)

⎨⎬ 在 JSON 属性上搜索

如果您使用 JSON 对象而非纯文本作为智能日志记录器,现在可以使用 `{$.}` 表示法对对象的特定属性应用过滤器。`{}` 表示您将在对象本身上进行搜索,而 `$.` 是已记录对象的根节点。OR 运算符现在将变为 `||`,而 AND 运算符则变为 `&&`。

例如:如果您有以下日志:

    A {"line": 'first', "type": "1"}
    B {"line": 'second', "type": "2"}
    C {"line": 'third' , "type": "3"}  
Enter fullscreen mode Exit fullscreen mode

我们来看一个例子:

{$.line="first" || $.line="second"}
 -> Returns line A and B.

{$.type>2}          
 -> Returns line C. 

{$.line="first" && $.type!=3}
-> Returns line A.
Enter fullscreen mode Exit fullscreen mode

我会让你自己尝试一下,或许可以试试用列表查询更复杂的对象?类似这样的思路:

{$.type.subtype[0].value=1}> 
Enter fullscreen mode Exit fullscreen mode

🕵️‍♀️ 见解

既然您已经能够在特定的日志组中查找日志,接下来让我们探索一下 AWS 提供的 Insight 功能的强大之处。Insight 允许您以类似查询的方式在多个日志组中运行搜索。没错,现在您可以对日志进行排序、分组等等操作了。

首先,打开 CloudWatch 用户界面,点击屏幕左侧的“Insight”菜单。你会看到一个空白的日志组栏和一个基本查询。

洞察之家

添加要运行查询的日志组。目前,指定一个 Lambda 函数即可。选择要运行查询的日志组后,您将在屏幕右侧看到所有可用的命令和字段。
本文仅介绍一些基本功能,旨在让您初步了解其可能性。目前,我们只关注以下命令:fields、filter、sort 和 limit。不过,我建议您也了解一下 stats 和 parse,它们功能非常强大!

您在查询中添加的所有命令将依次处理。它是一系列管道操作。

📝 田野

它其实已经很清楚地说明了它的功能:列出您希望在管道操作的输出中包含值的字段。如果您想查看所有可访问的字段,请运行 Insight 提供的基本查询,您将在屏幕右侧的“已发现字段”中看到更多信息。

fields @timestamp, @message, @requestId
Enter fullscreen mode Exit fullscreen mode

🛃 滤镜

这一点也很明显,这将根据需要过滤日志。如果您想要请求 ID 为空字符串的所有日志:

fields @timestamp, @message
    | filter @requestId='47dbd193-c8ad-47b5-8668-6045668ce472' 
Enter fullscreen mode Exit fullscreen mode

在这些日志中,只有我们自定义的 logType 设置为 WARN 或 ERROR 的那一行是你感兴趣的吗?你可以使用 'like' 运算符对上一个管道操作的结果应用新的过滤器。'like' 运算符使用正则表达式语法进行过滤。

fields @timestamp, @message
    | filter @requestId='47dbd193-c8ad-47b5-8668-6045668ce472' 
    | filter logType like /(ERROR|WARN)/
Enter fullscreen mode Exit fullscreen mode

🔻 排序

如果您想查看此(或这些)日志组中发生的最新错误,可以对时间戳字段应用排序操作。支持升序 (ASC) 和降序 (DESC) 排序。

fields @timestamp, @message
    | filter logType like /ERROR/
    | sort @timestamp desc
Enter fullscreen mode Exit fullscreen mode

⇥ 限制

结果太多?使用 limit 运算符限制结果数量,仅显示最后 10 条结果:

fields @timestamp, @message
    | filter logType like /ERROR/
    | sort @timestamp desc
    | limit 10
Enter fullscreen mode Exit fullscreen mode

👨‍🚒 仪表盘

CloudWatch 还允许您在一个地方集中查看所有需要关注的监控信息。这些仪表板不仅可以包含我们在上一节中看到的日志查询结果,还可以汇总 API 网关、SQS 队列、S3 文件等诸多操作的值。

我们团队有几种类型的仪表盘:

👨‍⚕️定期监测

为了进行健康监控,我们设置了一些通用仪表盘,用于显示 2XX、4XX、5XX 以及其他我们需要监控的 HTTP 错误代码。此外,我们还会跟踪最新的错误。任何能够让我们了解系统运行状况的信息,以及能够立即发现异常情况的信息,都至关重要。我们不需要花哨的功能,只需要足够让我们在警报触发时能够注意到并诊断出问题所在即可。

👩‍🔧 特定功能监控

对于任何具有重大影响的功能,我们都会尽力添加图表或跟踪日志,以便通过追踪特定的关键绩效指标 (KPI) 来监控该功能的影响。这完全可以采用特定的日志命名规则,我们可以追踪特定时间段内的日志。

例子:

  • 针对合作伙伴反复出现的错误,我们添加了特定日志“发生错误 0234”。
  • 我们创建了一个查询,可以根据它填充一个图表。
  • 我们据此确认,这一具体错误的影响相当严重。
  • 我们实现了从该问题中恢复的功能。
  • 我们在代码中添加了一个新的日志,内容为“已从错误 0234 中恢复”。
  • 创建了一个新查询来监控此实现
  • 现在我们可以监控有多少请求从这个特定错误中恢复,或者没有恢复。
  • 如果修复解决了我们的问题,请关闭此错误报告。

🚨 警报

最后,本文还将介绍如何使用 CloudWatch 提供的非常实用的警报功能来设置警报。您可以为任何 AWS 资源设置警报,例如 API 网关、SQS、Lambda 等等。

⏰ 创建闹钟

要添加警报,只需转到左侧菜单中的“警报”菜单,然后点击红色的“创建警报”按钮。

📈选择您的指标

接下来,您需要选择要设置警报的指标。指标通常是对象(API 网关端点、Lambda 函数、SQS 主题等)及其操作(执行次数总和、错误总数、删除次数、平均持续时间等)的组合。

您可能需要根据持续时间类型,按周期(例如每秒、每分钟、每 5 分钟等)设置警报。

📛阈值类型

可以设置两种阈值:达到固定数值或检测到异常。目前我们只使用了固定阈值警报,它非常简单,只需设置一个高于/低于该数值的阈值即可收到警报。异常阈值警报则使用算法来分析您使用的指标随时间的变化。如果该数值的变化超出算法判定的异常范围,就会触发通知。如果您已经体验过此功能,欢迎在评论区分享您的想法和经验。非常感谢!

☎ 行动

您可以在这里选择接收通知的方式。我们通常使用社交媒体主题,该主题会向我们开发人员的邮箱地址发送邮件。但您可以根据自己的需要进行设置。

🤓 审核并确认

您只需设置警报的名称和描述,点击确认即可!

结论

本文仅对 CloudWatch 的功能进行了浅尝辄止的介绍,但我认为我们已经涵盖了掌握基本监控和调试技能所需的所有知识点。
希望本文能帮助您大致了解 AWS 在监控领域提供的功能。我们在 Monisnap 使用 CloudWatch 已有 6 个月,至今为止还没有遇到任何严重的问题。希望您也能尽快开始使用它,它绝对是一个非常棒的工具箱!

文章来源:https://dev.to/monisnap/aws-cloudwatch-top-5-things-you-need-to-know-1gik