728x90
containerd 로그 수집을 위한 AWS Fluent Bit 설정
Kubernetes 1.24부터 기본 container rumtime이 변경되었습니다. EKS도 1.24부터 container rumtime이 docker에서 containerd로 변경되었습니다. Fluent Bit를 통해서 로그를 수집하고 있었다면 containerd 설정으로 인해 로그 포맷이 변경되어 Fluent Bit 설정을 수정해야합니다.
로그 포맷
container rumtime - docker에서는 기본적으로 json 형식으로 로그를 출력합니다.
{
"log":"ts=2022-11-30T09:49:46.292Z caller=node_exporter.go:199 level=info msg=\"Listening on\" address=[0.0.0.0]:9100\n",
"stream":"stderr",
"time":"2022-11-30T09:49:46.292187066Z"
}
container rumtime - containerd에서는 json형식이 아닌 일반 텍스트 형식으로 로그를 출력합니다.
2022-11-30T09:27:29.589650507Z stderr F level=info ts=2022-11-30T09:27:29.589Z caller=node_exporter.go:199 msg="Listening on" address=0.0.0.0:9100
Fluent Bit 설정
로그포맷이 변경되어 아래와같이 PARSER를 추가하고, INPUT설정의 Parser를 containerd로 수정해주셔야합니다.
[PARSER]
Name containerd
Format regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%LZ
위의 추가된 PARSER를 적용한 Fluent Bit 설정입니다. 아래의 설정은 container로그를 AWS CloudWatch log로 보내는 설정입니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
data:
application-log.conf: |
[INPUT]
Name tail
Tag application.*
Path /var/log/containers/*.log
Parser containerd
DB /var/fluent-bit/state/flb_container.db
Mem_Buf_Limit 50MB
Skip_Long_Lines On
Refresh_Interval 10
Rotate_Wait 30
[FILTER]
Name kubernetes
Match application.*
Kube_URL https://kubernetes.default.svc:443
Kube_Tag_Prefix application.var.log.containers.
Merge_Log On
Merge_Log_Key log_processed
K8S-Logging.Parser On
K8S-Logging.Exclude Off
Labels Off
Annotations Off
Use_Kubelet On
Kubelet_Port 10250
Buffer_Size 0
[OUTPUT]
Name cloudwatch_logs
Match application.*
region ap-northeast-2
log_group_name /aws/eks/application
auto_create_group true
fluent-bit.conf: |
[SERVICE]
Flush 5
Log_Level info
Daemon off
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
storage.path /var/fluent-bit/state/flb-storage/
storage.sync normal
storage.checksum off
storage.backlog.mem_limit 5M
@INCLUDE application-log.conf
parsers.conf: |
[PARSER]
Name containerd
Format regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%LZ
728x90
'Kubernetes' 카테고리의 다른 글
Kubernetes RuntimeClass 사용하여 gVisor로 컨테이너 실행 (0) | 2023.03.03 |
---|---|
Prometheus 메모리 튜닝 (0) | 2023.02.22 |
Grafana Mimir (0) | 2022.10.28 |
Kyverno - Kubernetes Native Policy Management (0) | 2022.10.21 |
NVIDIA device plugin for Kubernetes (2) | 2022.09.29 |