filebeat 설정을 하는 삽질 하며

존스노우·2023년 2월 28일
0

기타

목록 보기
2/7
filebeat.inputs:
- type: kafka
  hosts: ["localhost:9092"]
  topics:
    - ocp.event.biz
  group_id: ocp.dam
  processors:
    - decode_json_fields:
        fields: ["message"]
        target: ""
        overwrite_keys: true
output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "bizlog-%{+yyyy.MM.dd}"
  index_patterns:
    - "bizlog-*"
  index_template:
    name: "bizlog"
    pattern: "bizlog-*"
    settings:
      index:
        number_of_shards: 3
    mappings:
      properties:
        marketId:
          type: keyword
        partnerId:
          type: keyword
        daType:
          type: keyword
        issueAt:
          type: date
          format: "yyyy-MM-dd HH:mm:ss.SSS"
          copy_to: "@timestamp"
        resCount:
          type: long
      dynamic_templates:
        - strings_as_keyword:
            match_mapping_type: string
            mapping:
              type: keyword
              ignore_above: 1024
        - int_as_long:
            match_mapping_type: long
            mapping:
              type: long
setup.template.name: "bizlog"
setup.template.pattern: "bizlog-*"              
setup.template.overwrite: true # 기본 default로 정의된 엘라스틱서치 기본 인덱스 템플릿을 불러오기때문에 true로 설정해 내가 정의한 템플릿을 사용한다.
setup.ilm.enabled: false # 7.17 버전 특성상 false 안해주면 인덱스네임이 filebeat로 고정 됨.
setup.template.enabled: false # 이 옵션은 filebeat 기본 인덱스 템플릿을 자동으로 로드하지 못하도록 하는 옵션.  이 옵션이랑 위옵션을 사용해야 내가 원하는 인덱스템플릿을 가진 인덱스가 생성 됨.
logging.level: debug

이 파일비트 설정은
카프카에서 데이터를 수집해서 엘라스틱 서치에 색인하는 과정이다.
1주일간 삽질하계된 계기

내가 원하는것.

이파일 설정하나로
-> 내가 원하는 인덱스 템플릿에서 날짜별로 원하는 데이터가 수집되어야하는데.

내가만든 인덱스 템플릿이 적용이 되지 않고
ilebeat은 기본적으로 정의된 인덱스 템플릿(default index template)을 사용해
무수히 필요없는 많은 매핑정보를포함한 인덱스 템플릿이 정의 되었기 때문이다.

최종적인 yml 파일은 위에 나와있는대로다.

데이터 스트림 및 롤링인덱스 적용후

filebeat.inputs:
- type: kafka
  hosts: ["localhost:9092"]
  topics:
    - ocp.event.biz
  group_id: ocp.dam
  processors:
    - decode_json_fields:
        fields: ["message"]
        target: ""
        overwrite_keys: true

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "bizlog-%{+yyyy.MM.dd}-000001"   # 인덱스 이름을 날짜와 함께 설정
  index_patterns:
    - "bizlog-*"
  index_template:
    name: "bizlog"
    pattern: "bizlog-*"
    settings:
      index:
        number_of_shards: 3
        lifecycle:
          rollover_alias: "bizlog"  # 롤링 대상 인덱스 이름을 설정
          max_age: "30d" # 30일 후에 인덱스 삭제
    mappings:
      properties:
        marketId:
          type: keyword
        partnerId:
          type: keyword
        daType:
          type: keyword
        issueAt:
          type: date
          format: "yyyy-MM-dd HH:mm:ss.SSS"
          copy_to: "@timestamp"
        resCount:
          type: long
      dynamic_templates:
        - strings_as_keyword:
            match_mapping_type: string
            mapping:
              type: keyword
              ignore_above: 1024
        - int_as_long:
            match_mapping_type: long
            mapping:
              type: long

setup.template.name: "bizlog"
setup.template.pattern: "bizlog-*"
setup.ilm.enabled: false
setup.template.overwrite: true
setup.template.enabled: false
data_stream.enabled: true
data_stream.dataset: bizlog


설정파일 정리

위 설정 파일은 Kafka에서 로그를 수집하여 Elasticsearch에 저장하는데, Elasticsearch의 데이터 롤링과 삭제 정책을 적용하여 로그 데이터를 처리합니다.

filebeat.inputs: Filebeat 입력을 설정합니다. 이 설정에서는 Kafka로 부터 로그를 수집합니다.
output.elasticsearch: Elasticsearch로 로그 데이터를 전송하는 설정을 합니다. 이 설정에서는 Elasticsearch 호스트와 인덱스명, 인덱스 패턴을 지정합니다.
index_template: 인덱스 템플릿 설정을 합니다. 이 설정에서는 인덱스의 매핑을 정의합니다.
settings.index.lifecycle: 인덱스 라이프사이클 설정입니다. 롤오버와 삭제 정책을 적용할 수 있습니다.
setup.template.*: Filebeat에 의해 Elasticsearch에 적용되는 인덱스 템플릿 설정입니다.
data_stream.enabled: 데이터 스트림 활성화 여부를 설정합니다.
data_stream.dataset: 데이터 스트림에서 사용되는 데이터셋 이름을 설정합니다.
위 설정 파일에서는 ILM을 사용하지 않고, 대신 인덱스 롤링과 삭제 정책을 설정하였습니다. 따라서 setup.ilm.enabled은 false로 설정하였습니다. 롤오버 인덱스는 bizlog-YYYY.MM.DD-000001과 같이 날짜를 기반으로 생성되며, 30일 이후에 삭제됩니다.

또한, 데이터 스트림을 사용하도록 설정하였습니다. 데이터 스트림은 로그 데이터를 스트림으로 전달하며, Elasticsearch에서는 이를 인덱스로 변환하여 저장합니다. 데이터 스트림을 사용하면 데이터 적재 및 관리가 용이해지며, 검색 및 분석 등의 작업도 간편해집니다.

동작방식

인덱스롤링 특정 조건을충족하면 새로운 인덱스가 생성되고
이전인덱스는 알리아스 형식으로(읽기형식으로만)남게된다.
그리고 새로운 인덱스에 이전인덱스 데이터들의 메타 정보를 가지고있어
이전 데이터 검색을 포함한다.

데이터스트림이란?

  • 내가이해한대로 설명하면..

  • 데이터가 들어오면 자동으로 인덱스를 생성하고 관리

  • 그리고 그 기능중하나인 인덱스롤링을 통해, 분산시스템을 만든다.

  • 분산시스템이란 일정조건을 충족하면 새로운인덱스를 만들어 데이터를 색인함.

  • 분산시스템이 만들어지면서 I/O부하 감소 / 특정 인덱스만 검색해 검색 성능 향상

    하지만 데이터 스트림은 엘라스틱 7.9 버전부터 적용된다..
    이번 프로젝트에서 는 1번째 설정 파일을 사용했다. ㅠ ㅠ

    삽질을 많이하긴했지만 새로운걸 배울 수 있어서 그래도 기분 좋은 삽질이었던거 같다.

    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/data-streams.html

    데이터스트림 관련 공식 레퍼런스

profile
어제의 나보다 한걸음 더

0개의 댓글