我正在使用Elasticsearch检索一些日志:
http:/ localhost:9200 / collection / _search?q = type:“ log”
它给我带来了一些像这样的命中:
{
"_index": "collection",
"_type": "doc",
"_id": "UL878GMBYKUUOvfyQJWl",
"_score": 6.487114,
"_source": {
"@version": "1",
"type": "log",
"message": "64.242.88.10;[07/Mar/2004:16:11:58 -0800];"GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1\"; 200 7352\r",
"@timestamp": "2018-06-11T19:03:23.163Z",
"host": "logstash",
"path": "/opt/access_log.log"
}
}
每个匹配都有一个“消息”,就像CSV中的一行“ access_log.log”一样。
但是,每个有用的信息都只是一个大字符串,而在“消息”中。因此,我需要提取某种方式来标识服务器IP(64.242.88.10)。
如何使用“;”分割此“消息”字符串 作为正则表达式,以便我只能获取所需的数据?
您可以为此使用grok过滤器插件。
Grok是将非结构化日志数据解析为结构化和可查询内容的好方法。
该工具非常适合syslog日志,apache和其他Web服务器日志,mysql日志,以及通常用于人类而非计算机使用的任何日志格式。
Logstash默认附带大约120种模式。您可以在这里找到它们:https : //github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns。您可以轻松地添加自己的。(请参阅patterns_dir设置)
如果您需要帮助构建与日志匹配的模式,您会发现http://grokdebug.herokuapp.com和http://grokconstructor.appspot.com/应用程序非常有用!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句