我在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 和多行吗?