input {
file {
path => "d:/test.log"
start_position => "beginning"
sincedb_path => "nul"
}
}
filter {
mutate { remove_field => [ "@timestamp", "@version", "path", "host" ] }
}
output {
stdout {}
}
결과는 이렇다. 데이터는 "로 구분된 ab와 cd.
[2020-08-11T15:14:15,740][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "ab\"cd\r"
}
다음은 "를 기준으로 message 필드를 두 개의 별도 필드로 쪼개는 설정. 필드 구분 표현식의 구분자 "와 필드를 구분하는 "의 충돌을 막기 위해 \(escaped character)를 사용했다.
filter {
dissect {
mapping => { "message" => "%{field1}\"%{field2}" }
remove_field => [ "@timestamp", "@version", "path", "host" ]
}
}
그런데 안 됨. 2월까지 됐었는데?
{
"tags" => [
[0] "_dissectfailure"
],
"@version" => "1",
"path" => "d:/test.log",
"message" => "ab\"cd\r",
"@timestamp" => 2020-08-11T06:17:52.762Z,
"host" => "MHKANG"
}
충돌을 막는 두 번째 방법은 필드 구분 표현식의 구분자 " 대신 '를 사용하는 것.
filter {
dissect {
mapping => { "message" => '%{field1}"%{field2}' }
remove_field => [ "@timestamp", "@version", "path", "host", "message" ]
}
}
잘 된다.
[2020-08-11T15:24:39,984][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"field2" => "cd\r",
"field1" => "ab"
}
죽어도 escaped character를 써야겠다면 로그스태시 설정을 바꾸면 된다. 기본 설정이 허용에서 금지로 바뀐 듯. 근데 기본 설정에서도 정규표현식은 잘 동작하는데(..) 정확히 무슨 용돈지 잘 모르겠다.
logstash.yml |
관련 글
- Logstash HTTP API
- Logstash 휴먼 버그
- Logstash 권한 문제
- Logstash 설정과 한글
- Logstash의 데이터 처리
- Logstash의 줄바꿈 문자
- 윈도우 Logstash 파이프라인
- Logstash 연동 에러(Limit of total fields)
댓글 없음:
댓글 쓰기