OpenSearch Bahasa Kueri Terstruktur (SQL) - CloudWatch Log Amazon

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 <logGroup> kebutuhan tergantung pada sumber data yang Anda kueri.

Perintah atau fungsi Kueri contoh Deskripsi

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

Menampilkan nilai yang diproyeksikan.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

Klausa bawaan yang menentukan tabel sumber atau tampilan untuk mengambil data, mendukung berbagai jenis gabungan dan subkueri.

WHERE

SELECT * FROM `LogGroupA` WHERE Operation = 'x'

Memfilter peristiwa log berdasarkan kriteria bidang yang disediakan.

FilterIndex

SELECT * FROM `filterIndex('region' = 'us-east-1')` WHERE status = 200 LIMIT 10;

Mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri.

GROUP BY

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream`

Grup mencatat peristiwa berdasarkan kategori dan menemukan rata-rata berdasarkan statistik.

MEMILIKI

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100

Memfilter hasil berdasarkan kondisi pengelompokan.

ORDER BY

SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC

Memesan hasil berdasarkan bidang dalam klausa ORDER BY. Anda dapat mengurutkan dalam urutan menurun atau naik.

BERGABUNG

SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId`

Bergabung dengan hasil untuk dua tabel berdasarkan bidang umum. Inner JOIN atau Left Outer Join harus ditentukan

LIMIT

Select * from `LogGroupA` limit 10

Membatasi hasil kueri yang ditampilkan ke baris N pertama.

Fungsi string

SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA`

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

SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA`

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

SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;

Fungsi bawaan yang melakukan tindakan berdasarkan kondisi tertentu, atau yang mengevaluasi ekspresi secara kondisional. Misalnya, CASE dan IF.

Fungsi agregat

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

Fungsi bawaan yang melakukan perhitungan pada beberapa baris untuk menghasilkan nilai ringkasan tunggal. Misalnya, SUM, COUNT, AVG, MAX, dan MIN.

Fungsi JSON

SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA`

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

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

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

SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;

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

SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA`

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

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

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

SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"

Memungkinkan Anda menentukan beberapa grup log dalam pernyataan SELECT

Pilih beberapa sumber data

SELECT ds1.field1, ds1.field2 from `dataSource(['DataSource1', 'DataSource2'])` as ds1 where ds1.field3= "Success"

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,

  1. filterIndex (...) menentukan, memperlakukan nilai-nilai kunci di dalamnya sebagai indeks bidang. Setiap pasangan nilai kunci dipisahkan dengan koma (contoh di bawah)

  2. 'region' = 'us-east-1' menentukan kondisi aktual yang akan diterapkan

    1. 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 LogGroup

    Namun, 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 LogGroup

    Kueri 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, dan Test::Field di 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;