2013-12-16 74 views
2

我正在安装Logstash,ElasticSearch & Kibana,并试图实现可以呈现为树的日志层次结构。Logstash标签层次结构

例如以一个层次,如:web->site1->accessweb->site1->errormail->list1->bounces

然后有一个web界面,可以列出这是一个树:

web 
    | - site1 
     | - access 
     | - error 
mail 
    | -- list1 
     | -- bounces 

,以便用户可以快速找到site1的访问日志。

我可以编写Web部件(或向Kibana添加自定义面板),但不知道如何配置Logstash/Elasticsearch来存储此部分。

只是ElasticSearch,我尝试添加字段,如:(?符号化)

POST /test/logs 
{ 
    "types": ["web", "site1", "access"], 
    "message":"access log line 1" 
} 
POST /test/logs 
{ 
    "types": ["mail", "list1", "bounces"], 
    "message":"access log line 1" 
} 
... 

types数组被分手了,所以当我做了面查询我找回所有单个阵列的列表值合并。这可能是你想要的,如果这些是标签,但不是在我的情况。

在Logstash/ElasticSearch中是否存储可能的标签层次结构,如果是这样的话?

回答

0

这是一种奇怪的做事方式。

您可以添加新的领域,如:

hostname: mail 
site: site1 
maillist: list1 
log: access 

然后在你的查询更具体:

hostname:web AND site:site1 AND log:access 

提供一些准备仪表板,用户可以调整值来获得他们所需要的东西。

否则,你需要使用nested field语法和可能conditionals

EG(未经测试)

filter{ 
    mutate{ 
    add_field => [ ["%{servertype}"]["%{hostname}"]["%{site}"]["%{log}"], "some value" ] 
    } 
} 

如果你在你的日志JSON格式从一开始发送,那么你可以创建嵌套字段通过添加更多嵌套的JSON对象。例如:

{ 
"message": "GET /interestingpage?param1=value1 HTTP/1.1 404", 
"tags": [ 
    "tag1", 
    "tag2", 
    "tag3", 
    "valve" 
], 
"@timestamp": "2013-10-24T20:23:46.222Z", 
"field3": "value3", 
"field2": "value2", 
"level": "ERROR", 
"http": { 
    "request_protocol": "HTTP/1.1", 
    "response_headers": {}, 
    "request_querystring": "param1=value1", 
    "remote_user": null, 
    "request_headers": { 
     "Referer": null, 
     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36" 
    }, 
    "response_size": 985, 
    "response_status": 404, 
    "request_parameters": { 
     "param1": [ 
      "value1" 
     ] 
    }, 
    "request_uri": "/interestingpage", 
    "remote_host": "192.168.1.208", 
    "server_name": "192.168.1.67", 
    "request_method": "GET", 
    "response_duration": 27, 
    "cookies": {} 
}, 
"hostname": "precise64", 
"field1": "value1", 
"@version": "1", 
"user": "tomcat7" 
} 

kibana的嵌套字段是。 (点)在字段列表中分开。但是,您可以使用字段过滤器缩小范围以查找所需内容。