

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# OpenSearch Bahasa Pemrosesan Pipa (PPL)
<a name="CWL_AnalyzeLogData_PPL"></a>

Bagian ini berisi pengantar dasar untuk menanyakan CloudWatch Log menggunakan OpenSearch PPL. Dengan PPL, Anda dapat mengambil, menanyakan, dan menganalisis data menggunakan perintah piped-together, sehingga lebih mudah untuk memahami dan menyusun kueri yang kompleks. Sintaksnya didasarkan pada pipa Unix, dan memungkinkan rantai perintah untuk mengubah dan memproses data. Dengan PPL, Anda dapat memfilter dan mengumpulkan data, dan menggunakan serangkaian matematika, string, tanggal, kondisional, dan fungsi lainnya yang kaya untuk analisis.

Termasuk `SOURCE` dalam kueri PPL adalah cara yang berguna untuk menentukan indeks bidang grup log, dan sumber data untuk disertakan dalam kueri saat Anda menggunakan AWS CLI atau API untuk membuat kueri. `SOURCE`Perintah hanya didukung di API AWS CLI dan, bukan di CloudWatch konsol. Saat Anda menggunakan CloudWatch konsol untuk memulai kueri, Anda menggunakan antarmuka konsol untuk menentukan grup log dan nama dan jenis sumber data.

Gunakan `aws:fieldIndex` untuk mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. Grup log yang relevan dipilih secara otomatis, berdasarkan bidang yang ditentukan dalam `filterIndex` perintah. Ini mengurangi volume yang dipindai dengan melewatkan grup log yang tidak memiliki peristiwa log yang berisi bidang yang ditentukan dalam kueri, dan hanya memindai grup log yang cocok dengan nilai yang ditentukan dalam kueri untuk indeks bidang ini. Gunakan `aws:fieldIndex` untuk menentukan nama bidang, bersama dengan nama bidang dan nilai dalam perintah sumber untuk menanyakan hanya data yang diindeks yang berisi bidang dan nilai yang ditentukan. Untuk informasi selengkapnya, lihat [Buat indeks bidang untuk meningkatkan kinerja kueri dan mengurangi volume pemindaian](CloudWatchLogs-Field-Indexing.md) 

Anda dapat menggunakan OpenSearch PPL untuk kueri grup log di Kelas Log Standar. 

**catatan**  
Untuk informasi tentang semua perintah kueri OpenSearch PPL yang didukung di CloudWatch Log dan informasi terperinci tentang sintaks dan pembatasan, lihat [perintah PPL yang didukung di Panduan](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-ppl.html) Pengembang OpenSearch Layanan.  
 Untuk informasi tentang bahasa kueri lain yang dapat Anda gunakan lihat, [Wawasan CloudWatch Log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html), [SQL OpenSearch Layanan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_SQL.html), dan [CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html)


