本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon OpenSearch Ingestion 进行日志充实
您可以使用 Amazon OpenSearch Ingestion 进行不同类型的日志充实。除以上示例之外,您也可以使用通用日志管道蓝图。有关蓝图的更多信息,请参阅 使用蓝图创建管道。
过滤
使用删除事件
version: "2" log-pipeline: source: ... processor: - grok: match: log: [ "%{COMMONAPACHELOG_DATATYPED}" ] - drop_events: drop_when: "/response < 400" sink: - opensearch: ... index: failure_logs
drop_when
选项指定要从管道中删除的偶数。
从字符串中提取密钥值对
日志数据通常包含密钥值对字符串。HTTP 查询字符串是一种常见场景。例如,如果 Web 用户查询可分页 URL,则 HTTP 日志可能包含以下 HTTP 查询字符串:
page=3&q=my-search-term
要使用搜索词执行分析,您可以从查询字符串中提取 q
值。密钥值
以下示例组合 split_string
与 key_value
处理器,从 Apache 日志行中提取查询参数:
version: "2" pipeline ... processor: - grok: match: message: [ "%{COMMONAPACHELOG_DATATYPED}" ] - split_string: entries: - source: request delimiter: "?" - key_value: source: "/request/1" field_split_characters: "&" value_split_characters: "=" destination: query_params
转换事件
不同的转换事件
在此示例中,如果事件中已存在 debug
密钥,则第一个处理器将密钥值设置为 true
。仅当事件中不存在 debug
密钥时,第二个处理器才会将密钥设置为 true
,因为 overwrite_if_key_exists
设置为 true
。
... processor: - add_entries: entries: - key: "debug" value: true ... processor: - add_entries: entries: - key: "debug" value: true overwrite_if_key_exists: true ...
您也可以使用格式字符串通过现有条目构造新条目。例如,${date}-${time}
将根据现有条目 date
和 time
的值创建新条目。
例如,以下管道从现有事件动态添加新的事件条目:
processor: - add_entries: entries: - key: "key_three" format: "${key_one}-${key_two}
例如,考虑以下传入事件:
{ "key_one": "value_one", "key_two": "value_two" }
处理器将其转换为带有新密钥 key_three
的事件,其中对原始事件中其他密钥的值进行了组合。
{ "key_one": "value_one", "key_two": "value_two", "key_three": "value_one-value_two" }
转换字符串
各种转换字符串split_string
处理器:
... processor: - split_string: entries: - source: "message" delimiter: "&" ...
处理器将字符串(例如,a&b&c
)转换为 ["a", "b", "c"].
将列表转换为映射
L ist-to-map
例如,考虑以下处理器配置:
... processor: - list_to_map: key: "name" source: "A-car-as-list" target: "A-car-as-map" value_key: "value" flatten: true ...
此处理器将转换包含对象列表的事件,如下所示:
{ "A-car-as-list": [ { "name": "make", "value": "tesla" }, { "name": "model", "value": "model 3" }, { "name": "color", "value": "white" } ] }
进入映射:
{ "A-car-as-map": { "make": "tesla", "model": "model 3", "color": "white" } }
再举一个例子,假设您有一个采用以下结构的传入事件:
{ "mylist" : [ { "somekey" : "a", "somevalue" : "val-a1", "anothervalue" : "val-a2" }, { "somekey" : "b", "somevalue" : "val-b1", "anothervalue" : "val-b2" }, { "somekey" : "b", "somevalue" : "val-b3", "anothervalue" : "val-b4" }, { "somekey" : "c", "somevalue" : "val-c1", "anothervalue" : "val-c2" } ] }
您可以在处理器配置中定义以下选项:
... processor: - list_to_map: key: "somekey" source: "mylist" target: "myobject" value_key: "value" flatten: true ...
处理器可通过移除 mylist
并添加新的 myobject
对象来修改事件:
{ "myobject" : { "a" : [ { "somekey" : "a", "somevalue" : "val-a1", "anothervalue" : "val-a2" } ], "b" : [ { "somekey" : "b", "somevalue" : "val-b1", "anothervalue" : "val-b2" }, { "somekey" : "b", "somevalue" : "val-b3", "anothervalue" : "val-b4" } "c" : [ { "somekey" : "c", "somevalue" : "val-c1", "anothervalue" : "val-c2" } ] } }
在许多情况下,您可能需要展平每个密钥的数组。在这些情况下,只能选择一个对象进行保留。处理器支持选择第一个或最后一个对象。
... processor: - list_to_map: key: "somekey" source: "mylist" target: "myobject" flatten: true ...
然后,相应展平传入事件结构:
{ "myobject" : { "a" : { "somekey" : "a", "somevalue" : "val-a1", "anothervalue" : "val-a2" }, "b" : { "somekey" : "b", "somevalue" : "val-b1", "anothervalue" : "val-b2" } "c" : { "somekey" : "c", "somevalue" : "val-c1", "anothervalue" : "val-c2" } } }
您可以使用 L ist-to-map 处理器来处理 Amazon WAF 日志。例如,考虑类似下面的示例 WAF 日志:
{ "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "httpRequest": { "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" } ] } }
如果以下管道处理事件:
... processor: - list_to_map: key: "name" source: "httpRequest/headers" value_key: "value" flatten: true ...
将创建以下新事件:
{ "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "httpRequest": { "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" } ] }, "Host": "localhost:1989", "User-Agent": "curl/7.61.1" }
处理传入时间戳
日期
... processor: - date: match: - key: timestamp patterns: ["dd/MMM/yyyy:HH:mm:ss"] destination: "@timestamp" source_timezone: "America/Los_Angeles" destination_timezone: "America/Chicago" locale: "en_US" ...
如果以上管道处理以下事件:
{"timestamp": "10/Feb/2000:13:55:36"}
将事件转换为以下格式:
{ "timestamp":"10/Feb/2000:13:55:36", "@timestamp":"2000-02-10T15:55:36.000-06:00" }
生成时间戳
如果您为 destination
选项指定 @timestamp
,则日期处理器可以为传入事件生成时间戳。
... processor: - date: from_time_received: true destination: "@timestamp" ...
派生标点模式
替换字符串
processor: - substitute_string: entries: - source: "message" from: "[a-zA-Z0-9_]+" to: "" - source: "message" from: "[ ]+" to: "_"
以下传入 Apache HTTP 日志将生成标点模式:
[{"message":"10.10.10.11 - admin [19/Feb/2015:15:50:36 -0500] \"GET /big2.pdf HTTP/1.1\" 200 33973115 0.202 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36\""}] {"message":"..._-_[//:::_-]_\"_/._/.\"_._\"-\"_\"/._(;_)_/._(,_)_/..._/.\""}
您可以通过具有 count
操作的聚合