编辑:糖果

【前记】

这个环境的搭建,主要为了用于分离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版本管理以及安装工具。

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

参见A:

参见B:

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

若不能 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" 
  ] 
} 

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

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

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

原文转载