我在使用logstash时遇到了一些奇怪的行为,在输入/文件和输出/ s3上使用了编解码器的组合。输出/ s3 logstash插件似乎有问题,因为我无法将任何部件文件上传到S3,除非我在output / 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上传编解码器工作正常,但原始日志上传使用默认"普通"编解码器根本不起作用。这些文件位于我的临时目录中,永远不会被推送到S3。我试过使用" line"编解码器,但仍然是相同的行为。如果我删除"多行"来自输入/文件插件的编解码器并在我的输出/ S3原始插件中使用它,然后他们将上传到S3就好了,但是堆栈跟踪中的每个换行都是作为自己的事件进入,因此编解码器似乎没有做到它工作
任何想法为什么输出/ S3插件似乎只适用于json_lines和multiline?