Pola Grok cocok dengan Amazon Ingestion OpenSearch - OpenSearch Layanan Amazon

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

Pola Grok cocok dengan Amazon Ingestion OpenSearch

Amazon OpenSearch Ingestion menyediakan kemampuan pencocokan pola dengan prosesor Grok. Prosesor Grok didasarkan pada java-grok perpustakaan dan mendukung semua pola yang kompatibel. java-grokPustaka dibangun menggunakan pustaka ekspresi java.util.regex reguler.

Anda dapat menambahkan pola kustom ke pipeline Anda menggunakan patterns_definitions opsi. Saat men-debug pola khusus, Grok Debugger dapat membantu.

Selain contoh-contoh ini, Anda juga dapat menggunakan cetak biru pipa log Apache. Untuk informasi selengkapnya tentang cetak biru, lihat Menggunakan cetak biru untuk membuat pipeline.

Penggunaan dasar

Untuk memulai pencocokan pola, buat pipeline berikut:

version: "2" patten-matching-pipeline: source ... processor: - grok: match: message: ['%{IPORHOST:clientip} \[%{HTTPDATE:timestamp}\] %{NUMBER:response_status:int}'] sink: - opensearch: # Provide an OpenSearch Service domain endpoint # Enable the 'serverless' flag if the sink is an OpenSearch Serverless collection aws: ... index: "metrics_for_traces" # serverless: true

Pesan masuk ke pipeline mungkin memiliki konten berikut:

{"message": "127.0.0.1 198.126.12 [10/Oct/2000:13:55:36 -0700] 200"}

Pipeline akan menemukan nilai di message kunci setiap peristiwa yang masuk dan mencoba mencocokkan polanya. Kata kunciIPORHOST,HTTPDATE, dan NUMBER dibangun ke dalam plugin.

Ketika catatan masuk cocok dengan pola, itu menghasilkan peristiwa internal seperti berikut ini, dengan kunci identifikasi yang diekstrak dari pesan asli.

{ "message":"127.0.0.1 198.126.12 [10/Oct/2000:13:55:36 -0700] 200", "response_status":200, "clientip":"198.126.12", "timestamp":"10/Oct/2000:13:55:36 -0700" }

matchKonfigurasi untuk prosesor Grok menentukan kunci catatan mana yang cocok dengan pola mana.

Dalam contoh berikut, konfigurasi pencocokan memeriksa log masuk untuk message kunci. Jika kunci ada, itu cocok dengan nilai kunci terhadap SYSLOGBASE pola, dan kemudian melawan COMMONAPACHELOG pola. Kemudian memeriksa log untuk timestamp kunci. Jika kunci itu ada, ia mencoba untuk mencocokkan nilai kunci terhadap TIMESTAMP_ISO8601 pola.

processor: - grok: match: message: ['%{SYSLOGBASE}', "%{COMMONAPACHELOG}"] timestamp: ["%{TIMESTAMP_ISO8601}"]

Secara default, plugin berlanjut hingga menemukan kecocokan yang berhasil. Misalnya, jika ada kecocokan yang berhasil terhadap nilai dalam message kunci untuk suatu SYSLOGBASE pola, plugin tidak mencoba untuk mencocokkan pola lainnya. Jika Anda ingin mencocokkan log dengan setiap pola, sertakan break_on_match opsi.

Termasuk tangkapan bernama dan kosong

Sertakan keep_empty_captures opsi dalam konfigurasi pipeline Anda untuk menyertakan tangkapan null, atau named_captures_only opsi untuk hanya menyertakan tangkapan bernama. Tangkapan bernama mengikuti pola%{SYNTAX:SEMANTIC}, sementara tangkapan yang tidak disebutkan namanya mengikuti pola. %{SYNTAX}

Misalnya, Anda dapat memodifikasi konfigurasi Grok di atas untuk menghapus clientip dari %{IPORHOST} pola:

processor: - grok: match: message: ['%{IPORHOST} \[%{HTTPDATE:timestamp}\] %{NUMBER:response_status:int}']

Log grokked yang dihasilkan akan terlihat seperti ini:

{ "message":"127.0.0.1 198.126.12 [10/Oct/2000:13:55:36 -0700] 200", "response_status":200, "timestamp":"10/Oct/2000:13:55:36 -0700" }

