2016-08-10 8 views
2

나는 다음과 같은 로그가 :filebeat, logstash 및 elasticsearch를 사용하여 json 형식 로그를 kibana로 보내시겠습니까?

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c98963b","channelName":"JSPC","apiVersion":"v1","modulName":null,"actionName":"apiRequest","typeOfError":"","statusCode":"","message":"In Auth","exception":"In Auth","logType":"Info"} 

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c987206","channelName":"JSPC","apiVersion":"v2","modulName":null,"actionName":"performV2","typeOfError":"","statusCode":"","message":"in inbox api v2 5","exception":"in inbox api v2 5","logType":"Info"} 

나는 kibana로 밀어합니다. 나는 다음과 같은 구성을 사용하여, logstash하는 데이터를 전송하는 filebeat을 사용하고 있습니다 :

filebeat.yml 

### Logstash as output 
logstash: 
# The Logstash hosts 
hosts: ["localhost:5044"] 

# Number of workers per Logstash host. 
#worker: 1 

이제 다음과 같은 구성을 사용하여, 나는 코덱 타입 변경하려면 : 아직도 내가 문자열 형식으로 로그를 얻을

input { 

    beats { 
    port => 5000 
    tags => "beats" 
    codec => "json_lines" 
    #ssl => true 
    #ssl_certificate => "/opt/filebeats/logs.example.com.crt" 
    #ssl_key => "/opt/filebeats/logs.example.com.key" 
    } 


    syslog { 
     type => "syslog" 
     port => "5514" 

    } 

} 

을하지만, :

"message": "logId \": \ "57aaf6c96224b \", \ "clientIp \": \ "127.0.0.1 \", \ "time \": \ "03:11:29 \ "모듈 이름 \": null, \ "actionName \": \ "404 \", \ "typeOfError \": \ "채널 이름 \": \ "JSPC \", \ "apiVersion \": \ "EXCEPTION \", \ "statusCode \": 0, \ "message \": \ "404 페이지가 표시됨 http : \/\/localjs.com \/업로드 \/NonScreenedImages \/profilePic120/16 \/29 \ /15997002iicee52ad041fed55e952d4e4e163d5972ii4c41f8845105429abbd11cc184d0e330.jpeg \ ", \"LogType의 \는 \ "\"오류 \ "}",

도와주세요 내가 해결해.

답변

6

Filebeat에서 보낸 Logstash의 JSON 로그 라인을 구문 분석하려면 코덱 대신 json filter을 사용해야합니다. 이는 Filebeat가 JSON으로 데이터를 전송하고 로그 라인의 내용이 message 필드에 포함되어 있기 때문입니다.

Logstash의 구성 :

input { 
    beats { 
    port => 5044 
    } 
} 

filter { 
    if [tags][json] { 
    json { 
     source => "message" 
    } 
    } 
} 

output { 
    stdout { codec => rubydebug { metadata => true } } 
} 

Filebeat의 구성 다음 JSON 필터 조건부에 적용 할 수 있도록 Filebeat의 구성에서

filebeat: 
    prospectors: 
    - paths: 
     - my_json.log 
     fields_under_root: true 
     fields: 
     tags: ['json'] 
output: 
    logstash: 
    hosts: ['localhost:5044'] 

는, I는 이벤트에 "JSON"태그를 추가 데이터.

Filebeat 5.0은 Logstash를 사용하지 않고 JSON을 구문 분석 할 수 있지만 아직 알파 버전으로 남아 있습니다. 이 블로그 게시물 Structured logging with Filebeat은 Filebeat 5.0으로 JSON을 구문 분석하는 방법을 보여줍니다.

+1

은 다음 logstash 구성이 작동합니다'입력 { 비트 { 포트 => 5044 } } 경우 [태그] [JSON] { JSON 필터 { { 소스 => "메시지" } } } 출력 { elasticsearch { 호스트 => "로컬 호스트 : 9200" manage_template => 거짓 인덱스 => "% {[@ 메타] [때려]} - % {+ YYYY.MM.dd} " docume nt_type => "% {[@ 메타 데이터] [유형]}" } } ', 구성이 아닙니다. 도와 주셔서 감사합니다. – learner

2

FileBeat 5.x부터 Logstash를 사용하지 않고도 할 수 있습니다.

Filebeat의 설정 :

filebeat.prospectors: 
- input_type: log 
    paths: ["YOUR_LOG_FILE_DIR/*"] 
    json.message_key: logId 
    json.keys_under_root: true 

output.elasticsearch: 
    hosts: ["<HOSTNAME:PORT>"] 
    template.name: filebeat 
    template.path: filebeat.template.json 

Filebeat 다음 Logstash 경량입니다. 는 또한, 당신은 버전 2.x를 elasticsearch을 삽입해야 할 경우에도이 실제 예는 당신이 겪고있는 동일한 문제에 대한 인터넷을 샅샅이 한 here

+0

로그 슈트보다 탄성에 직접적인 영향은 무엇입니까? –

+0

@Robbo_UK 당신은 탄성에 대한 접근을 중앙에서 통제하는 능력이 느슨합니다. 모두 신축성있는 인증 키가있는 파일 비트 노드가 많은 경우 신축성있는 인증 변경 사항을 모두 업데이트해야하며 하나의 로그 저장 대 –

0

찾을 수 있습니다 FileBeat 5.x의이 기능을 사용할 수 있으며, 위의 내용을 포함한 다양한 제안을 시도했습니다. 그러나 아무도 도움이되지 않았으므로 나는 구식 방식으로 그 일을했다.나는 elasticsearch 문서 on filebeat configuration

에 가서 모두가

Filebeat의 설정 (logstash에서 필터 설정이 필요)가 필요하지 않았다 :

filebeat.prospectors: 
- input_type: log 
    document_type: #whatever your type is, this is optional 
    json.keys_under_root: true 
    paths: 
    - #your path goes here 

keys_under_root

복사 중첩 된 JSON을 키를 출력 문서의 최상위 레벨로 이동하십시오.

내 파일 비트 버전은 5.2.2입니다. 당신이 filebeat.yml 파일에 언급 된 변화를 만들기

+0

맞습니다. 하지만 이전 버전의 filebeat를 사용하고 있는데이 경우 @aj 응답 만 작동합니다. – learner