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

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

根據您指定的條件篩選資料。

統計資料

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) 模式,並顯示擷取的模式。擷取的模式可以進一步用來建立新的欄位或篩選資料。

sort

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

依欄位名稱排序顯示的結果。使用 sort -FieldName 以遞減順序排序。

評估

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

修改或處理欄位的值,並將其存放在不同的欄位中。這有助於以數學方式修改資料欄、將字串函數套用至資料欄,或將日期函數套用至資料欄。

重新命名

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

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 範圍內。

欄位摘要

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 為 null,則傳回 field2。

數學函數

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。