2017-01-04 3 views
1

로컬 서버가 fluentd를 로그 드라이버로 사용하도록 설정된 도커 컨테이너에서 실행되고있다. 나는 도퍼가 자신의 컨테이너에 fluentd, nginx, elasticsearch 및 kibana를 실행하는 파일을 작성했습니다. 그래서 fluentd는 내 서버에서 로그를 가져와 elasticsearch에 전달하고 Kibana에 표시됩니다.해석 로그가 유창하다

제 질문은 새로운 태그를 만들기 위해 fluentd (elasticsearch 또는 kibana의 경우 유창하게는 가능하지 않은 경우)를 구문 분석하여 정렬하고 쉽게 탐색 할 수 있도록하는 방법입니다.

이것은 현재 기바나에 표시되는 로그입니다. 이제이 로그 문자열을 새 태그로 '깨뜨린'싶습니다. 이 경우 :

2017/01/04 13:26:56.574909 UTC (Example deployment.web) [INFO] [GET] /api/device/ 200 10.562379ms 

version: "2" 

services: 

    fluentd: 
    image: fluent/fluentd:latest 
    ports: 
     - "24224:24224" 
    volumes: 
     - ./fluentd/etc:/fluentd/etc 
    command: /fluentd/etc/start.sh 
    networks: 
     - lognet 

    elasticsearch: 
    image: elasticsearch 
    ports: 
     - "9200:9200" 
     - "9300:9300" 
    volumes: 
     - /usr/share/elasticsearch/data:/usr/share/elasticsearch/data 
    networks: 
     - lognet 

    kibana: 
    image: kibana 
    restart: always 
    ports: 
     - "5601:5601" 
    environment: 
     - ELASTICSEARCH_URL=http://localhost:9200 
    networks: 
     - lognet 

    nginx: 
    image: nginx 
    ports: 
     - "8084:80" 
    logging: 
     driver: fluentd 
    networks: 
     - lognet 

    networks: 
     lognet: 
     driver: bridge 

내 fluent.conf 파일 내 고정 표시기 - compose.yml

date: 2017/01/04 
time: 13:26:56.574909 UTC 
message: (Example deployment.web) 
logType: [INFO] 
other: [GET] /api/device/ 200 10.562379ms 

에 어떤 구문 분석은 앞으로

<source> 
    type forward 
</source> 

<match *.*> 
    type elasticsearch 
    host elasticsearch 
    logstash_format true 
    flush_interval 10s 
</match> 
단순한, 포함되지

내 시도가 regexp와 함께 여기 logType을 구문 분석하려고합니다. out

<source> 
    @type forward 
</source> 

<match *.*> 
    type stdout 
</match> 

<filter docker.**> 
    @type parser 
    format /(?<logType>\[([^\)]+)\])/ 
    key_name log 
    reserve_data false 
</filter> 

다른 구성을 시도했지만 로그를 분석하지 못했습니다.

답변

1

비슷한 문제가있는 사람이라면 저에게 적합한 해결책을 찾았습니다.

fluent.conf 파일에서 새 필터 태그가 추가되었습니다. 예를 들어 이라는 새 필드를 심각도으로 만들려면 첫 번째 단계는 정규식을 사용하여이를 기록하는 것입니다.

예는 [DEBU]입니다.

<filter *.*> 
    @type record_transformer 
    enable_ruby 
    <record> 
    severity ${record["log"].scan(/\[([^\)]+)\]/).last} 
    </record> 
</filter> 

그리고 나중에 원본 메시지에서 삭제 :

<filter *.*> 
    @type record_transformer 
    enable_ruby 
    <record> 
    log ${record["log"].gsub(/\[([^\)]+)\]/, '')} 
    </record> 
</filter> 

주요 부분은 다음과 같습니다

severity ${record["log"].scan(/\[([^\)]+)\]/).last} 

심각도가 새 필드의 이름입니다 기록 [ "로그"]입니다 원래 로그 문자열 어디 정규식을 통해 문자열을 발견하고 새 필드에 추가됩니다.

log ${record["log"].gsub(/\[([^\)]+)\]/, '')} 

이 명령은 필드를 정규식이 빈 문자열로 치환 된입니다 로그을 수정 - 삭제.

주 : 우리는 처음에 새 필드에 추가 한 다음 필요한 경우 원본 로그 메시지에서 문자열을 삭제해야하기 때문에 순서가 중요합니다.

0

먼저 소스에 tag으로 태그를 지정하십시오. 이것은 나를 위해 작동

include_tag_key true tag_key fluentd_key

: 둘째, 경기 섹션에서 태그 키를 포함한다. 로그는 fluentd_key으로 분류됩니다.

+0

답변을 이해했는지 확실하지 않습니다. '앞으로 @type 태그 fluentd_key @type의 elasticsearch 호스트 elasticsearch logstash_format 사실 flush_interval 10 초 include_tag_key 사실 tag_key의 fluentd_key 가'난 아직도 내 로그에 대한 사용자 정의 형식을 사용할 수 없습니다. –