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 query CloudWatch Log menggunakan OpenSearch SQL. Ini memberikan 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 mengeksekusi JOINs di seluruh grup log, mengkorelasikan data di seluruh grup log menggunakan sub-kueri, dan menggunakan kumpulan kaya fungsi JSON, matematika, string, kondisional, dan SQL lainnya untuk melakukan analisis yang kuat pada data log dan 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 kueri 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 dan fungsi SQL yang didukung di CloudWatch Log Untuk informasi tentang semua perintah OpenSearch SQL termasuk sintaks, lihat perintah SQL yang didukung dalam Panduan Pengembang OpenSearch Layanan.
Untuk informasi tentang bahasa kueri lain yang dapat Anda gunakan, lihat Wawasan CloudWatch Log, PPL OpenSearch Layanan, dan. CloudWatch Metrics Insights
Perintah SQL yang didukung
catatan
Di kolom query contoh, ganti sesuai kebutuhan tergantung pada sumber data yang Anda kueri. <logGroup>
| Perintah atau fungsi | Kueri contoh | Deskripsi |
|---|---|---|
|
SELECT |
|
Menampilkan nilai yang diproyeksikan. |
|
FROM |
|
Klausa bawaan yang menentukan tabel sumber atau tampilan untuk mengambil data, mendukung berbagai jenis gabungan dan subkueri. |
|
WHERE |
|
Memfilter peristiwa log berdasarkan kriteria bidang yang disediakan. |
|
FilterIndex |
|
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 |
|
Bergabung dengan hasil untuk dua tabel berdasarkan bidang umum. Inner JOIN atau Left Outer Join harus ditentukan |
|
LIMIT |
|
Membatasi hasil kueri yang ditampilkan ke baris N pertama. |
|
Fungsi string |
|
Fungsi bawaan di SQL yang dapat memanipulasi dan mengubah string dan data teks dalam kueri SQL. Misalnya, mengonversi kasus, menggabungkan string, mengekstraksi bagian, dan membersihkan teks. |
|
Fungsi tanggal |
|
Fungsi bawaan untuk menangani dan mengubah data tanggal dan stempel waktu dalam kueri SQL. Misalnya, date_add, date_format, datediff, dan current_date. |
|
Fungsi kondisional |
|
Fungsi bawaan yang melakukan tindakan berdasarkan kondisi tertentu, atau yang mengevaluasi ekspresi secara kondisional. Misalnya, CASE dan IF. |
|
Fungsi agregat |
|
Fungsi bawaan yang melakukan perhitungan pada beberapa baris untuk menghasilkan nilai ringkasan tunggal. Misalnya, SUM, COUNT, AVG, MAX, dan MIN. |
|
Fungsi JSON |
|
Fungsi bawaan untuk mengurai, mengekstrak, memodifikasi, dan menanyakan data berformat JSON dalam kueri SQL (misalnya, from_json, to_json, get_json_object, json_tuple) yang memungkinkan manipulasi struktur JSON dalam kumpulan data. |
|
Fungsi array |
|
Fungsi bawaan untuk bekerja dengan kolom tipe array dalam kueri SQL, memungkinkan operasi seperti mengakses, memodifikasi, dan menganalisis data array (misalnya, size, explode, array_contains). |
|
Fungsi jendela |
|
Fungsi bawaan yang melakukan perhitungan di serangkaian 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 |
|
Fungsi bawaan untuk mengonversi data dari satu jenis ke jenis lainnya dalam kueri SQL, memungkinkan transformasi tipe data dan konversi format. Misalnya, CAST, TO_DATE, TO_TIMESTAMP, dan BINARY. |
|
Fungsi predikat |
|
Fungsi bawaan yang mengevaluasi kondisi dan mengembalikan nilai boolean (benar/salah) berdasarkan kriteria atau pola yang ditentukan. Misalnya, IN, LIKE, BETHER, 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 multi-log-group kueri
Untuk mendukung kasus penggunaan untuk menanyakan beberapa grup log di SQL, Anda dapat menggunakan perintah. logGroups Dengan 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 ARNs 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 kueri sumber data di SQL, Anda dapat menggunakan perintah DataSource. Dengan menggunakan sintaks ini, Anda dapat meminta sumber data dengan menentukannya dalam perintah. FROM 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 API AWS CLI dan, Anda dapat menentukan log mana yang akan dikueri dengan menggunakan grup log, sumber dan jenis data, serta indeks bidang.
Grup Log
Pemilihan sumber Grup Log dapat digunakan ketika pelanggan mengetahui grup log yang tepat 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 tipe sumber data.
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.
Untuk mendukung kasus penggunaan kueri sumber data di SQL, Anda dapat menggunakan perintah DataSource. Dengan menggunakan sintaks ini, Anda dapat meminta 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 backticks 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 indeks, ketika kueri berikut dijalankan, hasil yang dikembalikan hanya akan memiliki peristiwa sumber dan tipe DataSource 1.Type1 dan cocok dengan kriteria 'status' = 200.
SELECT * FROM ` logGroups(logGroupIdentifier: ['/aws/lambda/my-function']) filterIndex('status' = 200) dataSource(['DataSource1.Type1']) `;
Indeks Lapangan
Pemilihan sumber berbasis Indeks Bidang secara otomatis mengidentifikasi grup log yang relevan saat filter Anda 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 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 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 dengan 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 “AND”. Dalam contoh, log yang cocok dengan status=200 dan region di us-east-1 atau us-west-2 akan ditanyakan.
SELECT * FROM `filterIndex('status' = 200, 'region' IN ['us-east-1', 'us-west-2'])`;
Pembatasan
Pembatasan berikut berlaku saat Anda menggunakan OpenSearch SQL untuk melakukan kueri di Wawasan CloudWatch Log.
-
Anda hanya dapat menyertakan satu JOIN dalam pernyataan SELECT.
-
Anda tidak dapat menggunakan JOIN atau subquery dengan kueri sumber data.
-
Hanya satu tingkat subkueri bersarang yang didukung.
-
Beberapa kueri pernyataan yang dipisahkan oleh 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 backticks agar berhasil menanyakannya. Backticks diperlukan untuk bidang dengan karakter khusus (non-alfabet dan non-numerik). Misalnya, lampirkan,
@messageOperation.Export, danTest::Fielddi backticks. Anda tidak perlu melampirkan bidang dengan nama abjad murni di backticks.Contoh kueri dengan bidang sederhana:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;Kueri serupa dengan backticks ditambahkan:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;