【问题标题】:Logstash tag hierarchyLogstash 标签层次结构
【发布时间】:2013-12-16 15:35:48
【问题描述】:

我正在安装 Logstash、ElasticSearch 和 Kibana,并尝试实现可以​​呈现为树的日志层次结构。

例如采用层次结构,例如:web->site1->accessweb->site1->errormail->list1->bounces

然后有一个可以将其列为树的网络界面:

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 中存储标签层次结构,如果可以,如何?

【问题讨论】:

    标签: elasticsearch logstash


    【解决方案1】:

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

    您可以添加新字段,例如:

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

    然后在您的查询中更具体:

    hostname:web AND site:site1 AND log:access
    

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

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

    例如(未经测试)

    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 中的嵌套字段是 . (点)在字段列表中分隔。但是您可以使用字段过滤器来缩小范围以找到您需要的内容。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2011-11-03
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      相关资源
      最近更新 更多