本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用筛选条件模式匹配 JSON 日志事件中的字词
当您的日志采用 JSON 格式结构时,请使用 JSON 筛选器模式。这些模式允许您以 JSON 对象中的特定字段和值为目标,使其非常适合:
应用程序日志:定位特定的事件类型 IDs、用户或错误代码
AWS 服务日志:筛选器 CloudTrail、VPC 流日志或其他结构化 AWS 日志
微服务:监控输出结构化 JSON 的容器化应用程序
例如,用于{ $.eventType = "UpdateTrail" }查找特定 CloudTrail 事件或{ $.sourceIPAddress != 123.123.* }识别来自意外 IP 范围的流量。
展开以下部分并浏览选项卡,查看演示如何为常见监控场景(从基本的单一条件模式到复杂的复合表达式)创建 JSON 筛选模式的示例。
以下示例展示了如何在常见的监控和故障排除场景中对 JSON 日志事件使用筛选模式。每个示例都包括过滤器模式语法和应用该语法的实际用例。
这些模式适用于来自应用程序、 AWS 服务、容器或自定义系统的任何 JSON 格式的日志。您可以将它们与指标筛选器一起使用来创建 CloudWatch 指标,使用订阅过滤器将日志路由到其他服务,或者使用 Live Tail 来实时监控日志。
如果您使用示例 JSON 日志事件测试示例筛选条件模式,则必须在单行中输入示例 JSON 日志。
用于测试的 JSON 日志事件示例:
{
"eventType": "UpdateTrail",
"sourceIPAddress": "111.111.111.111",
"arrayKey": [
"value",
"another value"
],
"objectList": [
{
"name": "a",
"id": 1
},
{
"name": "b",
"id": 2
}
],
"SomeObject": null,
"cluster.name": "c"
}
- Monitor application events by type
-
跟踪 JSON 应用程序日志中的特定事件类型以监控系统行为。
过滤模式:
{ $.eventType = "UpdateTrail" }
用例:
应用程序监控:跟踪特定的用户操作或系统事件
业务分析:统计特定事件类型的发生次数
故障排除:调查问题时将重点放在具体操作上
此模式适用于任何包含事件类型字段的 JSON 日志,例如:
应用程序日志:{"eventType": "UserLogin", "userId": "123"}
系统日志:{"eventType": "ConfigUpdate", "component": "database"}
API 日志:{"eventType": "UpdateTrail", "source": "cloudtrail"}
- Block suspicious IP addresses
-
识别与预期 IP 地址模式不匹配的流量,以进行安全监控。
过滤模式:
{ $.sourceIPAddress != 123.123.* }
用例:
安全监控:查找来自意外 IP 范围的请求
访问控制:监控企业网络以外的流量
威胁检测:识别潜在的未经授权的访问尝试
- Track specific application events
-
监控 JSON 数组中的特定值以跟踪应用程序行为和用户操作。
过滤模式:
{ $.arrayKey[0] = "value" }
用例:
用户行为跟踪:监控应用程序日志中的特定用户操作
功能使用情况:跟踪何时使用特定的应用程序功能
错误分析:在数组中查找具有特定错误类别的日志
- Find events using pattern matching
-
使用正则表达式模式来查找可灵活匹配字段值的事件。
过滤模式:
{ $.eventType = %Trail% }
用例:
- Monitor application data with wildcards
-
使用通配符和正则表达式在任何数组元素中查找特定模式。
过滤模式:
{ $.arrayKey[*] = %val.{2}% }
用例:
数据验证:查找包含与特定模式匹配的值的数组
内容过滤:监控用户生成的内容是否存在特定模式
质量保证:跟踪应用程序日志中的数据格式合规性
- Track network traffic patterns
-
使用正则表达式模式和通配符监控特定范围内的 IP 地址。
过滤模式:
{ $.* = %111\.111\.111\.1[0-9]{1,2}% }
用例:
网络监控:跟踪来自特定 IP 子网的流量
安全分析:监控来自特定网络范围的访问
负载平衡:分析 IP 范围内的流量分布
配额
在一个属性选择器中最多只能使用一个通配符选择器。
- Handle JSON properties with special characters
-
访问名称中包含句点或其他特殊字符的 JSON 属性。
过滤模式:
{ $.['cluster.name'] = "c" }
用例:
- Find null or missing values
-
监视可能表明应用程序存在问题的缺失数据或空值。
过滤模式:
{ $.SomeObject IS NULL }
用例:
数据质量监控:查找缺少必填字段的记录
应用程序调试:跟踪何时不存在预期数据
错误检测:监控不完整的 API 响应或数据库查询
- Detect missing configuration fields
-
查找完全缺少预期字段的日志,这可能表明存在配置问题。
过滤模式:
{ $.SomeOtherObject NOT EXISTS }
用例:
配置验证:确保日志中存在所有必填字段
API 监控:跟踪未完成的请求或响应
数据管道监控:查找缺少预期架构字段的记录
当需要使用逻辑运算符 AND (“&&”) 和 OR (“||”) 组合多个条件时,请使用复合表达式。这些模式可帮助您创建复杂的监控规则,这些规则要求满足多个条件或在多个条件中的任何一个条件下触发。
复合表达式支持圆括号 (“()”),并遵循标准运算顺序:() > && > ||。当简单的单一条件过滤器不足以满足您的监控需求时,请使用这些模式。
用于测试的 JSON 日志事件示例:
{
"user": {
"id": 1,
"email": "John.Stiles@example.com"
},
"users": [
{
"id": 2,
"email": "John.Doe@example.com"
},
{
"id": 3,
"email": "Jane.Doe@example.com"
}
],
"actions": [
"GET",
"PUT",
"DELETE"
],
"coordinates": [
[0, 1, 2],
[4, 5, 6],
[7, 8, 9]
]
}
- Monitor specific user actions
-
通过将用户识别与操作监控相结合,跟踪特定用户何时执行特定操作。
过滤模式:
{ ($.user.id = 1) && ($.users[0].email = "John.Doe@example.com") }
用例:
安全审计:跟踪特定管理员用户何时访问敏感资源
合规性监控:确保某些用户仅执行经批准的操作
用户行为分析:监控用户属性和操作之间的相关性
- Alert on any suspicious activity
-
创建广泛的监控,当多个相关条件中的任何一个出现时触发。
过滤模式:
{ $.user.email = "John.Stiles@example.com" || $.coordinates[0][1] = "nonmatch" && $.actions[2] = "nonmatch" }
用例:
- Require multiple conditions for alerts
-
通过要求在触发警报之前满足多个特定条件来减少误报。
过滤模式:
{ ($.user.email = "John.Stiles@example.com" || $.coordinates[0][1] = "nonmatch") && $.actions[2] = "nonmatch" }
用例:
高可信度警报:仅在多个可疑指标对齐时发出警报
复杂的业务规则:监控需要多个标准的场景
降噪:防止单个孤立事件发出警报
配额
在属性选择器中最多只能使用一个通配符选择器,在具有复合表达式的筛选条件模式中最多只能使用三个通配符选择器。
- Monitor failed correlation attempts
-
跟踪数据字段之间的预期关系何时不匹配,这可能表明存在数据质量问题。
过滤模式:
{ ($.user.id = 2 && $.users[0].email = "nonmatch") || $.actions[2] = "GET" }
用例:
数据验证:查找相关字段与预期模式不匹配的记录
系统完整性:监控数据损坏或同步问题
质量保证:跟踪数据关系何时破裂