全部产品
Search
文档中心

Simple Log Service:Fungsi Grok

更新时间:Jul 02, 2025

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 Penangkapan
      Beberapa 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-Penangkapan
      Beberapa pola Grok mendukung grup non-penangkapan. Contoh:
      "%{INT}"    
      "%{YEAR}"
      "%{HOUR}"
      ...
  • Parameter
    ParameterTipeDiperlukanDeskripsi
    patternStringYaSintaksis Grok. Untuk informasi lebih lanjut, lihat Pola Grok.
    escapeBoolTidakMenentukan apakah akan melarikan karakter khusus yang termasuk dalam ekspresi reguler dalam pola non-Grok. Nilai default: False.
    extendDictTidakEkspresi 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"
  • 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
  • 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"
  • 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
  • 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
  • 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"
  • 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"}
  • 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