1

我在logstash中遇到了一些奇怪的行为,在输入/文件和输出/s3上使用编解码器的组合。output/s3 logstash 插件似乎存在问题,因为除非我在 output/s3 插件中指定编解码器,否则我无法将任何部分文件上传到 S3。

我正在跟踪 java 应用程序日志文件,因此理想情况下我使用输入/文件插件来监视目录中的所有日志文件,并确保遇到的任何堆栈跟踪(及其新行)都包含在同一个 logstash 事件中。我这样做是这样的:

input {
  file {
    path => "C:/some/directory/logs/*"      
    codec => multiline {
        pattern => "^%{DATESTAMP}"
        negate => true
        what => "previous"
    }
  }
}

这将正确地将我的堆栈跟踪附加到它们的父事件。然后我想执行两个不同的输出/s3 操作(基本上是逐行重新创建原始日志,并上传事件 json):

output {    
 s3{
     access_key_id => "mykey"
     secret_access_key => "myseckey"
     region => "us-east-1"
     bucket => "somebucket"
     size_file => 10000
     upload_workers_count => 2
     restore => true
     prefix => "rawlogs/"
     temporary_directory => "C:/Temp/LogStash/raw"
     time_file => 5  
 }
 s3{
     access_key_id => "mykey"
     secret_access_key => "myseckey"
     region => "us-east-1"
     bucket => "somebucket"
     size_file => 10000
     upload_workers_count => 2
     restore => true
     prefix => "jsoneventlogs/"
     temporary_directory => "C:/Temp/LogStash/json"
     time_file => 5
     codec => "json_lines"
 }
}

使用“json_lines”编解码器的 S3 上传工作正常,但使用默认“plain”编解码器的原始日志上传根本不起作用。这些文件位于我的临时目录中,永远不会被推送到 S3。我曾尝试使用“线路”编解码器,但仍然是相同的行为。如果我从输入/文件插件中删除“多行”编解码器并在我的输出/S3 原始插件中使用它,那么它们将上传到 S3 就好了,但是堆栈跟踪中的每个换行符都作为自己的事件进来,因此编解码器似乎没有完成它的工作。

知道为什么输出/S3 插件似乎只适用于 json_lines 和多行吗?

4

0 回答 0