遷移到:http://www.bdata-cap.com/newsinfo/1712686.html
用 logstash 收集 IIS、tomcat 日誌,或是其餘時,你須要調試 grok 表達式,每次都須要從新加載文件,而後再把 sincedb 文件所有刪除,不然 logstash 不會重複處理文件,很麻煩。html
本文主要介紹如何安裝 GrokDebuger 環境,再在命令行調試 Grok 表達式。Logstash 是用 Ruby 編寫的,而 Ruby 有專門的處理 grok 表達式的 gem。git
下面過程有前後順序。github
rvm(Ruby Version Manager),是一個很是好用的ruby版本管理以及安裝工具。json
curl -sSL https://get.rvm.io | sudo bash -s stable
參見:http://rvm.io/tomcat
參見:https://github.com/rvm/rvmruby
這步可能要多試幾回,不是你的問題,是它們的網絡問題。bash
若不能 sudo ,就本身設置下你用戶的權限。網絡
RVM 安裝位置本身 FIND 一下。app
安裝 rvm 後,須要用 rvm 把你當前用戶添加到 rvm 組。rvm 會本身建立 rvm 組。curl
rvm group add rvm "$USER"
rvm fix-permissions「$USER」
表示你當前用戶,而後從新登陸。
在 RVM 下安裝 Ruby。
rvm install ruby
ruby -v
gem –v
這步很簡單~若是能看到版本信息,就說明成功了~
gem install rails
若不能訪問,則添加淘寶鏡像 https://ruby.taobao.org/。
gem install jls-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())
[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 目錄底下的複製過來拿來用~