배경
Kubernetes v1.23부터 기본 런타임이 containerd로 변경됨에 따라, 로그포맷이 아래와 같이 변경되었습니다.
2022.06.25 - [AWS/EKS] - EKS의 기본 런타임이 v1.23부터 containerd로 변경됩니다.
기존 /var/log/containers
위치에 있던 로그들은 Json 포맷이었는데요.
{
"log": "time=\"2022-06-26T06:03:22Z\" level=info msg=\"Start processing\" resource=argocd/admission-controller\n",
"stream": "stderr",
"time": "2022-06-26T06:03:22.373102829Z"
}
이제 아래와 같은 한줄의 로그가 생성됩니다.
2022-06-26T05:47:06.216730222Z stderr F I0626 05:47:06.216638 1 proxier.go:813] "SyncProxyRules complete" elapsed="31.788331ms"
fluentbit config
[INPUT]
의 Parser
를 docker
에서 cri
라는 이름으로 변경해주는 것이 필요합니다.
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
Parser cri
Parser
에도 새로운 parser를 cri
라는 이름으로 새로 넣어주어야 합니다.
[PARSER]
Name cri
Format regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
정리하면 아래와 같은 fluentbit configmap.yaml
을 만들어볼 수 있습니다.
# Fluent Bit with containerd, CRI-O and JSON
# https://github.com/microsoft/fluentbit-containerd-cri-o-json-log
---
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
namespace: default
labels:
k8s-app: fluent-bit
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 output.conf
output.conf: |
[OUTPUT]
Name stdout
Match kube.var.log.containers.myapp*.*
input-kubernetes.conf: |
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
Parser cri
DB /var/log/flb_kube.db
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
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_Trim On
Keep_Log Off
K8S-Logging.Parser On
K8S-Logging.Exclude Off
Annotations Off
Labels On
[FILTER]
Name nest
Match kube.*
Operation lift
Nested_under kubernetes
Add_prefix kubernetes_
[FILTER]
Name nest
Match kube.*
Operation lift
Nested_under kubernetes_labels
Add_prefix kubernetes_labels_
parsers.conf: |
[PARSER]
Name json
Format json
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
Time_Keep Off
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep Off
[PARSER]
Name cri
Format regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
https://gist.github.com/didhd/44e7a459a1e00f5963bceb3cb3f61bfe
해당 config를 사용해 fluent-bit의 configmap을 업데이트 하시면, 기존과 같이 fluentbit을 사용하실 수 있습니다.
감사합니다.
'Container > Kubernetes' 카테고리의 다른 글
Kubernetes Ephemeral container 란? (0) | 2022.08.15 |
---|---|
Service account token Volume Projection이란? (0) | 2022.06.26 |
댓글