因此,我有一个Web平台,每个请求都会打印一个JSON文件,其中包含有关该请求的一些日志数据。我可以配置几个关于何时记录内容的规则,仅限于某些级别等...
现在,我一直在玩Logstash + Elasticsearch + Kibana3堆栈,我很想找到一种在Kibana中查看这些日志的方法。我的问题是,有没有办法让Logstash导入这些类型的文件,还是我必须为它编写自定义输入插件?我一直在寻找和看到我所看到的,插件是用Ruby编写的,这是一种我没有经验的语言。
答案 0 :(得分:17)
Logstash是处理动态文件的非常好的工具。
以下是使用logstash将json文件导入elasticsearch的方法:
配置文件:
input
{
file
{
path => ["/path/to/json/file"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output
{
elasticsearch {
protocol => "http"
codec => json
host => "localhost"
index => "json"
embedded => true
}
stdout { codec => rubydebug }
}
json文件的例子:
{"foo":"bar", "bar": "foo"}
{"hello":"world", "goodnight": "moon"}
注意json需要在一行中。如果要解析多行json文件,请替换配置文件中的相关字段:
input
{
file
{
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
path => ["/opt/mount/ELK/json/*.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
答案 1 :(得分:12)
Logstash只是一种工具,用于将各种syslog文件转换为JSON并将它们加载到elasticsearch(或graphite,或......)中。
由于您的文件已经使用JSON,因此您不需要使用logstash。您可以使用curl将它们直接上传到elasticsearch。
请参阅Import/Index a JSON file into Elasticsearch
但是,为了与Kibana一起使用,您的JSON文件需要最少。
Flat - Kibana不会嵌套嵌套的JSON结构。您需要一个简单的键/值对散列。
有可识别的时间戳。
我建议查看JSON文件的logstash输出,看看是否可以按摩JSON文件以匹配该结构。你可以用任何语言做到这一点
像那样支持JSON。程序jq
非常便于将json从一种格式过滤到另一种格式。
Logstash格式 - https://gist.github.com/jordansissel/2996677
答案 2 :(得分:1)
Logstash可以导入不同的格式和来源,因为它提供了大量的插件。还有其他日志收集器和转发器工具可以将日志发送到logstash,例如nxlog,rsyslog,syslog-ng,flume,kafka,流利等。从我听到的大多数人使用nxlog windows(虽然它在linux上运行得很好)与ELK堆栈结合使用,因为它的资源占用空间很小。 (免责声明:我是该项目的附属机构)