关于logstash.是否按收款订单输出已填充日志



我正在使用logstash过滤器屏蔽部分日志。

这是我的日志示例。

[2022/02/22 12:19:56.092] [INFO ] Controller : co.test.api.controller.LoginApiController#loginUsersPost 
[2022/02/22 12:19:56.092] [INFO ] API : Object[][{F120001,class LoginRequestDto {
msn: 08022222222
userLoginDto: class UserLoginAuthQrDto {
class UserLoginDto {
type: 01
}
number: 20290520021255J
}
}}]

但是,logstash输出的json如下。

{"message":"[2022/02/22 12:19:56.092] [INFO ] API : Object[][{F120001,class LoginRequestDto {","@timestamp":
{"message":"    userLoginDto: class UserLoginAuthQrDto {","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"            type: 01","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"        number: 20290520021255J","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"[2022/02/22 12:19:56.092] [INFO ] Controller : co.test.api.controller.LoginApiController#logi
{"message":"    msn:XXXXX","@timestamp":"2022-02-22T03:19:56.930Z"}
{"message":"        class UserLoginDto {","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"        }","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"    }","@timestamp":"2022-02-22T03:19:56.931Z"}
{"message":"}}] ","@timestamp":"2022-02-22T03:19:56.931Z"}

字段";msn";已通过我的配置成功筛选,但正如您所看到的,行的顺序已更改。

下面是logstash的配置。

input {
file {
mode => "tail"
path => ["/test/app_info.log"]
sincedb_path => "/home/logstash/output/sincedb/app_info.log"
start_position => "beginning"
codec => plain {
charset => "UTF-8"
}
}
}
filter {
mutate {
remove_field => ["path", "@version", "host"]
gsub => [
"message", "msn:.*", "msn:XXXXX"
]
}  
}
output {
file {
path => "/test/logstash/output/test_%{+YYYYMMdd}.log"
}
}

如果我省略了gsub,那么行的顺序与原始日志相同。所以我可以看出是gsub引起的。

有人知道用收款单输出填好的日志吗?

如果你想保留logstash中事件的顺序,那么你必须将pipeline.workers设置为1,这样就只有一个工作线程,还必须将piperine.ordered设置为true。这两者都可以在logstash.yml中设置。

过滤器的详细信息可能会影响顺序是否被保留,但logstash不能保证顺序被保留,除非pipeline.ordered生效。他们可以自由更新代码库,以便在删除gsub时仍然可以修改顺序。

最新更新