Topik ini menjelaskan sintaksis dan parameter fungsi Grok serta memberikan contoh penggunaannya.
Deskripsi
Fungsi ekspresi reguler cukup kompleks. Oleh karena itu, disarankan untuk menggunakan fungsi Grok dibandingkan dengan fungsi ekspresi reguler. Untuk informasi lebih lanjut, lihat Fungsi Ekspresi Reguler. Fungsi Grok dapat digunakan bersamaan dengan fungsi ekspresi reguler. Contoh:
e_match("content", grok(r"\w+: (%{IP})")) # Pola Grok cocok dengan pola data log abc: 192.168.0.0 atau xyz: 192.168.1.1.
e_match("content", grok(r"\w+: (%{IP})", escape=True)) # Pola Grok tidak cocok dengan pola data log abc: 192.168.0.0 tetapi cocok dengan pola data log \w+: 192.168.0.0.Fungsi Grok mengekstrak nilai berdasarkan ekspresi reguler.
- Sintaksis
grok(pattern, escape=False, extend=None) - Sintaksis Grok
%{SYNTAX} %{SYNTAX:NAME}Dalam sintaksis Grok, SYNTAX menentukan ekspresi reguler yang telah ditentukan sebelumnya, sedangkan NAME menentukan grup. Contoh:"%{IP}" # Setara dengan r"(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" "%{IP:source_id}" # Setara dengan r"(?P<source_id>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" ("%{IP}") # Setara dengan r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"Fungsi Grok mendukung mode pengelompokan berikut:- Mode Grup PenangkapanBeberapa pola Grok mendukung grup penangkapan bernama. Anda hanya dapat menggunakan sintaksis %{SYNTAX} untuk pola Grok ini, yang biasanya digunakan untuk mengurai pernyataan. Untuk informasi lebih lanjut, lihat bagian "Format Log" di Pola Grok. Contoh:
"%{SYSLOGBASE}" "%{COMMONAPACHELOG}" "%{COMBINEDAPACHELOG}" "%{HTTPD20_ERRORLOG}" "%{HTTPD24_ERRORLOG}" "%{HTTPD_ERRORLOG}" ... - Mode Grup Non-PenangkapanBeberapa pola Grok mendukung grup non-penangkapan. Contoh:
"%{INT}" "%{YEAR}" "%{HOUR}" ...
- Mode Grup Penangkapan
- Parameter
Parameter Tipe Diperlukan Deskripsi pattern String Ya Sintaksis Grok. Untuk informasi lebih lanjut, lihat Pola Grok. escape Bool Tidak Menentukan apakah akan melarikan karakter khusus yang termasuk dalam ekspresi reguler dalam pola non-Grok. Nilai default: False. extend Dict Tidak Ekspresi Grok kustom.
Contoh
- Contoh 1: Ekstraksi tanggal dan konten referensi.
- Log Mentah
content: 2019 June 24 "I am iron man" - Aturan Transformasi
e_regex('content',grok('%{YEAR:year} %{MONTH:month} %{MONTHDAY:day} %{QUOTEDSTRING:motto}')) - Hasil
content: 2019 June 24 "I am iron man" year: 2019 month: June day: 24 motto: "I am iron man"
- Log Mentah
- Contoh 2: Ekstraksi log permintaan HTTP.
- Log Mentah
content: 10.0.0.0 GET /index.html 15824 0.043 - Aturan Transformasi
e_regex('content',grok('%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}')) - Hasil
content: 10.0.0.0 GET /index.html 15824 0.043 client: 10.0.0.0 method: GET request: /index.html bytes: 15824 duration: 0.043
- Log Mentah
- Contoh 3: Ekstraksi log Apache.
- Log Mentah
content: 127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" - Aturan Transformasi
e_regex('content',grok('%{COMBINEDAPACHELOG}')) - Hasil
content: 127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" clientip: 127.0.0.1 ident: - auth: - timestamp: 13/Apr/2015:17:22:03 +0800 verb: GET request: /router.php httpversion: 1.1 response: 404 bytes: 285 referrer: "-" agent: "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
- Log Mentah
- Contoh 4: Ekstraksi log dalam format syslog default.
- Log Mentah
content: May 29 16:37:11 sadness logger: hello world - Aturan Transformasi
e_regex('content',grok('%{SYSLOGBASE} %{DATA:message}')) - Hasil
content: May 29 16:37:11 sadness logger: hello world timestamp: May 29 16:37:11 logsource: sadness program: logger message: hello world
- Log Mentah
- Contoh 5: Melarikan karakter khusus.
- Log Mentah
content: Nov 1 21:14:23 scorn kernel: pid 84558 (expect), uid 30206: exited on signal 3 - Aturan Transformasi
e_regex('content',grok(r'%{SYSLOGBASE} pid %{NUMBER:pid} \(%{WORD:program}\), uid %{NUMBER:uid}: exited on signal %{NUMBER:signal}'))Aturan transformasi berisi karakter khusus tanda kurung (), yang termasuk dalam ekspresi reguler. Jika Anda tidak ingin melarikan tanda kurung (), atur parameter escape ke True. Contoh:
e_regex('content',grok('%{SYSLOGBASE} pid %{NUMBER:pid} (%{WORD:program}), uid %{NUMBER:uid}: exited on signal %{NUMBER:signal}', escape=True)) - Hasil
content: Nov 1 21:14:23 scorn kernel: pid 84558 (expect), uid 30206: exited on signal 3 timestamp: Nov 1 21:14:23 logsource: scorn program: expect pid: 84558 uid: 30206 signal: 3
- Log Mentah
- Contoh 6: Ekstraksi log menggunakan ekspresi Grok kustom.
- Log Mentah
content: Beijing-1104,gary 25 "never quit" - Aturan Transformasi
e_regex('content',grok('%{ID:user_id},%{WORD:name} %{INT:age} %{QUOTEDSTRING:motto}',extend={'ID': '%{WORD}-%{INT}'})) - Hasil
content: Beijing-1104,gary 25 "never quit" user_id: Beijing-1104 name: gary age: 25 motto: "never quit"
- Log Mentah
- Contoh 7: Pencocokan data JSON.
- Log Mentah
content: 2019-10-29 16:41:39,218 - INFO: owt.AudioFrameConstructor - McsStats: {"event":"mediaStats","connectionId":"331578616547393100","durationMs":"5000","rtpPackets":"250","rtpBytes":"36945","nackPackets":"0","nackBytes":"0","rtpIntervalAvg":"20","rtpIntervalMax":"104","rtpIntervalVar":"4","rtcpRecvPackets":"0","rtcpRecvBytes":"0","rtcpSendPackets":"1","rtcpSendBytes":"32","frame":"250","frameBytes":"36945","timeStampOutOfOrder":"0","frameIntervalAvg":"20","frameIntervalMax":"104","frameIntervalVar":"4","timeStampIntervalAvg":"960","timeStampIntervalMax":"960","timeStampIntervalVar":"0"} - Aturan Transformasi
e_regex('content',grok('%{EXTRACTJSON}')) - Hasil
content: 2019-10-29 16:41:39,218 - INFO: owt.AudioFrameConstructor - McsStats: {"event":"mediaStats","connectionId":"331578616547393100","durationMs":"5000","rtpPackets":"250","rtpBytes":"36945","nackPackets":"0","nackBytes":"0","rtpIntervalAvg":"20","rtpIntervalMax":"104","rtpIntervalVar":"4","rtcpRecvPackets":"0","rtcpRecvBytes":"0","rtcpSendPackets":"1","rtcpSendBytes":"32","frame":"250","frameBytes":"36945","timeStampOutOfOrder":"0","frameIntervalAvg":"20","frameIntervalMax":"104","frameIntervalVar":"4","timeStampIntervalAvg":"960","timeStampIntervalMax":"960","timeStampIntervalVar":"0"} json:{"event":"mediaStats","connectionId":"331578616547393100","durationMs":"5000","rtpPackets":"250","rtpBytes":"36945","nackPackets":"0","nackBytes":"0","rtpIntervalAvg":"20","rtpIntervalMax":"104","rtpIntervalVar":"4","rtcpRecvPackets":"0","rtcpRecvBytes":"0","rtcpSendPackets":"1","rtcpSendBytes":"32","frame":"250","frameBytes":"36945","timeStampOutOfOrder":"0","frameIntervalAvg":"20","frameIntervalMax":"104","frameIntervalVar":"4","timeStampIntervalAvg":"960","timeStampIntervalMax":"960","timeStampIntervalVar":"0"}
- Log Mentah
- Contoh 8: Penguraian log dalam format World Wide Web Consortium (W3C).
- Log Mentah
content: 2018-12-26 00:00:00 W3SVC2 application001 192.168.0.0 HEAD / - 8000 - 10.0.0.0 HTTP/1.0 - - - - 404 0 64 0 19 0 - Aturan Transformasi
Bidang yang tidak didukung oleh format W3C ditampilkan sebagai tanda hubung (-). Oleh karena itu, tanda hubung (-) digunakan dalam pola Grok untuk mencocokkan bidang tersebut.
e_regex("content",grok('%{DATE:data} %{TIME:time} %{WORD:s_sitename} %{WORD:s_computername} %{IP:s_ip} %{WORD:cs_method} %{NOTSPACE:cs_uri_stem} - %{NUMBER:s_port} - %{IP:c_ip} %{NOTSPACE:cs_version} - - - - %{NUMBER:sc_status} %{NUMBER:sc_substatus} %{NUMBER:sc_win32_status} %{NUMBER:sc_bytes} %{NUMBER:cs_bytes} %{NUMBER:time_taken}')) - Hasil
content: 2018-12-26 00:00:00 W3SVC2 application001 192.168.0.0 HEAD / - 8000 - 10.0.0.0 HTTP/1.0 - - - - 404 0 64 0 19 0 data: 18-12-26 time: 00:00:00 s_sitename: W3SVC2 s_computername: application001 s_ip: 192.168.0.0 cs_method: HEAD cs_uri_stem: / s_port: 8000 c_ip: 10.0.0.0 cs_version: HTTP/1.0 sc_status: 404 sc_substatus: 0 sc_win32_status: 64 sc_bytes: 0 cs_bytes: 19 time_taken: 0
- Log Mentah