自定义日志格式的Grok Parse失败和logstash中的正则表达式

时间:2016-01-16 04:02:43

标签: regex logstash logstash-grok grok

我有一个自定义日志格式,我是新手,所以试图弄清楚它是如何工作的。它没有在logstash中解析。有人可以帮助识别问题。

Logformat如下

[user@fa01v /var/www/html/test/requirejs]$ cat scripts/bar.js 
define(['module', 'jquery'], function(module, j){
    console.log(j);
});

我需要在logstash中解析它,然后将其存储在elasticsearch

问题是现有的grok模式都没有处理它,我不知道正则表达式自定义配置

2 个答案:

答案 0 :(得分:0)

Alain的评论可能对您有用,如果该日志实际上以JSON形式出现,您可能需要查看JSON Filter以自动将JSON消息解析为弹性友好格式或使用{在您的输入中{3}}。

如果你想坚持使用grok,那么构建自定义grok模式的一个很好的资源是JSON Codec

答案 1 :(得分:0)

看起来你正在将python 2.x中的json哈希转储到日志文件中,然后尝试从logstash中解析它。

首先 - 修复您的json格式和编码: 您的文件不相关生成的json字符串。我的建议是在尝试使用Logstash中的数据之前将其修复到您的应用程序中,如果不是,您将不得不使用一些技巧来执行此操作:

 # Disable accii default charset and encode to UTF-8
js_string = json.dumps(u"someCharactersHere", ensure_ascii=False).encode('utf8')

 # validate that your new string is correct
 print js_string

其次 - 使用Logstash JSON过滤器

Grok是一个模块,用于使用正则表达式解析任何类型的文本。每个表达式都转换为变量,这些变量可以转换为事件字段。你可以做到这一点,但它会更加复杂并且可以修复错误。

您的输入已经有格式(json),因此您可以使用Logstash JSON Filter。通过将json结构转换为字段,它将为您完成所有繁重的任务:

filter {
  json {
    # this is your default input. you shouldn't need to touch it
    source => "message"

    # you can map the result into a variable. Simply uncomment the
    # following:
    # target => "doc"


    # note: if you don't use the target option. the filter will try to 
    # map the json string into fields into the 'root' of your event
  }
}

希望它有所帮助,