| Perintah atau fungsi | Kueri contoh | Deskripsi | 
| --- | --- | --- | 
| `fields` | `fields field1, field2` | Menampilkan satu set bidang yang membutuhkan proyeksi. | 
| `join` | `LEFT JOIN left=l, right=r on l.id = r.id `join_right_lg` \| fields l.field_1, r.field_2` | Bergabung dengan dua kumpulan data bersama-sama. | 
| `where` | `where field1="success" \| where field2 != "i-023fe0a90929d8822" \| fields field3, field4, field5,field6 \| head 1000` | Memfilter data berdasarkan kondisi yang Anda tentukan. | 
| `aws:fieldIndex` | `source = [`aws:fieldIndex`="region", `region` = "us-west-2"] \| where status = 200 \| head 10` | Mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. | 
| `stats` | `stats count(), count(field1), min(field1), max(field1), avg(field1) by field2 \| head 1000` | Melakukan agregasi dan perhitungan | 
| `parse` | `parse field1 ".*/(?<field2>[^/]+$)" \| where field2 = "requestId" \| fields field1, field2 \| head 1000` | Mengekstrak pola ekspresi reguler (regex) dari string dan menampilkan pola yang diekstraksi. Pola yang diekstraksi dapat digunakan lebih lanjut untuk membuat bidang baru atau menyaring data. | 
| `sort` | `stats count(), count(field1), min(field1) as field1Alias, max(`field1`), avg(`field1`) by field2 \| sort -field1Alias \| head 1000` | Urutkan hasil yang ditampilkan dengan nama bidang. Gunakan sort - FieldName untuk mengurutkan dalam urutan menurun. | 
| `eval` | `eval field2 = field1 * 2 \| fields field1, field2 \| head 20` | Memodifikasi atau memproses nilai bidang dan menyimpannya di bidang yang berbeda. Ini berguna untuk memodifikasi kolom secara matematis, menerapkan fungsi string ke kolom, atau menerapkan fungsi tanggal ke kolom. | 
| `rename` | `rename field2 as field1 \| fields field1;` | Mengganti nama satu atau beberapa bidang di hasil pencarian. | 
| `head` | `fields `@message` \| head 20` | Membatasi hasil kueri yang ditampilkan ke baris N pertama. | 
| `top` | `top 2 field1 by field2` | Menemukan nilai yang paling sering untuk bidang. | 
| `dedup` | `dedup field1 \| fields field1, field2, field3` | Menghapus entri duplikat berdasarkan bidang yang Anda tentukan. | 
| `rare` | `rare field1 by field2` | Menemukan nilai yang paling tidak sering dari semua bidang dalam daftar bidang. | 
| `subquery` | `where field_1 IN [ search source= `subquery_lg` \| fields field_2 ] \| fields id, field_1 ` | Melakukan kueri yang kompleks dan bersarang dalam pernyataan PPL Anda. | 
| `trendline` | `trendline sma(2, field1) as field1Alias` | Menghitung rata-rata bergerak bidang. | 
| `eventStats` | `eventstats sum(field1) by field2` | Memperkaya data acara Anda dengan statistik ringkasan yang dihitung. Ini menganalisis bidang tertentu dalam acara Anda, menghitung berbagai ukuran statistik, dan kemudian menambahkan hasil ini ke setiap peristiwa asli sebagai bidang baru. | 
| `expand` | `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` | Memecah bidang yang berisi beberapa nilai menjadi baris terpisah, membuat baris baru untuk setiap nilai di bidang yang ditentukan. | 
| `fillnull` | `fields `@timestamp`, error_code, status_code \| fillnull using status_code = "UNKNOWN", error_code = "UNKNOWN"` | Mengisi bidang null dengan nilai yang Anda berikan. Ini dapat digunakan dalam satu atau lebih bidang. | 
| `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) ` | Meratakan bidang. Bidang harus dari jenis ini: `struct<?,?>` atau`array<struct<?,?>>`. | 
| `cidrmatch` | `where cidrmatch(ip, '2003:db8::/32') \| fields ip ` | Memeriksa apakah alamat IP yang ditentukan berada dalam kisaran CIDR yang diberikan.  | 
| `fieldsummary` | `where field1 != 200 \| fieldsummary includefields= field1 nulls=true` | Menghitung statistik dasar untuk setiap bidang (hitungan, hitungan berbeda, min, maks, rata-rata, stddev, dan rata-rata). | 
| `grok` | `grok email '.+@%{HOSTNAME:host}' \| fields email, host` | Mem-parsing bidang teks dengan pola grok dan menambahkan hasilnya ke hasil pencarian. | 
| Fungsi string | `eval field1Len = LENGTH(field1) \| fields field1Len` | Fungsi bawaan di PPL yang dapat memanipulasi dan mengubah data string dan teks dalam kueri PPL. Misalnya, mengonversi kasus, menggabungkan string, mengekstraksi bagian, dan membersihkan teks. | 
| Fungsi Tanggal-Waktu | `eval newDate = ADDDATE(DATE('2020-08-26'), 1) \| fields newDate ` | Fungsi bawaan untuk menangani dan mengubah data tanggal dan stempel waktu dalam kueri PPL. Misalnya, date\_add, date\_format, datediff, date-sub, timestampadd, timestampdiff, current\_timezone, utc\_timestamp, dan current\_date. | 
| Fungsi syarat | `eval field2 = isnull(field1) \| fields field2, field1, field3` | Fungsi bawaan yang memeriksa kondisi bidang tertentu, dan mengevaluasi ekspresi secara kondisional. Misalnya, jika field1 adalah null, kembalikan field2. | 
| Fungsi matematika | `eval field2 = ACOS(field1) \| fields field1` | Fungsi bawaan untuk melakukan perhitungan dan transformasi matematis dalam kueri PPL. Misalnya, abs (nilai absolut), bulat (angka bulat), sqrt (akar kuadrat), pow (perhitungan daya), dan ceil (membulatkan ke bilangan bulat terdekat). | 
| CryptoGraphic fungsi | `eval crypto = MD5(field)\| head 1000` | Untuk menghitung hash dari bidang yang diberikan | 
| Fungsi JSON | `eval valid_json = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') \| fields valid_json` | Fungsi bawaan untuk menangani JSON termasuk array, ekstraksi, dan validasi. Misalnya, json\_object, json\_array, to\_json\_string, json\_array\_length, json\_extract, json\_keys, dan json\_valid.  | 

## Lingkup kueri
<a name="CWL_AnalyzeLogData_PPL-scope"></a>

Menyertakan SUMBER dalam kueri adalah cara yang berguna untuk menentukan grup log yang akan disertakan dalam kueri saat Anda menggunakan API AWS CLI atau untuk membuat kueri. Perintah SOURCE hanya didukung di API AWS CLI dan, bukan di CloudWatch konsol. Saat Anda menggunakan CloudWatch konsol untuk memulai kueri, Anda menggunakan antarmuka konsol untuk menentukan grup log dan nama dan jenis sumber data.

Perintah sumber PPL sekarang mendukung beberapa cara untuk menentukannya:

