关于日志。热门通过收集命令输出填充的日志?

About logstash. Hot to output the fillered log by collect order?

我正在使用 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 引起的。

有谁知道用collect order输出填充的日志吗?

如果您想保留 logstash 中的事件顺序,则必须将 pipeline.workers 设置为 1,以便只有一个工作线程,并将 pipeline.ordered 设置为 true。这两个都可以在 logstash.yml 中设置。记录在案 here.

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