你的位置:首页 > 数据库

[数据库]为调试 Logstash Grok 表达式,安装 GrokDebuger 环境


 

内容

  • 安装 RVM
  • 安装 Ruby 和 Gems
  • 安装 Rails
  • 安装 jls-grok
  • Ruby grok 解析
  • 调试 grok

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

用 logstash 收集 IIS、tomcat日志,或是其他,不找个调试 grok 的工具,每次重新加载文件,然后还得把 sincedb 文件删了,否则 logstash 不会重复处理文件,很麻烦。

本文主要介绍如何安装 GrokDebuger 环境。安装有先后顺序。

安装 RVM

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


参见:http://rvm.io/

参见:https://github.com/rvm/rvm

这步可能要多试几次,不是你的问题,是它们的网络问题。

若不能 sudo ,就自己设置下你用户的权限。

RVM 安装位置自己 FIND 一下。

在 RVM 下安装 Ruby。需要安装 rvm 后,用 rvm 把你当前用户添加到 rvm 组。rvm 会自己创建 rvm 组。

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


表示你当前用户,然后重新登录。


安装 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 目录底下的复制过来拿来用~