OpenSearch PPL 語言 - Amazon CloudWatch Logs

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

OpenSearch PPL 語言

本節包含使用 OpenSearch PPL 查詢 CloudWatch Logs 的基本簡介。透過 PPL,您可以使用管道整合命令擷取、查詢和分析資料,讓您更輕鬆地了解和編寫複雜的查詢。其語法是以 Unix 管道為基礎,並啟用命令鏈結來轉換和處理資料。使用 PPL,您可以篩選和彙總資料,並使用一組豐富的數學、字串、日期、條件式和其他函數進行分析。

您只能將 OpenSearch PPL 用於標準日誌類別中的日誌群組查詢。當您選取要查詢的日誌群組時,您可以選取單一日誌群組、共用字首的一組日誌群組,或選取所有日誌群組

注意

如需 CloudWatch Logs 中支援的所有 OpenSearch PPL 查詢命令的相關資訊,以及語法和限制的詳細資訊,請參閱 OpenSearch Service 開發人員指南中的支援 PPL 命令

命令或函數 查詢範例 描述

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。