2013-09-16 2 views
0
우리는 다음과 같은 구성으로 Logstash를 사용하여 로그를 수신하고

:여러 Logstash 인스턴스 라인의 원인이 중복

input { 
     tcp { 
         type => "logs" 
         port => 12203 
         } 
} 


output { 
    pipe { 
     command => "python /usr/lib/piperedis.py" 
    } 
} 
: 우리는 다음 설정을 사용하여 기계 "host"에 로그를 따기있어

input { 
    udp { 
    type => "logs" 
    port => 12203 
    } 
} 

filter { 
    grok { 
    type => "tracker" 
    pattern => '%{GREEDYDATA:message}' 
    } 
    date { 
    type => "tracker" 
    match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ] 
    } 
} 

output{ 
    tcp{ 
     type => "logs" 
     host => "host" 
     port => 12203 
    } 
} 

여기에서 우리는 라인을 파싱하여 Redis 데이터베이스에 저장합니다. 그러나 우리는 흥미로운 문제를 발견했습니다.

Logstash '랩'은 JSON 스타일 패키지 IE에서 로그 메시지 :

{\"@source\":\"source/\",\"@tags\":[],\"@fields\":{\"timestamp\":[\"2013-09-16 15:50:47,440\"],\"thread\":[\"ajp-8009-7\"],\"level\":[\"INFO\"],\"classname\":[\"classname\"],\"message\":[\"message"\]}} 

우리는 그 다음을 받아 다음 컴퓨터에 전달하기에, 메시지를 같이하는 다른에 넣어 것을 가지고 싸개! 우리는 실제 로그 메시지에만 관심이 있고 다른 것들 (소스 경로, 소스, 태그, 필드, 타임 스탬프 등)은 관심이 없습니다.

필터를 사용하거나이 작업을 수행 할 수있는 방법이 있습니까? 문서를 살펴 보았지만 Logstash 인스턴스간에 원시 로그 행을 전달하는 방법은 없습니다.

감사합니다,

매트

답변

1

logstash 문서가 잘못 - 그것은 기본 "코덱이"plain 있음을 나타냅니다하지만 실제로는 코덱을 사용하지 않습니다 - 그것은 출력 format를 사용합니다.

은 간단한 출력을 얻으려면, 단지 표준 출력에서 ​​해당 메시지를 추출하지 왜

output { 
    pipe { 
     command => "python /usr/lib/piperedis.py" 
     message_format => "%{message}" 
    } 
} 
0

같은 당신의 출력을 변경?

line = sys.stdin.readline() 
line_json = json.loads(line) 
line_json['message'] # will be your @message