本文关注的是如何使用grok结构化logstash收取到的message。
grok解析的本质是正则匹配。
举个例子:
message 如下(rails 打出的log):
I, [2016-12-07T16:52:05.682441 #14610] INFO -- : monitor project create.timecost 17 branch_test 0 user_name 5
以下三种grok解析的正则格式:
-
纯正则匹配
"monitor project (?<metric>(create|delete).timecost) (?<cost>\d+) (?<branch>\w+) (?<status>\d+) (?<user>\w+) (?<try_times>\d+)"
-
借助grok 官方pattern, 部分匹配
".* monitor project %{GREEDYDATA:metric} %{GREEDYDATA:cost} %{GREEDYDATA:branch} %{GREEDYDATA:status} %{GREEDYDATA:user} %{GREEDYDATA:try_times}
-
借助grok 官方pattern,全部匹配
"I, [%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid}] *%{RUBY_LOGLEVEL:loglevel} -- +%{DATA:progname}: monitor project %{GREEDYDATA:metric} %{GREEDYDATA:cost} %{GREEDYDATA:branch} %{GREEDYDATA:status} %{GREEDYDATA:user} %{GREEDYDATA:try_times} %{GREEDYDATA:start_time} %{GREEDYDATA:end_time}"