问题:我有一个日志文件要解析84列,其中60列是可选的。我得到了模式工作但是如果grok找到一个缺少字段的单个日志行,则会抛出错误。在我的情况下,99%的日志都缺少一些字段。有一种方法我可以配置grok忽略一个字段没有值(或插入虚拟值或空白)并移动到下一列。
有84列,其中60列是可选的。我试图使用grok来解析文件,并且只有在指定了所有84列时才能执行此操作。
ads 1.0 4572165a-c5b5-420b-851d-dc69d6d73673 20297cab-4b4c-4b55-b1a8-9ddc436a3f08 2014-02-24 23:55:14 953 1979 93215 106241 97170 58881 29926 10939 6852 34 36 3 URL.com/movie_player .php?pid = 155& utm_source = ADK& utm_medium = CPC& utm_campaign = test4_pid155& utm_term = 78434-2000241 8 3 1012 98.226.166.151 6042 5303 US IN 527 11 0 7075 7029 -6 11001 12008 1 11300 0 0 0 1 url .com / movie_player.php?pid = 155& utm_source = adk& utm_medium = cpc& utm_campaign = test4_pid155& utm_term = 78434-2000241 www.url.com url.com 11203 65792 0 live.test.com/swf/v4/manager .swf 345550 7.7 USD 0 0 0 0 0 0 25 0 0 60 0 0 0 0 0 0 1393286114 2 0
答案 0 :(得分:0)
所以这就是我正在做的事情,以解决这个问题。 :
鉴于: grok-logstash与TSV数据不兼容:https://logstash.jira.com/browse/LOGSTASH-1550 Grok很好用CSV
解决方法:写了一个python脚本,在过滤器中将tsv转换为csv,然后通过csv过滤器运行它
示例输出:
这就是rubydebug输出的样子:
"supply_sample" => "0",
"diagnostic_code" => "60",
"logging_diagnostic_code" => nil,
"billable_cluster_pi_values" => nil,
"effective_cluster_pi_values" => nil,
***编辑python脚本不需要这就是我现在正在做的事情
find -name“20140224-2310-10_126_94_215-21460.1.gz”| xargs zcat | sed's / \ t /,/ g'| nc localhost 3333