Kubernetes EFK 구축 연동 3가지 OpenSearch

Kubernetes EFK 구축을 OpenSearch로 구성하는 방법과 아주 간단하게 Kubernetes에 fluent-bit을 설치하는 3가지 명령어를 공유드립니다.

개요

Amazon Web Services (AWS) OpenSearch는 Elasticsearch와 Kibana의 오픈 소스 버전을 기반으로 하는 검색 및 분석 엔진입니다. EFK Stack은 Elasticsearch, Fluentd, 및 Kibana의 약자로, 로그 데이터의 집계, 저장, 검색, 시각화를 위한 인기 있는 솔루션입니다. 이 가이드에서는 Kubernetes 환경에 EFK Stack을 구축하는 방법을 소개합니다.

사전 요구사항 AWS 계정 AWS CLI 설정 kubectl 설치 및 구성 EKS 클러스터 또는 Kubernetes 클러스터 helm

단계 1: AWS OpenSearch 서비스 생성 AWS Management Console에서 OpenSearch 서비스로 이동하여 새 도메인을 생성합니다.

OpenSearch Service 대시보드에서 새 도메인 생성을 선택합니다. 원하는 버전을 선택하고 도메인 이름을 지정합니다. 인스턴스 유형, 노드 수, 스토리지 옵션을 설정합니다. 네트워크 구성에서 VPC 및 액세스 정책을 구성합니다. 도메인 생성을 클릭하여 OpenSearch 클러스터를 생성합니다.

단계 2: Helm을 이용한 Fluentd 설치 및 구성 Fluentd DaemonSet, ConfigMap 수정 Fluentd는 클러스터 내의 모든 노드에서 로그를 수집합니다. 이를 위해 DaemonSet을 사용합니다.

Helm 설치 법 : https://helm.sh/ko/docs/intro/install/

Kubernetes EFK 구축 Helm 명령어

kubectl create ns logging
helm repo add fluent https://fluent.github.io/helm-charts
helm upgrade --install fluent-bit fluent/fluent-bit -n logging

ConfigMap 수정

Fluentd ConfigMap 생성 Fluentd의 구성을 위해 ConfigMap을 수정 합니다.

apiVersion: v1
data:
  fluent-bit.conf: |
    [SERVICE]
        Parsers_File      parsers.conf
        Lua_Script        /fluent-bit/etc/conf/remove_ansi.lua
        HTTP_Server       On
        HTTP_Listen       0.0.0.0
        HTTP_Port         2020
    [INPUT]
        Name              tail
        Path              /var/log/containers/prd1*.log, /var/log/containers/prd2*.log
        Exclude_Path      /var/log/containers/*dev*.log
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     10MB
        Refresh_Interval  10
        Tag               hm
        Parser            docker
    [FILTER]
        Name              record_modifier
        Match             hm
        Whitelist_key     log
    [FILTER]
        Name              lua
        Match             *
        script            remove_ansi.lua
        call              remove_ansi
    [OUTPUT]
        Name              es
        Match             hm
        Host es.test.com
        Port 443
        HTTP_User test
        HTTP_Passwd test
        TLS             On
        Logstash_Format On
        Logstash_Prefix node
  remove_ansi.lua: |
    function remove_ansi(tag, timestamp, record)
      local log = record["log"]
      if log then
        log = log:gsub("\x1b[%[%d;]*[mGK]", "")
        record["log"] = log
      end
      return 1, timestamp, record
    end


remove_ansi.lua 사용 이유는 NestJS log에 ANSI Color가 삽입되어 삭제하는 옵션이 추가 되었습니다.

단계 3: Kibana 설정 AWS OpenSearch 서비스에서는 Kibana가 이미 OpenSearch와 통합되어 제공됩니다. OpenSearch 대시보드에서 직접 Kibana 대시보드에 액세스하여 로그 데이터를 시각화하고 분석할 수 있습니다.

단계 4: 로그 확인 및 시각화 Fluentd가 로그를 수집하여 OpenSearch에 전송하면, Kibana를 사용하여 로그를 확인하고 시각화할 수 있습니다.

Kibana 대시보드로 이동합니다. 로그 데이터에 대한 인덱스 패턴을 생성합니다. Discover, Visualize, 및 Dashboard 섹션을 탐색하여 로그 데이터를 분석합니다.

Kubernetes EFK 구축 마치며

결론 이 가이드를 통해 AWS OpenSearch와 EFK Stack을 활용하여 로그 관리 솔루션을 성공적으로 구축하였습니다. 이제 로그 데이터의 실시간 모니터링 및 개선을 진행 할 수 있습니다.

Kubernetes EFK 구축

다른 아이티정보는 아래 확인하세요.

Kubernetes Istio 구성 5가지, gRPC Service Mesh