首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Ruby 終端機離線調試 Grok 正則表達式:grokdebug.rb 腳本詳解

     編輯:PHP 相關知識

grokdebug.herokuapp.com 依賴 Google CDN 的 JS,國內常無法訪問。本文提供一支純 Ruby 終端機腳本 grokdebug.rb,支援自訂 Pattern 目錄、命名捕獲、型別轉換(:float、:int),比線上版更強大。

前置需求

gem install jls-grok awesome_print
# jls-grok 0.11.0+ 支援型別轉換

完整腳本 grokdebug.rb

#!/usr/bin/env ruby
require 'rubygems'
gem 'jls-grok', '=0.11.0'
require 'grok-pure'
require 'optparse'
require 'ap'

options = { dirs: ['patterns'], named: false }
OptionParser.new do |opts|
  opts.banner = 'Run grokdebug at your terminal.'
  opts.on('-d DIR1,DIR2', '--dirs DIR1,DIR2', Array, 'Pattern 目錄 (預設 ./patterns)') { |v| options[:dirs] = v }
  opts.on('-m MSG', '--msg MSG', '要匹配的原始訊息') { |v| options[:message] = v }
  opts.on('-p PAT', '--pattern PAT', 'Grok pattern') { |v| options[:pattern] = v }
  opts.on('-n', '--named', '僅顯示命名捕獲') { options[:named] = true }
end.parse!

grok = Grok.new
options[:dirs].each do |dir|
  dir = File.join(dir, '*') if File.directory?(dir)
  Dir.glob(dir).each { |f| grok.add_patterns_from_file(f) }
end

grok.compile(options[:pattern], options[:named])
ap grok.match(options[:message]).captures

使用範例

$ ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test}'
{
    "test" => ["123"],
    "BASE10NUM" => ["123"]
}

$ ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test:float}' -n
{
    "test" => [123.0]   # 自動轉 Float!
}

核心優勢

  • 完全離線:無需翻牆、無 CDN 依賴。
  • 支援型別轉換:%{NUMBER:field:int}、:float、:bool 直接產出 Ruby 原生型別。
  • 自訂 Pattern 目錄:-d /etc/logstash/patterns,./my-patterns 靈活組合。
  • 輸出美觀:awesome_print 自動上色、縮排。

整合到 Logstash 開發流程

# 1. 開發新 pattern 存入 ./patterns/my.grok
# 2. 測試
ruby grokdebug.rb -d ./patterns -m "$(cat sample.log)" -p '%{MY_CUSTOM}'

# 3. 確認無誤後複製到 Logstash 設定
filter { grok { patterns_dir => ["/etc/logstash/patterns"] match => { "message" => "%{MY_CUSTOM}" } } }

常見問題

現象原因與解法
LoadError: cannot load such file -- grok-puregem install jls-grok 未裝或版本不符,指定 gem 'jls-grok', '=0.11.0'
Pattern not found: XXXPattern 檔未放在 -d 指定目錄,或檔名不符 *.grok/*
編碼亂碼終端機編碼非 UTF-8,執行前 export LC_ALL=en_US.UTF-8

將 grokdebug.rb 放入 ~/bin/ 並 chmod +x,即可隨時隨地 grokdebug.rb -m ... -p ... 高效調試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved