OpenSearch 管道处理语言 (PPL) - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

OpenSearch 管道处理语言 (PPL)

本节包含使用 OpenSearch PPL 查询 CloudWatch 日志的基本介绍。借助 PPL,您可以使用 piped-together 命令检索、查询和分析数据,从而更容易理解和撰写复杂的查询。它的语法基于 Unix 管道,支持串联命令以转换和处理数据。使用 PPL,您可以筛选和聚合数据,并使用丰富的数学、字符串、日期、条件和其他函数进行分析。

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

注意

有关 CloudWatch 日志中支持的所有 OpenSearch PPL 查询命令的信息以及语法和限制的详细信息,请参阅《 OpenSearch 服务开发者指南》中的 “支持的 PPL 命令”。

有关您可以使用的其他查询语言的信息,请参阅 L CloudWatch ogs InsightsServ OpenSearch ice 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

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

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 field1 by field2

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

subquery

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

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

趋势线

trendline sma(2, field1) as field1Alias

计算字段的移动平均值。

赛事统计

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

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

填空

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

使用您提供的值填充空字段。它可以用于一个或多个字段。

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 范围内。

字段摘要

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

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

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

内置函数,用于检查特定字段条件并有条件地评估表达式。例如,如果字段 1 为空,则返回字段 2。

数学函数

eval field2 = ACOS(field1) | fields field1

用于在 PPL 查询中执行数学计算和转换的内置函数。例如,abs(绝对值)、四舍五入(四舍五入数字)、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。