1. Grup log

1. Indeks bidang - Baru

1. Sumber dan tipe data - Baru

### Grup Log
<a name="CWL_AnalyzeLogData_PPL-scope-loggroup"></a>

Pemilihan sumber Grup Log dapat digunakan ketika pelanggan mengetahui grup log yang tepat yang perlu dicari

```
source = [lg:`/aws/lambda/my-function`] | where status = 200 | head 10
```

### Indeks Lapangan
<a name="CWL_AnalyzeLogData_PPL-scope-fieldindex"></a>

Pemilihan sumber berbasis indeks bidang mengurangi jumlah data yang ditanyakan dengan membatasi hasil hanya pada data yang diindeks saat filter Anda menargetkan bidang yang telah diindeks. Grup log yang relevan dipilih secara otomatis, berdasarkan bidang yang ditentukan dalam `filterIndex` perintah. Untuk informasi selengkapnya tentang indeks bidang dan cara membuatnya, lihat [Membuat indeks bidang untuk meningkatkan kinerja kueri dan mengurangi volume pemindaian](CloudWatchLogs-Field-Indexing.md).

Gunakan `aws:fieldIndex` untuk mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. Untuk grup log ini yang diindeks di bidang ini, selanjutnya mengoptimalkan kueri dengan melewatkan grup log yang tidak memiliki peristiwa log yang berisi bidang yang ditentukan dalam kueri untuk bidang yang diindeks. Selanjutnya mengurangi volume yang dipindai dengan mencoba memindai hanya peristiwa log dari grup log ini yang cocok dengan nilai yang ditentukan dalam kueri untuk indeks bidang ini. Untuk informasi selengkapnya tentang indeks bidang dan cara membuatnya, lihat Membuat indeks bidang untuk meningkatkan kinerja kueri dan mengurangi volume pemindaian.

Dalam PPL, `aws:fieldIndex` digunakan untuk menentukan pasangan nilai kunci mana yang harus diperlakukan sebagai indeks. Sintaksnya adalah sebagai berikut

```
source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10
```

dimana,

1. ``aws:fieldIndex`="region"`mengidentifikasi wilayah sebagai Indeks bidang.

   1. Catatan: Alih-alih = pelanggan dapat menggunakan IN untuk menentukan beberapa indeks (contoh di bawah)

1. ``region`="us-west-2"`mengidentifikasi kondisi filter yang akan diterapkan

   1. Catatan: Alih-alih = pelanggan dapat menggunakan IN untuk menentukan beberapa nilai (contoh di bawah)

Pelanggan dapat menentukan beberapa FieldIndex sebagai berikut

```
source = [`aws:fieldIndex` IN ("status", "region"), `status` = 200, `region` IN ("us-west-2", "us-east-1")] | head 10
```

### Sumber dan Jenis Data
<a name="CWL_AnalyzeLogData_PPL-scope-datasource"></a>

Sumber data dan pemilihan sumber berbasis tipe dapat digunakan ketika pelanggan mengetahui sumber data pasti mana yang perlu ditanyakan. Kueri ini dijalankan melalui satu atau lebih grup log yang berisi sumber dan jenis data yang ditentukan.

```
source = [ds:`data_source.type`] | where status = 200 | head 10
```

#### PPL yang didukung untuk kueri sumber data
<a name="CWL_AnalyzeLogData_PPL-scope-datasource-supported"></a>

Untuk mendukung kasus penggunaan kueri sumber data di PPL, Anda dapat menggunakan klausa pemilih sumber dinamis. Dengan menggunakan sintaks ini, Anda dapat meminta sumber data dengan menentukannya dalam perintah pencarian. Anda dapat menentukan hingga 10 sumber data.

**Sintaksis**

```
source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`, ...ds:`DataSourcen.Typen`]
```

**Contoh kueri**

```
search source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`] | fields field1, field2
```

### Contoh gabungan
<a name="CWL_AnalyzeLogData_PPL-scope-combined"></a>

Pelanggan dapat menentukan semua operator pemilihan sumber dalam urutan apa pun & hasilnya akan menjadi persimpangan dari semua kondisi yang diterapkan.

Misalnya,/aws/lambda/my-function-1 mungkin berisi beberapa sumber & tipe data termasuk berbagai indeks, ketika kueri berikut dijalankan, hasil yang dikembalikan hanya akan memiliki peristiwa sumber dan tipe DataSource 1.Type1 dan cocok dengan kriteria 'status' = 200.

```
search source=[
    ds:`DataSource1.Type1`, 
    lg:`/aws/lambda/my-function-1`, 
    `aws:fieldIndex` IN ("status"), `status` = 200 
]
```

## Pembatasan
<a name="CWL_AnalyzeLogData_PPL-restrictions"></a>

Pembatasan berikut berlaku saat Anda menggunakan OpenSearch PPL untuk melakukan kueri di Wawasan CloudWatch Log.
+ Anda tidak dapat menggunakan perintah bergabung atau subquery dengan kueri sumber data.