关于日志。热门通过收集命令输出填充的日志?
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 时仍然修改订单。
我正在使用 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 时仍然修改订单。