..

fluentd exclude

개요

fluentd v1.3.3에서 특정 컨테이너 로그 수집 제외하기

 

환경

  • fluentd app version: v1.3.3
  • fluentd 설치방식: Helm chart

주의사항: fluentd v1.3.3은 2019년 1월 7일 출시되어 상당히 오래된 버전입니다. 최신 버전의 fluentd와 예외처리 설정 방법이 다를 수 있음에 유의합니다.

 

설정방법

특정 파드 예외처리

fluentd에서 특정 컨테이너에 대한 로그 수집을 예외처리하려면 exclude 섹션에 추가합니다. exclude 섹션에는 크게 2개의 파라미터가 있습니다.

파라미터설명버전
key예외처리할 파라미터 이름 (필수)1.0.0
pattern예외처리할 파라미터 값 (필수)1.2.0

 

특정 파드의 수집 예외처리 설정은 filter 플러그인 안에 exclude 섹션을 추가해서 설정합니다.

<filter kube.**>
  @type grep

  <exclude>
    key log
    pattern /(ELB-HealthChecker|health|actuator|statusz|healthz)/i
  </exclude>

  <exclude>
    key $["kubernetes"]["container_name"]
    pattern /(CONTAINER_NAME_A|CONTAINER_NAME_B)/i
  </exclude>
</filter>

/i는 정규 표현식에서 대소문자를 구분하지 않도록 하는 약속된 플래그입니다. 만약 대소문자를 구분하지 않고 매칭하고 싶다면 /i를 유지해야 합니다. 대소문자를 구분하고 싶다면 /i를 제거해도 됩니다. 자세한 사항은 Specifying Modes Inside The Regular Expression 페이지를 참고합니다.

 

대소문자를 구분 안하는 fluentd 설정:

<exclude>
  key $["kubernetes"]["container_name"]
  pattern /(CONTAINER_NAME_A|CONTAINER_NAME_B)/i
</exclude>

예를 들어, CONTAINER_NAME_Acontainer_name_a를 모두 매칭하고 싶다면 /i를 유지해야 하고, CONTAINER_NAME_A만 매칭하고 싶다면 /i를 제거하면 됩니다.

대소문자를 명확하게 구분하는 fluentd 설정:

<exclude>
  key $["kubernetes"]["container_name"]
  pattern /(CONTAINER_NAME_A|CONTAINER_NAME_B)/
</exclude>

 

완성된 fleuntdoutput.conf 설정:

# charts/fluentd/values.yaml
configMaps:
  output.conf: |
    <filter kube.**>
      @type grep

      <exclude>
        key log
        pattern /(ELB-HealthChecker|health|actuator|statusz|healthz)/i
      </exclude>

      <exclude>
        key $["kubernetes"]["container_name"]
        pattern /(CONTAINER_NAME_A|CONTAINER_NAME_B)/i
      </exclude>
    </filter>

    <filter kube.**>
      @type record_transformer
      remove_keys $["kubernetes"]["labels"], $["kubernetes"]["annotations"], $["kubernetes"]["pod_id"], $["kubernetes"]["docker_id"], $["kubernetes"]["container_hash"]
    </filter>

    <filter kube.**>
      @type geoip

      geoip_lookup_keys ip
      backend_library geoip2_c

      <record>
        ip_location       ${location.latitude["ip"]},${location.longitude["ip"]}
        ip_country        ${country.iso_code["ip"]}
        ip_countryname    ${country.names.en["ip"]}
        ip_cityname       ${city.names.en["ip"]}
      </record>

      skip_adding_null_record  true
    </filter>

    <match kube.**>
      @type copy

      <store>
      # ... omitted for brevity ...
      </store>
    </match>    

 

참고자료