AWS. EKS 애플리케이션 로그 수집하기 (5)

created Sep 11, 2022 | updated Oct 15, 2022

AWS EKS의 애플리케이션 로그를 AWS OpenSearch로 수집하고 관리하기 위한 내용을 정리한다. 로그 전송은 Fluent Bit을 사용했다.

내용은 간단하지만 한 개의 포스팅에 포함하려니 내용이 길어지고 가독성을 해쳐서 몇 개의 파트로 나눴다.

본 포스팅은 Fluent Bit 멀티라인 파싱 설정 내용을 다룬다.

파트 목차


로그 멀티라인 파싱 설정


자바 Stack Trace는 멀티라인으로 로그가 출력 된다. 이 경우 오류는 각 개별 라인으로 적재되고 로그를 분석하는데 불편함이 생긴다. 자바의 Stack Trace 멀티라인 로그를 묶을 수 있도록 설정해보자. 이번에도 Fluent Bit 설정 수정이 필요하다.

K8S ConfigMap 수정

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    k8s-app: fluent-bit
  name: fluent-bit-config
  namespace: logging
data:
  fluent-bit.conf: |
    [SERVICE]
        Flush         1
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE filter-multiline.conf    @INCLUDE output-opensearch.conf
  
  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log
        Multiline.Parser  docker        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On
        Refresh_Interval  10
        Read_From_Head    true  
  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix     kube.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed
        K8S-Logging.Parser  On
        K8S-Logging.Exclude On
        
  filter-multiline.conf: |    [FILTER]        Name                  multiline        Match                 *        Multiline.Key_Content log        Multiline.Parser      multiline-regex-springboot  
  output-opensearch.conf: |
    [OUTPUT]
        Name                 es
        Match                *
        Host                 ${OPENSEARCH_ENDPOINT}
        Port                 443
        TLS                  On
        AWS_Auth             On
        AWS_Region           ${AWS_REGION}
        Replace_Dots         On
        Logstash_Format      On
        Logstash_DateFormat  %Y-%m-%d
        Logstash_Prefix      ${INDEX_NAME}
        
  parsers.conf: |
    [PARSER]
        Name        docker
        Format      json
        Time_Key    time
        Time_Format %Y-%m-%dT%H:%M:%S.%L
        Time_Keep   On

    [MULTILINE_PARSER]        # https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing        Name          multiline-regex-springboot        Type          regex        Flush_Timeout 1000        # rules |   state name  | regex pattern                                 | next state        # ------|---------------|-----------------------------------------------|-------------        Rule      "start_state"   "/(\d+\-\d+\-\d+ \d+\:\d+\:\d+\.\d+\s)(.*)/"    "cont"        Rule      "cont"          "/^(?!\d+\-\d+\-\d+ \d+\:\d+\:\d+\.\d+\s).*/"   "cont"

참고


※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

유리아쥬 제모스 스틱 레브르 립밤 4g x 10개, 12개, 무향솔가 어드밴스드 칼슘 컴플렉스 타블렛, 120개입, 1개커세어 코리아 정품 DARK CORE PRO 무선 충전 RGB 게이밍 마우스 / 다용도 에코백 사은품 증정, 혼합색상, RGP0076