2015-02-04 3 views
0

postgresql 로그 용 필터를 만들려고합니다.PostgreSQL 용 Logstash 다중 라인 필터

2014-02-04 19:26:08 EST CONTEXT: Remote context: SQL statement "INSERT INTO  images.images_contents_part_2014_01_05 SELECT $1.*" 
     PL/pgSQL function insert_find_part() line 25 at EXECUTE statement 
     SQL statement "INSERT INTO images.images_contents_master SELECT NEW.*" 
     PL/pgSQL function images_contents_insert_trigger() line 6 at SQL statement 
     SQL statement "INSERT INTO images.images_contents (id,content_id, image, created) 
       VALUES (images.images_make_id_from_created(created_at),content_id, image_path, created_at) 
      RETURNING id" 
     PL/pgSQL function insert_news_image(character varying,bigint,timestamp without time zone) line 11 at  SQL statement 
     SQL statement "SELECT 
       media_id AS id 
       FROM contents.insert_news_image(i, id) AS media_id" 
     PL/pgSQL function insert_news_media(bigint,character varying[],character varying[]) line 21 at SQL  statement 

내가 시간에 대한 정보, 메시지 (문맥, 세부 사항, 디버그 등) 및 메시지의 텍스트의 유형을 추출해야합니다 로그 기록은 다음과 같은

2014-01-14 17:23:08 EST DETAIL: Remote detail: Key (id)=(913072088342860500) already exists. 

을 하나가 늘어선 또는 multilined 될 수 있습니다 . 여러 줄짜리 코덱을 사용해야 할 필요가 있다고 생각합니다. 그러나 그것을 달성하는 방법을 모르겠습니다.

감사합니다.

답변

0

있다 (아마도)이 가능한 접근 방법 :이 공백으로 시작하는 경우

  • 이전 라인과 라인을 병합하거나 시작하지 않는 경우
  • 이전 라인과 라인을 병합 타임 스탬프.

PostgreSQL의 로그 형식에서 모든 연속 줄이 공백으로 시작하지만 아마도 공백으로 시작하는지는 알 수 없습니다. 그렇지 않은 경우 첫 번째 옵션이 분명히 나와 있습니다.

filter { 
    multiline { 
    pattern => "^\s+" 
    what => "previous" 
    } 
} 

나는 당신이 선호 대신하는 경우가 multiline codec 사용할 수 있습니다 확신 : 여기에 전을 수행하는 방법의 예입니다.

Logstash < 1.5에는 여러 줄 입력에서 마지막 줄을 가져 오지 못하게하는 버그 (LOGSTASH-2067)가 있습니다. logstash multiline filter:last part of message flush도 참조하십시오.