0

저는 클라이언트가 redis로 보내고, redst에서 logstash를 읽어서 ES로 보냅니다. 발송인으로 'filebeat'를 사용하고 있습니다.Logstash 필터 - 반 json 라인 구문 분석

나는 다음과 같은 예를 들어 라인 구문 분석을 시도하고있다 : (613)

것은 당신이 볼 수 있듯이 : 값으로 ", 액션"나는 필드 이름을 갖고 싶어 결국

09:24:01.969 watchdog - INFO - 100.140.2 PASSED: Mobile:Mobile[].popover["mc1814"].select(2,) :706<<<<<<<<<<<<<<<<<<< {"actionDuration":613}

을 그것은 부분적으로 json입니다. - grok 필터를 사용하여 add_field와 match를 시도했지만 filebeat와 logstash에서 몇 가지 구성을 변경하려고했습니다.

내가 기본 구성을 사용하고 있습니다 : filebeat.conf을 :

filebeat.prospectors:

  • input_type: log

    paths:

    • /sketch/workspace/sanity-dev-kennel/out/*.log

    fields:

    • type: watchdog
    • BUILD_ID: 82161

이 내가 선호하는 filebeat 측면에서 그것을 할 수있는 가능성이, 그러나 그것은 또한 Logstash 측면에서 좋은 경우.

덕분에 많은 부분-형식의 모세

답변

0

이런 종류의 최고에, Logstash 측에없는 화주을 처리됩니다. FileBeat에서 사용할 수있는 필터/변형은 그다지 중요하지 않습니다. Logstash 필터 파이프 라인이 있습니다.

이 기본 예제는 수신 메시지를 두 개의 필드로 분리합니다. plain_prefixjson_segment. 그런 다음 json{} 필터를 사용하여 JSON 데이터를 이벤트로 구문 분석합니다. 마지막으로 mutate {} 필터가 이벤트에서 json_segment 필드를 제거하는 데 사용됩니다.이 필드는 이미 구문 분석되어 포함되어 있습니다.

참고 :.*?plain_prefix입니다.이 필터에서는 매우 중요합니다. 이 방법으로 구성하면 첫 번째 {부터 모든 부분이 JSON 세그먼트의 일부로 간주됩니다. .*을 사용하는 경우 JSON 세그먼트는 에서{ 사이의 모든 것이되며, 이는 복잡한 JSON 데이터 구조에 문제가됩니다. "json_error": 빠른 답변

+0

덕분에, 나는 다음과 같은 오류 받고 있어요 "오류 디코딩 JSON : JSON을 : 수없는 비 정렬 화 번호를 입력지도 [문자열] 인터페이스 {}의 이동 값으로" –

+0

그것은 아무튼 나에게 일하지 마라. 나는 ELK 5.1.1 스택 버전을 사용하고있다. BTW에는 끝 부분에 json이없는 로그가있다. –

+0

해결할 생각이 있습니까? –