>有人有Ruby on Rails 4多行日志的Logstash模式吗?
我只有 Rails 3 的模式,它的日志结构大不相同:
RUUID h{32}
# rails controller with action
RCONTROLLER (?<controller>[^#]+)#(?<action>w+)
# this will often be the only line:
RAILS4HEAD (?m)Started %{WORD:verb} "%{URIPATHPARAM:request}" for % {IPORHOST:clientip} at (?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}$
# for some a strange reason, params are stripped of {} - not sure that's a good idea.
RPROCESSING W*Processing by %{RCONTROLLER} as (?<format>S+)(?:W*Parameters: {%{DATA:params}}W*)?
RAILS4FOOT Completed %{NUMBER:response}%{DATA} in %{NUMBER:totalms}ms %{GREEDYDATA}
RAILS4PROFILE (?:(Views: %{NUMBER:viewms}ms | ActiveRecord: %{NUMBER:activerecordms}ms|(ActiveRecord: %{NUMBER:activerecordms}ms)?
# putting it all together
RAILS4 %{RAILS4HEAD}(?:%{RPROCESSING})?(?<context>(?:%{DATA}n)*)(?:%{RAILS4FOOT})?
Rails 4 日志现在采用格式,其中包括时间戳,看起来像是 ID (#)。
I, [2016-01-26T23:21:44.581108 #27447] INFO -- : Started GET "/login" for XXX.XXX.XXX.XXX at 2016-01-26 23:21:44 -0800
我搜索了很多 rails4 grok 模式,没有希望。
我发现了一些我现在正在使用的替代方案,它们可能对遇到相同问题的人有所帮助。
方法#1
首先,将 lograge gem 添加到您的应用程序中。 此 Gem 会将 Rails 日志简化为您可以使用 grok 轻松解析的内容。
然后,您可以使用以下模式
LOGRAGE %{WORD:method}%{SPACE}%{DATA}%{SPACE}action=%{WORD:controller}#%{WORD:action}%{SPACE}status=%{INT:status}%{SPACE}duration=%{NUMBER:duration}%{SPACE}view=%{NUMBER:view}(%{SPACE}db=%{NUMBER:db})?%{GREEDYDATA}
本文中提到了此方法。
方法#2
作为另一种选择,您可以使用 json 筛选器,如以下文章所示,其日志配置略有不同。
filter {
json {
source => "short_message"
remove_field => "short_message"
}
}