0

问题:我有一个要解析的日志文件,其中包含 84 列,其中 60 列是可选的。我让 Pattern 工作了,但是如果 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 美元 0 0 0 0 0 0 25 0 0 60 0 0 0 0 0 0 1393286114 2 0

4

1 回答 1

0

所以这就是我为了解决这个问题而正在做的事情。:

鉴于:grok-logstash 不适用于 TSV 数据:https ://logstash.jira.com/browse/LOGSTASH-1550 Grok 适用于 CSV

解决方法:编写了一个 python 脚本,在过滤器中将 tsv 转换为 csv,然后通过 csv 过滤器运行它

样本输出:

这是 ruby​​debug 输出的样子:

             "supply_sample" => "0",
            "diagnostic_code" => "60",
    "logging_diagnostic_code" => nil,
    "billable_cluster_pi_values" => nil,
    "effective_cluster_pi_values" => nil,

***不需要编辑python脚本这是我现在正在做的

查找-名称“20140224-2310-10_126_94_215-21460.1.gz”| xargs zcat | sed 's/\t/,/g' | 数控本地主机 3333

于 2014-04-04T15:45:37.047 回答