通过ELK堆栈分析日志

问题描述 投票:0回答:1

我正在使用ELK Stack分析我的Spring Boot应用程序生成的日志。下面是我生成的日志的示例结构。

日志:

13-04-2020 10:53:40.074信息16688-[DefaultMessageListenerContainer-1] c.i.e.util.SavingEquityData:保存记录-EquityFeeds在数据库以及REDIS缓存中。

我想通过ELK堆栈监视我的日志。

Logstash.conf

input {
  file {
    type => "syslog"
    path => ["C:/temp/equityFeedsProcessing.log"]
    start_position => "beginning" 
  }
}

filter {
    grok {
      match => { "message" => "%{LOGLEVEL:log-level} %{DATA:class}:%{GREEDYDATA:message}" }      
    } 
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

我确实了解输入和输出插件。我不明白的是过滤器插件。尽管我编写了一个Grok过滤器,但在下面将其传递给Grok调试器:https://grokdebug.herokuapp.com/

模式:

%{LOGLEVEL:log-level} %{DATA:class}:%{GREEDYDATA:message}

输出:

{
  "log": [
    [
      "INFO"
    ]
  ],
  "class": [
    [
      " 2568 --- [DefaultMessageListenerContainer-1] c.i.e.util.JAXBDateDeSerializer "
    ]
  ],
  "message": [
    [
      " Inside Unmarshall method of JAXB Date Deserializer."
    ]
  ]
}
  1. 我无法映射过滤器插件中的所有字段例如时间戳字段。我该怎么做?
  2. 我如何创建索引。我知道我可以看到在创建的索引http://localhost:9200/_cat/indices/?v
  3. 我也了解,要创建索引,我们必须转到Kibana->管理->索引模式->创建索引模式。我无法创建我的索引模式在这里。是因为我没有给他们logstash.conf文件。如果是,我该怎么做?
  4. 此外,在创建了索引模式后,我知道我们必须去发现和然后选择索引样式。我在这里看不到我的日志。

如上所述,我的基本目标是分析和监视日志(期间)。我无法创建适当的过滤器并创建索引。我在网上搜索,但找不到从初学者那里详细显示此内容的地方。一切似乎太复杂了。

logstash elastic-stack logstash-grok logstash-configuration
1个回答
0
投票

地图字段

以示例日志的以下模式开始(它包含自定义模式-MSG:]

%{DATESTAMP:log_timestamp}\s*%{LOGLEVEL:log_level}\s*%{POSINT:logged_for_pid}\s*--- \[+%{NOTSPACE:logged_for_thread}+\]\s*%{JAVACLASS:logger}\s*%{MSG:log_message}

您可以在Grok Debugger中对其进行验证:enter image description here

filter文件中具有这种模式的logstash.conf看起来像这样:

# logstash.conf
…
filter {
    grok {
        patterns_dir => ["./patterns"]
        match => {
            "message" => "%{DATESTAMP:log_timestamp}\s*%{LOGLEVEL:log_level}\s*%{POSINT:logged_for_pid}\s*--- \[+%{NOTSPACE:logged_for_thread}+\]\s*%{JAVACLASS:logger}\s*%{MSG:log_message}"
        }
    }
}
…

自定义样式

[您可以看到,我告诉grok在custom patterns目录中查找我的patterns,该目录与logstash.conf文件放在相同的位置。在此目录中,我创建了具有以下内容的custom.txt文件:

# patterns/custom.txt
MSG \s:.*

使用自定义模式删除Grok Debugger输出中的冗余字段

如果您不喜欢在Grok Debugger界面中打印时间戳的方式,请在DATESTAMP中签出grok-patterns。为了创建以下模式,我用相应的正则表达式替换了DATESTAMP的每个元素(直接在Grok Debugger中一个接一个地替换,太复杂了,无法一次替换所有内容):

CUSTOM_DATE (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])[./-](?:0?[1-9]|1[0-2])[./-](?>\d\d){1,2}[- ](?!<[0-9])(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9])(?::(?:(?:[0-5][0-9]|60)(?:[:.,][0-9]+)?))(?![0-9])

结果:enter image description here

如果需要(Logstash输出将保持不变),可以在custom.txt文件的新行中添加此新模式,并更新match

# logstash.conf
…
match => {
            "message" => "%{CUSTOM_DATE:log_timestamp}\s*%{LOGLEVEL:log_level}\s*%{POSINT:logged_for_pid}\s*--- \[+%{NOTSPACE:logged_for_thread}+\]\s*%{JAVACLASS:logger}\s*%{MSG:log_message}"
        }
…

在Logstash配置中定义索引

我在output defined for elasticsearch中定义了一个示例索引:

# logstash.conf
…
output {
    elasticsearch {
        …
        index => "example-index-%{+YYYY.MM.dd}"
    }
}

在Kibana中创建索引时,您应该能够选择example-index*之类的东西。

有用的资源

© www.soinside.com 2019 - 2024. All rights reserved.