编辑:糖果

【前记】

这个环境的搭建,主要为了用于分离lua_logger推送到syslog中的数据,解析后放到ES里,再对外提供RESTY接口。基本的工具就是这么使用,至于是具全的业务如何设计实现,根据实际情况来。比如,有的WAF系统不提供开发的API把block的数据暴露出来,可能就需要自己实现一套。

【正文】

1. 安装 RVM

2. 安装 Ruby 和 Gems

3. 安装 Rails

4. 安装 jls-grok

5. Ruby grok 解析

6. 调试 grok

注意:不要用 root 执行以下操作。
用 logstash 收集 IIS、tomcat 日志,或是其他时,你需要调试 grok 表达式,每次都需要重新加载文件,然后再把 sincedb 文件全部删除,否则 logstash 不会重复处理文件,很麻烦。

本文主要介绍如何安装 GrokDebuger 环境,再在命令行调试 Grok 表达式。Logstash 是用 Ruby 编写的,而 Ruby 有专门的处理 grok 表达式的 gem。

下面过程有先后顺序。

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

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

参见A:

参见B:

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

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

RVM 安装位置自己 FIND 一下。

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

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

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

在 RVM 下安装 Ruby。

安装 Ruby 和 Gems

Code
rvm install ruby
ruby -v
gem –v

这步很简单如果能看到版本信息,就说明成功了

安装 Rails

Code
gem install rails

若不能访问,则添加淘宝镜像 https://ruby.taobao.org/。

安装 jls-grok

Code
gem install jls-grok

这步也很简单基本不会出问题

Ruby grok 解析
编写一个 Ruby 脚本,用来调试 Grok 表达式。

ruby
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

ruby
[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" 
  ] 
} 

若提示找不到“pattern”,你可以将 logstash 目录底下的复制过来拿来用

【后记】
经群里的好朋友提醒,这个目录的位置,如下:

Code
logstash-2.3.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5

原文转载