OpenSearch 管道处理语言 (PPL) - Amazon CloudWatch Logs

OpenSearch 管道处理语言 (PPL)

本节简要介绍如何使用 OpenSearch PPL 查询 CloudWatch Logs。借助 PPL,您可以使用管道连接的命令来检索、查询和分析数据,从而更轻松地理解和编写复杂的查询。其语法基于 Unix 管道,支持通过命令链实现数据的转换与处理。使用 PPL,您可以对数据进行筛选和聚合,并使用一组丰富的数学、字符串、日期、条件和其他函数进行分析。

OpenSearch PPL 只能用于查询标准日志类中的日志组。

注意

有关 CloudWatch Logs 中支持的所有 OpenSearch PPL 查询命令以及语法和限制的详细信息,请参阅《OpenSearch Service 开发人员指南》中的支持的 PPL 命令

有关您可以使用的其他查询语言的信息,请参阅 CloudWatch Logs InsightsOpenSearch Service SQLCloudWatch Metrics Insights

命令或函数 示例查询 描述

fields

fields field1, field2

显示一组需要投影的字段。

join

LEFT JOIN left=l, right=r on l.id = r.id `join_right_lg` | fields l.field_1, r.field_2

将两个数据集联接在一起。

其中

where field1="success" | where field2 != "i-023fe0a90929d8822" | fields field3, field4, field5,field6 | head 1000

根据指定的条件筛选数据。

stats

stats count(), count(field1), min(field1), max(field1), avg(field1) by field2 | head 1000

执行聚合和计算

parse

parse field1 ".*/(?<field2>[^/]+$)" | where field2 = "requestId" | fields field1, field2 | head 1000

从字符串中提取正则表达式 (regex) 模式,并显示提取出的模式。提取出的模式可进一步用于创建新字段或筛选数据。

排序

stats count(), count(field1), min(field1) as field1Alias, max(`field1`), avg(`field1`) by field2 | sort -field1Alias | head 1000

按字段名称对显示的结果进行排序。使用 sort -FieldName 按降序排序。

eval

eval field2 = field1 * 2 | fields field1, field2 | head 20

修改或处理字段的值,并将其存储在不同的字段中。这有助于对列进行数学修改、对列应用字符串函数或对列应用日期函数。

rename

rename field2 as field1 | fields field1;

重命名搜索结果中的一个或多个字段。

head

fields `@message` | head 20

将显示的查询结果限制为前 N 行。

top

top 2 field1 by field2

查找字段中最频繁出现的值。

dedup

dedup field1 | fields field1, field2, field3

根据指定的字段删除重复的条目。

rare

rare field1 by field2

查找字段列表中所有字段中出现频率最低的值。

subquery

where field_1 IN [ search source= `subquery_lg` | fields field_2 ] | fields id, field_1

在 PPL 语句中执行复杂的嵌套查询。

trendline

trendline sma(2, field1) as field1Alias

计算字段的移动平均值。

eventStats

eventstats sum(field1) by field2

使用计算得出的汇总统计数据丰富事件数据。它会分析您事件中的指定字段,计算各种统计指标,然后将这些结果作为新字段附加到每个原始事件上。

扩展

eval tags_array_string = json_extract(`@message`, '$.tags')| eval tags_array = json_array(json_extract(tags_string, '$[0]'), json_extract(tags_string, '$[1]'))| expand tags_array as color_tags

将包含多个值的字段拆分为单独的行,为指定字段中的每个值创建新行。

fillnull

fields `@timestamp`, error_code, status_code | fillnull using status_code = "UNKNOWN", error_code = "UNKNOWN"

使用您提供的值填充 null 字段。可在一个或多个字段中使用。

flatten

eval metadata_struct = json_object('size', json_extract(metadata_string, '$.size'), 'color', json_extract(metadata_string, '$.color')) | flatten metadata_struct as (meta_size, meta_color)

扁平化一个字段。该字段必须是以下类型:struct<?,?>array<struct<?,?>>

cidrmatch

where cidrmatch(ip, '2003:db8::/32') | fields ip

检查指定的 IP 地址是否在给定的 CIDR 范围内。

fieldsummary

where field1 != 200 | fieldsummary includefields= field1 nulls=true

计算每个字段的基本统计数据(计数、非重复计数、最小值、最大值、平均值、标准差和平均值)。

grok

grok email '.+@%{HOSTNAME:host}' | fields email, host

使用 grok 模式解析文本字段,并将结果附加到搜索结果中。

字符串函数

eval field1Len = LENGTH(field1) | fields field1Len

PPL 中的内置函数,可在 PPL 查询中操作和转换字符串及文本数据。例如,转换大小写、合并字符串、提取部分内容以及清理文本。

日期和时间函数

eval newDate = ADDDATE(DATE('2020-08-26'), 1) | fields newDate

内置函数,用于处理和转换 PPL 查询中的日期和时间戳数据。例如,date_add、date_format、datediff、date-sub、timestampadd、timestampdiff、current_timezone、utc_timestamp 和 current_date。

条件函数

eval field2 = isnull(field1) | fields field2, field1, field3

内置函数,用于检查特定字段条件并有条件地计算表达式。例如,如果 field1 为空值,则返回 field2。

数学函数

eval field2 = ACOS(field1) | fields field1

内置函数,用于在 PPL 查询中执行数学计算和转换。例如:abs(绝对值)、round(四舍五入)、sqrt(平方根)、pow(乘方计算)和 ceil(向上取整到最接近的整数)。

CryptoGraphic 函数

eval crypto = MD5(field)| head 1000

计算给定字段的哈希值

JSON 函数

eval valid_json = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') | fields valid_json

用于处理 JSON 的内置函数,包括数组、提取及验证。例如,json_object、json_array、to_json_string、json_array_length、json_extract、json_keys 和 json_valid。