我正在对 Apache 日志进行一些分析。我们的日志恰好捕获了浏览器传达的 cookie,并将其与请求一起记录下来。现在我可以很好地导入那个长字符串,但是我想知道是否有办法每行都有一个可变长度的数组,让我可以搜索或对单个 cookie 执行推论。
因此,根据这条消息行
"message" => "x.x.x.x - - [30/Oct/2014:20:05:01 -0400] \"GET /js/plugins/backbone/backbone.modelbinding.min.js HTTP/1.1\" 304 - \"https://www.website.com/view/home\" \"Mozilla/4.0 ( compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\" \"AUSERID=5286; SERVICEID=08130xx; JSESSIONID=xxxx; AgencyUserSession=xxxx; _ga=GA1.2.xxx; __utma=xxx ;" + 304/304 1146/213/0 29420/47188900045680 0/5011 -/-/- \"x.x.x.x|-|-|x.x.x.x\"",
我可以解析出 cookie 并将其完整地放入其自己的字段中。但是,有没有办法让我分解键/值对并将它们存储在与日志行条目关联的数组中?
[“auserid” = “5286”,“serviceid” = “08130xx”,... 等等。
谢谢。
答案1
您可以使用 logstash滤波器解析 cookie。
cookie
如果你有一个包含以下内容的字段"AUSERID=5286; SERVICEID=08130xx; JSESSIONID=xxxx; AgencyUserSession=xxxx; _ga=GA1.2.xxx; __utma=xxx;"
你可以在 logstash.conf 中写入类似以下内容:
kv {
source => "cookie"
prefix => "cookie_"
trim => ";"
}
这将为您提供字段:
cookie_AUSERID => 5286
cookie_SERVICEID => 08130xx
...
但我更喜欢明确指定想要转换为字段的 cookie(某些系统会创建大量对我来说没有意义的 cookie,它们只会污染日志):
kv {
source => "cookie"
prefix => "cookie_"
trim => ";"
include_keys => [ "AUSERID", "SERVICEID" ]
}