해시 필드 (타임 스탬프 없음)를 ES로 펌핑하면이를 인식해야합니다.
logstash 파이프 라인에서 수행하려는 경우 json filter을 사용하고 source =>
을 두 번째 부분으로 지정합니다 (타임 스탬프 프리픽스를 다시 추가 할 수 있음). 모든 분야에서
이 결과는 현재의 메시지에 추가, 당신은 직접 액세스하거나 할 수있는 모든 조합 :
구성 :
input { stdin { } }
filter {
# split line in Timestamp and Json
grok { match => [ message , "%{NOTSPACE:ts} %{NOTSPACE:ip} %{GREEDYDATA:js}"] }
# parse json part (called "js") and add new field from above
json { source => "js" }
}
output {
# stdout { codec => rubydebug }
# you access fields directly with %{fieldname}:
stdout { codec => line { format => "sourcefile: %{sourcefile}"} }
}
샘플 실행
2016-09-01T21:07:30.152Z 153.65.199.92 { "sourcefile":"/usr" }
sourcefile: /usr
및 rubydebug와
(호스트 및 @timestamp 삭제됨) :
{
"message" => "2016-09-01T21:07:30.152Z 153.65.199.92 { \"sourcefile\":\"/usr\" }",
"@version" => "1",
"ts" => "2016-09-01T21:07:30.152Z",
"ip" => "153.65.199.92",
"js" => "{ \"sourcefile\":\"/usr\" }",
"sourcefile" => "/usr"
}
알다시피, sourcefile
필드는 rubydebug 출력의 값으로 직접 알려져 있습니다.
로그 레코드 원본에 따라 multiline
코덱을 사용해야 할 수도 있습니다. js
필드를 삭제하고 @timestamp
의 이름을 _parsedate
으로 바꾼 다음 ts
을 구문 분석하여 기록 타임 스탬프 (기바나가 행복해 지도록)로 바꿀 수도 있습니다. 이것은 샘플에 표시되지 않습니다. 또한 공간을 절약하기 위해 message
을 제거합니다.
출력 플러그인에서 파일 이름을 사용하고자하므로 Logstash 파이프 라인에서 구문 분석하고 싶습니다. json 필터를 살펴 봤지만 문서에서는 특정 필드를 가져 오는 방법을 설명하지 않으며 값을 사용합니다. 당신의 대답을 자세히 설명해주십시오. –
@ChrisF done :) – eckes