【问题标题】:Analyzing Logs though ELK Stack通过 ELK Stack 分析日志
【发布时间】:2020-04-16 16:21:12
【问题描述】:

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

日志:

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

我想通过 ELK Stack 监控我的日志。

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 -> Management -> 索引模式 -> 创建索引模式。我无法创建我的 索引模式在这里。是不是因为我没有给他们 logstash.conf 文件。如果是,我该怎么做?
  4. 另外,在创建索引模式后,我知道我们必须去发现和 然后选择索引模式。我在这里看不到我的日志。

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

【问题讨论】:

  • 以上问题有答案吗?
  • 请提供任何答案或指示。

标签: logstash elastic-stack logstash-grok logstash-configuration


【解决方案1】:

地图字段

从示例日志的以下模式开始(它包含自定义模式 - 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 中验证它:

logstash.conf 文件中具有此模式的filter 如下所示:

# 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 在 patterns 目录中查找我的 custom patterns,我将其放在与 logstash.conf 文件相同的位置。在此目录中,我创建了 custom.txt 文件,其内容如下:

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

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

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

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])

结果:

如果需要(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* 之类的东西。

有用的资源

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多