elasticsearch 日志存储标记层次结构
我正在安装Logstash、ElasticSearch和Kibana,并试图实现一个可以呈现为树的日志层次结构 e、 g.采用如下层次结构:elasticsearch 日志存储标记层次结构,elasticsearch,logstash,elasticsearch,Logstash,我正在安装Logstash、ElasticSearch和Kibana,并试图实现一个可以呈现为树的日志层次结构 e、 g.采用如下层次结构:web->site1->access,web->site1->error,mail->list1->bounces等 然后有一个web界面,可以将其列为树: web | - site1 | - access | - error mail | -- list1 | -- bounces 因此,用户可
web->site1->access
,web->site1->error
,mail->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"
}
...
但是类型
数组被拆分(标记化了?),因此,当我执行facets查询时,我会返回所有单个数组值组合的列表。这可能是你想要的,如果这些是标签,但不是在我的情况下
在Logstash/ElasticSearch中是否可以存储标签的层次结构,如果可以,如何存储?这是一种奇怪的做法 您可以添加新字段,例如:
hostname: mail
site: site1
maillist: list1
log: access
然后在您的查询中更加具体:
hostname:web AND site:site1 AND log:access
提供一些准备好的仪表盘,用户可以调整这些仪表盘的值以获得所需的值
否则,您需要使用语法和
Eg(未经测试)
如果从一开始就以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中的嵌套字段为。(点)在字段列表中分隔。但您可以使用字段过滤器缩小范围以找到所需内容
{
"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"
}