不合作的ELK Docker实例

时间:2017-08-31 18:51:58

标签: elasticsearch elastic-stack

我在Docker容器中运行了ELK 5.5.1,并且它会解析我的大部分日志,除了源自我的Spring应用程序的日志。有点用完了想法。

我已将其追溯到logstash-> elasticsearch管道。 Filebeat正在执行其工作,Logstash 根据tailing lostash的stdout日志从相关应用程序接收日志。

我擦除了存储我的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"] }
  }

使用更完整的配置,日志被弹性忽略,没有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来解析那条线,我可以发誓它上周末正在工作,但这可能是我的想象力。

1 个答案:

答案 0 :(得分:1)

这里的问题可能不在你的grok过滤器中,而是在日期匹配中。结果是0017年,而不是2017年。也许这就是为什么你无法在ES找到这个活动的原因?你能试试这个:

def print_hex_to_atp(hex,output_file):
    try:
        data = int(hex,16)
        if data < 16:
            for i in range(3,-1,-1):
                output_file.write("> Data   {} end;\n".format((data>>i) & 1))
        else:
            # do something in case the value is greater than 15
            pass
    except ValueError:
        # do something in case hex is not a valid hexadecimal string
        pass