Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
OpenSearch Bahasa Kueri Terstruktur (SQL)
Bagian ini berisi pengantar dasar untuk menanyakan CloudWatch Log menggunakan OpenSearch SQL. Ini menyediakan opsi yang akrab jika Anda terbiasa bekerja dengan database relasional. OpenSearch SQL menawarkan subset fungsionalitas SQL, menjadikannya pilihan yang baik untuk melakukan kueri ad-hoc dan tugas analisis data. Dengan OpenSearch SQL, Anda dapat menggunakan perintah seperti SELECT, FROM, WHERE, GROUP BY, HAVING, dan berbagai perintah dan fungsi SQL lainnya. Anda dapat menjalankan JOIN di seluruh grup log, menghubungkan data di seluruh grup log menggunakan sub-kueri, dan menggunakan kumpulan kaya JSON, matematika, string, kondisional, dan fungsi SQL lainnya untuk melakukan analisis yang kuat pada log dan data keamanan.
Gunakan filterIndex untuk mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. Kurangi 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 filterIndex untuk menentukan nama bidang, bersama dengan nama bidang dan nilai untuk menanyakan hanya data yang diindeks yang berisi bidang dan nilai yang ditentukan.
Anda dapat menggunakan OpenSearch SQL untuk kueri grup log di Kelas Log Standar. SQL juga mendukung query menggunakan nama sumber data dan tipe sumber data.
catatan
Tabel berikut mencantumkan perintah SQL dan fungsi yang didukung di CloudWatch Log Untuk informasi tentang semua perintah OpenSearch SQL termasuk sintaks, lihat Per intah SQL yang Di dukung di Panduan Pengembang OpenSearch Layanan.
Untuk informasi tentang bahasa kueri lain yang dapat Anda gunakan, lihat CloudWatch Logs Insights, OpenSearch Service PPL, dan CloudWatch Metrics Insights.
Perintah SQL yang didukung
catatan
Di kolom kueri contoh, ganti sesuai kebutuhan tergantung pada sumber data mana yang Anda kueri. <logGroup>
| Perintah atau fungsi | Kueri contoh | Deskripsi |
|---|---|---|
|
SELECT |
|
Menampilkan nilai yang diproyeksikan. |
|
FROM |
|
Built-in klausa yang menentukan tabel sumber atau tampilan dari mana untuk mengambil data, mendukung berbagai jenis gabungan dan subquery. |
|
WHERE |
|
Memfilter peristiwa log berdasarkan kriteria bidang yang disediakan. |
|
FilterIndeks |
|
Mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. |
|
GROUP BY |
|
Grup mencatat peristiwa berdasarkan kategori dan menemukan rata-rata berdasarkan statistik. |
|
MEMILIKI |
|
Memfilter hasil berdasarkan kondisi pengelompokan. |
|
ORDER BY |
|
Memesan hasil berdasarkan bidang dalam klausa ORDER BY. Anda dapat mengurutkan dalam urutan menurun atau naik. |
|
BERGABUNG |
|
Menggabungkan hasil untuk dua tabel berdasarkan bidang umum. Internal JOIN atau Left Outer Join harus ditentukan |
|
LIMIT |
|
Membatasi hasil kueri yang ditampilkan ke N baris pertama. |
|
Fungsi string |
|
Built-in fungsi dalam SQL yang dapat memanipulasi dan mengubah data string dan teks dalam kueri SQL. Misalnya, mengubah kasus, menggabungkan string, mengekstraksi bagian, dan membersihkan teks. |
|
Fungsi tanggal |
|
Built-in fungsi untuk menangani dan mengubah data tanggal dan stempel waktu dalam kueri SQL. Misalnya, date_add, date_format, datediff, dan current_date. |
|
Fungsi kondisional |
|
Built-in fungsi yang melakukan tindakan berdasarkan kondisi tertentu, atau yang mengevaluasi ekspresi secara kondisional. Misalnya, CASE dan IF. |
|
Fungsi agregat |
|
Built-in fungsi yang melakukan perhitungan pada beberapa baris untuk menghasilkan nilai ringkasan tunggal. Misalnya, SUM, COUNT, AVG, MAX, dan MIN. |
|
Fungsi JSON |
|
Built-in fungsi untuk mengurai, mengekstraksi, memodifikasi, dan menanyakan JSON-formatted data dalam kueri SQL (misalnya, from_json, to_json, get_json_object, json_tuple) memungkinkan manipulasi struktur JSON dalam kumpulan data. |
|
Fungsi array |
|
Built-in fungsi untuk bekerja dengan kolom tipe array dalam kueri SQL, memungkinkan operasi seperti mengakses, memodifikasi, dan menganalisis data array (misalnya, ukuran, meledak, array_contains). |
|
Fungsi jendela |
|
Built-in fungsi yang melakukan perhitungan di seluruh rangkaian baris tertentu yang terkait dengan baris (jendela) saat ini, memungkinkan operasi seperti peringkat, total berjalan, dan rata-rata bergerak. Misalnya, ROW_NUMBER, RANK, LAG, dan LEAD |
|
Fungsi konversi |
|
Built-in fungsi untuk mengonversi data dari satu jenis ke jenis lain dalam kueri SQL, memungkinkan transformasi tipe data dan konversi format. Misalnya, CAST, TO_DATE, TO_TIMESTAMP, dan BINARY. |
|
Fungsi predikat |
|
Built-in fungsi yang mengevaluasi kondisi dan mengembalikan nilai boolean (true/false) berdasarkan kriteria atau pola tertentu. Misalnya, IN, LIKE, BETWEEN, IS NULL, dan EXISTS. |
|
Pilih beberapa grup log |
|
Memungkinkan Anda menentukan beberapa grup log dalam pernyataan SELECT |
|
Pilih beberapa sumber data |
|
Memungkinkan Anda menentukan beberapa sumber data dalam pernyataan SELECT |
SQL yang didukung untuk kueri multi-log-grup
Untuk mendukung kasus penggunaan untuk menanyakan beberapa grup log di SQL, Anda dapat menggunakan logGroups perintah. Menggunakan sintaks ini, Anda dapat menanyakan beberapa grup log dengan menentukannya dalam perintah FROM.
Sintaksis:
`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )
Dalam sintaks ini, Anda dapat menentukan hingga 50 grup log dalam logGroupIdentifier parameter. Untuk mereferensikan grup log di akun pemantauan, gunakan ARN alih-alih LogGroup nama.
Contoh kueri:
SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'
Sintaks berikut yang melibatkan beberapa grup log setelah FROM pernyataan TIDAK didukung saat menanyakan CloudWatch Log.
SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'
SQL yang didukung untuk kueri sumber data
Untuk mendukung kasus penggunaan untuk menanyakan sumber data di SQL, Anda dapat menggunakan perintah DataSource. Menggunakan sintaks ini, Anda dapat menanyakan sumber data dengan menentukannya dalam FROM perintah. Anda dapat menentukan hingga 10 sumber data.
Sintaksis
`dataSource( ['DataSource1', 'DataSource2', ...'DataSourcen'] )`
Contoh kueri
SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1', 'DataSource2'] )` as DS1 WHERE DS1.Column1 = 'ABC'
Lingkup kueri
Di AWS CLI dan API, Anda dapat menentukan log mana yang akan dikueri dengan menggunakan grup log, sumber dan jenis data, dan indeks bidang.
Grup Log
Pemilihan sumber Grup Log dapat digunakan ketika pelanggan mengetahui grup log mana yang perlu dicari
SELECT * FROM `logGroups(logGroupIdentifier: ['/aws/lambda/my-function'])`;
Sumber dan Jenis Data
Pelanggan dapat menanyakan log mereka menggunakan nama sumber data dan jenis sumber data.
Pemilihan sumber data dan tipe berbasis sumber 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 tipe data yang ditentukan.
Untuk mendukung kasus penggunaan untuk menanyakan sumber data di SQL, Anda dapat menggunakan perintah DataSource. Menggunakan sintaks ini, Anda dapat menanyakan sumber data dengan menentukannya dalam perintah FROM. Anda dapat menentukan hingga 10 sumber data.
Sintaksis:
`dataSource( ['DataSource1.Type1', 'DataSource2.Type2', ...'DataSourcen.Typen'] )`
Contoh kueri:
SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1.Type1', 'DataSource2.Type2'] )` as DS1 WHERE DS1.Column1 = 'ABC'
Untuk informasi selengkapnya tentang kueri berdasarkan sumber data, lihatGunakan aspek untuk mengelompokkan dan menjelajahi log.
Contoh gabungan
Pelanggan dapat menentukan semua operator pemilihan sumber dalam backtick dalam urutan apa pun dan hasilnya akan didasarkan pada persimpangan semua kondisi yang diterapkan.
Misalnya, aws/lambda /my-function-1 mungkin berisi beberapa sumber & tipe data termasuk berbagai macam indeks, ketika kueri berikut dijalankan, hasil yang dikembalikan hanya akan memiliki peristiwa sumber dan tipe DataSource1.Type1 dan cocok dengan kriteria 'status' = 200.
SELECT * FROM ` logGroups(logGroupIdentifier: ['/aws/lambda/my-function']) filterIndex('status' = 200) dataSource(['DataSource1.Type1']) `;
Indeks Bidang
Pemilihan Index-based sumber bidang secara otomatis mengidentifikasi grup log yang relevan saat filter menargetkan bidang yang diindeks, mengurangi volume pemindaian dan runtime kueri.
Gunakan filterIndex 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 yang diindeks pada bidang ini, lebih lanjut mengoptimalkan kueri dengan melewatkan grup log yang tidak memiliki peristiwa log yang berisi bidang yang ditentukan dalam kueri untuk bidang yang diindeks. Ini lebih lanjut 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.
Di SQL, FilterIndex digunakan untuk menentukan pasangan nilai kunci mana yang harus diperlakukan sebagai indeks. Sintaksnya adalah sebagai berikut
SELECT * FROM `filterIndex('region' = 'us-east-1')`;
dimana,
-
FilterIndex (...) menentukan, memperlakukan nilai-nilai kunci di dalamnya sebagai indeks bidang. Setiap pasangan nilai kunci dipisahkan oleh koma (contoh di bawah)
-
'region' = 'us-east-1' menentukan kondisi aktual yang akan diterapkan
-
Catatan: Alih-alih = pelanggan dapat menggunakan IN untuk menentukan beberapa nilai (contoh di bawah)
-
Menggunakan beberapa FilterIndex akan menggabungkan kondisi menggunakan “DAN”. Dalam contoh tersebut, log yang cocok dengan status=200 dan wilayah di us-east-1 atau us-west-2 akan ditanyakan.
SELECT * FROM `filterIndex('status' = 200, 'region' IN ['us-east-1', 'us-west-2'])`;
Pembatasan
Batasan berikut berlaku saat Anda menggunakan OpenSearch SQL untuk membuat kueri di CloudWatch Logs Insights.
-
Anda hanya dapat menyertakan satu JOIN dalam pernyataan SELECT.
-
Anda tidak dapat menggunakan JOIN atau subquery dengan kueri sumber data.
-
Hanya satu tingkat subquery bersarang yang didukung.
-
Beberapa kueri pernyataan yang dipisahkan oleh semi-titik dua (;) tidak didukung.
-
Kueri yang berisi nama bidang yang identik tetapi berbeda hanya dalam kasus (seperti field1 dan FIELD1) tidak didukung.
Misalnya, kueri berikut tidak didukung:
Select AWSAccountId, AwsAccountId from LogGroupNamun, kueri berikut didukung karena nama bidang (
@logStream) identik di kedua grup log:Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id -
Fungsi dan ekspresi harus beroperasi pada nama bidang dan menjadi bagian dari pernyataan SELECT dengan grup log yang ditentukan dalam klausa FROM.
Misalnya, kueri ini tidak didukung:
SELECT cos(10) FROM LogGroupKueri ini didukung:
SELECT cos(field1) FROM LogGroup -
Saat menggunakan perintah SQL atau PPL, lampirkan bidang tertentu di backtick untuk berhasil menanyainya. Backtick diperlukan untuk bidang dengan karakter khusus (non-alfabet dan non-numerik). Misalnya, lampirkan
@message,Operation.Export, danTest::Fielddi backtick. Anda tidak perlu melampirkan bidang dengan nama alfabet murni di backtick.Contoh kueri dengan bidang sederhana:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;Kueri serupa dengan backtick ditambahkan:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;