我有一个自定义日志格式,我是新手,所以试图弄清楚它是如何工作的。它没有在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模式都没有处理它,我不知道正则表达式自定义配置
答案 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
}
}
希望它有所帮助,