ELK——為調試 Logstash Grok 表達式,安裝 GrokDebuger 環境


 

內容

  • 安裝 RVM
  • 安裝 Ruby 和 Gems
  • 安裝 Rails
  • 安裝 jls-grok
  • Ruby grok 解析
  • 調試 grok

注意:不要用 root 執行以下操作。

用 logstash 收集 IIS、tomcat 日志,或是其他時,你需要調試 grok 表達式,每次都需要重新加載文件,然后再把 sincedb 文件全部刪除,否則 logstash 不會重復處理文件,很麻煩。

本文主要介紹如何安裝 GrokDebuger 環境,再在命令行調試 Grok 表達式。Logstash 是用 Ruby 編寫的,而 Ruby 有專門的處理 grok 表達式的 gem。

下面過程有先后順序。

安裝 RVM

rvm(Ruby Version Manager),是一個非常好用的ruby版本管理以及安裝工具。

curl -sSL https://get.rvm.io | sudo bash -s stable

參見:http://rvm.io/

參見:https://github.com/rvm/rvm

這步可能要多試幾次,不是你的問題,是它們的網絡問題。

若不能 sudo ,就自己設置下你用戶的權限。

RVM 安裝位置自己 FIND 一下。

安裝 rvm 后,需要用 rvm 把你當前用戶添加到 rvm 組。rvm 會自己創建 rvm 組。

rvm group add rvm "$USER"
 
rvm fix-permissions“$USER”

表示你當前用戶,然后重新登錄。

在 RVM 下安裝 Ruby。


安裝 Ruby 和 Gems

rvm install ruby
 
ruby -v
 
gem –v

這步很簡單~如果能看到版本信息,就說明成功了~


安裝 Rails

gem install rails

若不能訪問,則添加淘寶鏡像 https://ruby.taobao.org/


安裝 jls-grok

gem install jls-grok

這步也很簡單~基本不會出問題~


Ruby grok 解析

編寫一個 Ruby 腳本,用來調試 Grok 表達式。

require 'rubygems'
 
gem 'jls-grok', '=0.11.2'
 
require 'grok-pure'
 
require 'optparse'
 
require 'json'
 
options = {}
 
ARGV.push('-h') if ARGV.size === 0
 
OptionParser.new do |opts|
 
  opts.banner = 'Run grokdebug at your terminal.'
 
  options[:dirs] = %w(patterns)
 
  options[:named] = false
 
  opts.on('-d DIR1,DIR2', '--dirs DIR1,DIR2', Array, 'Set grok patterns directories. Default: "./patterns"') do |value|
 
    options[:dirs] = value
 
  end
 
  opts.on('-m MESSAGE', '--msg MESSAGE', 'Your raw message to be matched') do |value|
 
    options[:message] = value
 
  end
 
  opts.on('-p PATTERN', '--pattern PATTERN', 'Your grok pattern to be compiled') do |value|
 
    options[:pattern] = value
 
  end
 
  opts.on('-n', '--named', 'Named captures only') do
 
  end
 
end.parse!
 
grok = Grok.new
 
options[:dirs].each do |dir|
 
  if File.directory?(dir)
 
    dir = File.join(dir, "*")
 
  end
 
  Dir.glob(dir).each do |file|
 
    grok.add_patterns_from_file(file)
 
  end
 
end
 
grok.compile(options[:pattern], options[:named])
 
puts JSON.pretty_generate(grok.match(options[:message]).captures())
 

調試 grok

[ln@vcyber myruby]$ ruby grokdebug.rb -m '10.1.1.1' -p '%{IP:client}' 
{ 
  "client": [ 
    "10.1.1.1" 
  ], 
  "IPV6": [ 
    null 
  ], 
  "IPV4": [ 
    "10.1.1.1" 
  ] 
}
 
[ln@vcyber myruby]$ ruby  grokdebug.rb -m '10.1.8.166:8000' -p '%{HOSTPORT:test}' 
{ 
  "test": [ 
    "10.1.8.166:8000" 
  ], 
  "IPORHOST": [ 
    "10.1.8.166" 
  ], 
  "IP": [ 
    "10.1.8.166" 
  ], 
  "IPV6": [ 
    null 
  ], 
  "IPV4": [ 
    "10.1.8.166" 
  ], 
  "HOSTNAME": [ 
    null 
  ], 
  "POSINT": [ 
    "8000" 
  ] 
} 
[ln@vcyber myruby]$

若提示找不到“pattern”,你可以將 logstash 目錄底下的復制過來拿來用~


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com