2020년 7월 27일 월요일

Logstash의 줄바꿈 문자

다음은 라인 시작 위치의 @를 검사하는 정규표현식.


다음은 라인 종료 위치의 @를 검사하는 정규표현식.


같은 문자열 검사를 로그스태시에서 테스트해보자. 다음 설정의 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@"
}

이해가 안 되네.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스