不合作的 ELK Docker 个实例
Uncooperative ELK Docker Instance
我在 Docker 容器中安装了 ELK 5.5.1 运行,它会解析我的大部分日志,但来自我的 Spring 应用程序的日志除外。有点 运行 没主意了。
我已将其追溯到 logstash->elasticsearch 管道。 Filebeat 正在执行它的工作,而 Logstash 是 从有问题的应用程序接收日志,基于拖尾 lostash 的标准输出日志。
我擦干净了存储我的 ELK 数据的 docker 卷,并重新开始使用 filebeat 只是转发有问题的日志。
像这样记录一行:
FINEST|8384/0|Service tsoft_spring|17-08-31 14:12:01|2017-08-31 14:12:01.260 INFO 8384 --- [ taskExecutor-2] c.t.s.c.s.a.ConfirmationService : Will not persist empty response notes
使用一个非常小的 logstash 配置,它最终会被持久化在 elasticsearch 中:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{GREEDYDATA:logmessage}" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
使用更完整的配置,日志只是被elastic忽略,没有grokparsefailure,没有dateparsefailure:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{WORD}\|%{NUMBER}/%{NUMBER}\|%{WORD}%{SPACE}%{WORD}\|%{TIMESTAMP_ISO8601:timestamp}\|%{TIMESTAMP_ISO8601}%{SPACE}%{LOGLEVEL:loglevel}%{SPACE}%{NUMBER:pid}%{SPACE}---%{SPACE}%{SYSLOG5424SD:threadname}%{SPACE}%{JAVACLASS:classname}%{SPACE}:%{SPACE}%{GREEDYDATA:logmessage}" ]
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
我已经检查过该模式将使用 http://grokconstructor.appspot.com/do/match#result 解析该行,我可以发誓它在上周末工作,但这可能是我的想象。
也许这里的问题不在您的 grok 过滤器中,而在日期匹配中。结果年份是 0017,而不是 2017。也许这就是你在 ES 中找不到事件的原因?你能试试这个吗:
date {
match => [ "timestamp" , "yy-MM-dd HH:mm:ss" ]
}
我在 Docker 容器中安装了 ELK 5.5.1 运行,它会解析我的大部分日志,但来自我的 Spring 应用程序的日志除外。有点 运行 没主意了。
我已将其追溯到 logstash->elasticsearch 管道。 Filebeat 正在执行它的工作,而 Logstash 是 从有问题的应用程序接收日志,基于拖尾 lostash 的标准输出日志。
我擦干净了存储我的 ELK 数据的 docker 卷,并重新开始使用 filebeat 只是转发有问题的日志。
像这样记录一行:
FINEST|8384/0|Service tsoft_spring|17-08-31 14:12:01|2017-08-31 14:12:01.260 INFO 8384 --- [ taskExecutor-2] c.t.s.c.s.a.ConfirmationService : Will not persist empty response notes
使用一个非常小的 logstash 配置,它最终会被持久化在 elasticsearch 中:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{GREEDYDATA:logmessage}" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
使用更完整的配置,日志只是被elastic忽略,没有grokparsefailure,没有dateparsefailure:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{WORD}\|%{NUMBER}/%{NUMBER}\|%{WORD}%{SPACE}%{WORD}\|%{TIMESTAMP_ISO8601:timestamp}\|%{TIMESTAMP_ISO8601}%{SPACE}%{LOGLEVEL:loglevel}%{SPACE}%{NUMBER:pid}%{SPACE}---%{SPACE}%{SYSLOG5424SD:threadname}%{SPACE}%{JAVACLASS:classname}%{SPACE}:%{SPACE}%{GREEDYDATA:logmessage}" ]
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
我已经检查过该模式将使用 http://grokconstructor.appspot.com/do/match#result 解析该行,我可以发誓它在上周末工作,但这可能是我的想象。
也许这里的问题不在您的 grok 过滤器中,而在日期匹配中。结果年份是 0017,而不是 2017。也许这就是你在 ES 中找不到事件的原因?你能试试这个吗:
date {
match => [ "timestamp" , "yy-MM-dd HH:mm:ss" ]
}