Perhatikan bahwa clientip kunci tidak ada lagi, karena %{IPORHOST} polanya sekarang merupakan tangkapan yang tidak disebutkan namanya.

Namun, jika Anda mengatur named_captures_only kefalse:

processor: - grok: match: named_captures_only: false message: ['%{IPORHOST} \[%{HTTPDATE:timestamp}\] %{NUMBER:message:int}']

Log grokked yang dihasilkan akan terlihat seperti ini:

{ "message":"127.0.0.1 198.126.12 [10/Oct/2000:13:55:36 -0700] 200", "MONTH":"Oct", "YEAR":"2000", "response_status":200, "HOUR":"13", "TIME":"13:55:36", "MINUTE":"55", "SECOND":"36", "IPORHOST":"198.126.12", "MONTHDAY":"10", "INT":"-0700", "timestamp":"10/Oct/2000:13:55:36 -0700" }

Perhatikan bahwa IPORHOST tangkapan sekarang muncul sebagai kunci baru, bersama dengan beberapa tangkapan internal yang tidak disebutkan namanya seperti MONTH dan. YEAR HTTPDATEKata kunci menggunakan pola-pola ini, yang dapat Anda lihat di file pola default.

Tombol menimpa

Sertakan keys_to_overwrite opsi untuk menentukan kunci rekaman yang ada untuk ditimpa jika ada tangkapan dengan nilai kunci yang sama.

Misalnya, Anda dapat memodifikasi konfigurasi grok di atas untuk diganti %{NUMBER:response_status:int} dengan%{NUMBER:message:int}, dan menambahkan message ke daftar kunci untuk menimpa.

processor: - grok: match: keys_to_overwrite: ["message"] message: ['%{IPORHOST:clientip} \[%{HTTPDATE:timestamp}\] %{NUMBER:message:int}']

Dalam log grokked yang dihasilkan, pesan asli ditimpa dengan nomor 200.

{ "message":200, "clientip":"198.126.12", "timestamp":"10/Oct/2000:13:55:36 -0700" }

Menggunakan pola kustom

Sertakan pattern_definitions opsi dalam konfigurasi grok Anda untuk menentukan pola kustom.

Konfigurasi berikut membuat pola regex kustom bernama CUSTOM_PATTERN-1 dan. CUSTOM_PATTERN-2 Secara default, plugin berlanjut hingga menemukan kecocokan yang berhasil.

processor: - grok: pattern_definitions: CUSTOM_PATTERN_1: 'this-is-regex-1' CUSTOM_PATTERN_2: '%{CUSTOM_PATTERN_1} REGEX' match: message: ["%{CUSTOM_PATTERN_2:my_pattern_key}"]

Jika Anda menentukan break_on_match asfalse, pipeline mencoba mencocokkan semua pola dan mengekstrak kunci dari peristiwa yang masuk:

processor: - grok: pattern_definitions: CUSTOM_PATTERN_1: 'this-is-regex-1' CUSTOM_PATTERN_2: 'this-is-regex-2' CUSTOM_PATTERN_3: 'this-is-regex-3' CUSTOM_PATTERN_4: 'this-is-regex-4' match: message: [ "%{PATTERN1}”, "%{PATTERN2}" ] log: [ "%{PATTERN3}", "%{PATTERN4}" ] break_on_match: false

Anda dapat menentukan pola kustom Anda sendiri yang akan digunakan untuk pencocokan pola di pipeline. Pada contoh sebelumnya, my_pattern akan diekstraksi setelah mencocokkan pola kustom.

Menyimpan tangkapan dengan kunci induk

Sertakan target_key opsi dalam konfigurasi grok Anda untuk membungkus semua tangkapan untuk catatan dalam nilai kunci luar tambahan.

Misalnya, Anda dapat memodifikasi konfigurasi grok di atas untuk menambahkan kunci target bernamagrokked.

processor: - grok: target_key: "grok" match: message: ['%{IPORHOST} \[%{HTTPDATE:timestamp}\] %{NUMBER:response_status:int}']

Log grokked yang dihasilkan akan terlihat seperti ini:

{ "message":"127.0.0.1 198.126.12 [10/Oct/2000:13:55:36 -0700] 200", "grokked": { "response_status":200, "clientip":"198.126.12", "timestamp":"10/Oct/2000:13:55:36 -0700" } }