繁体   English   中英

无法将多行事件从 Filebeat S3 输入推送到 Logstash

[英]Unable to push multiline events from Filebeat S3 input to Logstash

我正在 ELK 上做 PoC,遇到了一个问题。 我查看了 discuss.elastic.co 和 StackOverflow 上的许多主题,但似乎没有任何帮助。

我正在尝试通过 Filebeat(使用 S3 输入)配置多行事件并在 Logstash 中使用它们。 我面临的问题是,即使在 Filebeat 中设置了多行配置之后,我仍然将堆栈跟踪的行视为 Logstash 中的单个事件。

由于 Logstash 不是将堆栈跟踪的行作为单个事件而是作为单独的行接收,因此它会在该端导致 _grokparsefailure,这是完全可以理解的,因为 FB 应该在将这些行发送到 Logstash 之前将它们合并到同一事件中。

其他单行事件按预期进行,我能够在 Kibana 上将它们可视化。

文件拍子.yml:

filebeat.inputs:

  - type: s3
    queue_url: https://sqs.aaaaa.amazonaws.com/xxxxxxxx/zzzzzz
    visibility_timeout: 300s
    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    multiline.negate: true
    multiline.match: after

日志存储配置:

input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}

filter {
  grok {
    match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA:logType} %{LOGLEVEL:logLevel}%{SPACE}\[%{GREEDYDATA:key1}\] \[%{GREEDYDATA:key2}\] \[%{GREEDYDATA:key3}\] \[%{GREEDYDATA:sourceIP}\] %{GREEDYDATA:message}"}
    overwrite => [ "message" ]
  } 

 date {
    match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
  }
}

以下是两个示例日志语句,我试图将其中的第二个语句合并到一个事件中:

2020-08-18 00:30:52,481 detailed_logs ERROR    [abc] [xyz] [def] [127.0.0.1] Exception raised. Trace:
2020-08-18 00:30:52,483 detailed_logs ERROR    Traceback (most recent call last):
  File "/Users/vvv/Documents/ttt.py", line 93, in get
    x = y.perform(abc)
  File "/Users/vvv/Documents/ttt.py", line 283, in operate
    raise exception
  File "/Users/vvv/Documents/ttt.py", line 169, in operate
    d["abb"] = n["xy"]
AttributeError: 'model' object has no attribute 'create1d_on'

我的直觉告诉我,Filebeat S3 输入可能不支持多行,因为我无法在官方文档中找到相同的提及,而它的Log 输入对应项清楚地提到了相同的内容。 但话又说回来,我可能是错的。

将不胜感激任何朝着正确方向的推动。

我正在回答我自己的问题,并在开头说这绝不是对我提出的问题的有效答案,而是一种解决方法,它解决了我的直接需求,现在已经部署。

由于用于 S3 输入的 Filebeat 多行未按预期工作并且 Logstash 多行编解码器不是 Elastic 强烈推荐的东西( 此处标记为重要的段落),我最终通过使用以下命令创建一个实用程序来展平整个应用程序的堆栈跟踪目的的大致结构:

dictionary = {}
counter = 0

for line in lines:
    if line and line.strip():
        dictionary[counter] = line.strip()
        counter += 1

return json.dumps(dictionary)

无论何时使用traceback.format_exc()将异常转储到日志中,该跟踪都会作为参数传递给上述实用程序,然后记录为 ERROR。

诚然,在整个应用程序范围内进行更改需要一些手动操作,但现在,根据要求,在 Kibana 中查看时,以下构造将作为单一事件出现:

{"0": "Traceback (most recent call last):", "1": "File "/Users/vvv/Documents/ttt.py", line 93, in get", "2": "x = y.perform(abc)", "3": "File "/Users/vvv/Documents/ttt.py", line 283, in operate", "4": "raise exception", "5": "File "/Users/vvv/Documents/ttt.py", line 169, in operate", "6": "d["abb"] = n["xy"]", "7": "AttributeError: 'model' object has no attribute 'create1d_on'"}

欢迎任何反馈、建议和建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM