다음은 라인 종료 위치의 @를 검사하는 정규표현식.
같은 문자열 검사를 로그스태시에서 테스트해보자. 다음 설정의 mutate 플러그인은 gsub 옵션을 이용해서 라인 시작 위치의 @를 찾아 지워준다.
input {
file {
path => "d:/test.log"
start_position => "beginning"
sincedb_path => "nul"
}
}
filter {
mutate {
gsub => [ "message", "^@", "" ]
remove_field => [ "@timestamp", "@version", "path", "host" ]
}
}
output {
stdout {}
}
실행 결과는 다음과 같다. 의도대로 라인 시작 위치의 @만 지워짐.
[2020-07-26T21:40:39,984][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "a=1@\r"
}
이번엔 라인 종료 위치의 @만 지워보자. 다음은 필터 설정.
filter {
mutate {
gsub => [ "message", "@$", "" ]
remove_field => [ "@timestamp", "@version", "path", "host" ]
}
}
안 지워진다.
[2020-07-26T21:44:39,994][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "@a=1@\r"
}
앵커문자 $를 이용해서 위치를 줄 끝으로 고정했는데 왜 못찾지? $를 .으로 바꿔봤다.
filter {
mutate {
gsub => [ "message", "@.", "" ]
remove_field => [ "@timestamp", "@version", "path", "host" ]
}
}
.은 줄바꿈 문자를 검사하지 못하기 때문에 @a만 지워져야 정상. 그런데 @\r까지 지워짐.
[2020-07-26T21:52:03,991][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "=1"
}
@\r까지 지워졌다는 얘기는 줄바꿈 문자인 '\r(Carriage Return)'을 그냥 문자로 취급했다는 뜻인데? 근데 또 그렇다고 메타문자 \r을 인식 안 하는 것도 아니고(..)
filter {
mutate {
gsub => [ "message", "\r", "" ]
remove_field => [ "@timestamp", "@version", "path", "host" ]
}
}
[2020-07-24T21:54:39,994][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "@a=1@"
}
이해가 안 되네.
관련 글
댓글 없음:
댓글 쓰기