Fluent-Bit 을 k8s DaemonSet 으로 실행할 경우 서버 내의 journal 폴더가 /var/log/journal 로 되어있을 경우
마운트 설정이 필요없지만, 아닐 경우 DaemonSet 에 마운트해야한다.
journal이 위치한 경로를 찾아 설정한다.
DaemonSet 수정
kubectl edit ds -n fluent-bit -n fluent
...
spec:
containers:
- args:
-
...
command:
...
volumeMounts:
- mountPath: /run/log/journal ## 추가
name: systemd-log ## 추가
readOnly: true ## 추가
dnsPolicy:
restartPolicy:
...
toleration:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
volumes:
- hostPath: ## 추가
path: /run/log/journal ## 추가
name: systemd-log ## 추가
수정 후 ConfigMap 수정
kubectl edit cm fluent-bit -n fluent
[INPUT]
Name systemd
Path /run/log/journal
Tag systemd.*
Systemd_Filter _SYSTEM_UNIT=kubelet.service
Systemd_Filter _SYSTEM_UNIT=containerd.service
Read_From_tail On
## 아래는 없어도 됨
[FILTER]
Name record_modifier
Match systemd.*
Record kubernetes systemd
$ helm install opensearch-dashboards opensearch-dashboards-2.24.1.tgz --create-namespace --namespace logging
# 실행 후 확인
$ kubectl get pods -n logging
NAME READY STATUS RESTARTS AGE
opensearch-dashboards-649d556895-r4vwn 1/1 Running 0 2m13s
Host는 oepnsearch가 statefulset으로 동작하므로 opensearch service의 headless service로 연결한다.
$ kubectl edit cm fluent-bit
# [OUTPUT] 에 stdout이 있으면 해당 부분 제거 후 아래 부분 추가
[OUTPUT]
Name opensearch
Match kube.*
Host opensearch-cluster-master-headless.logging
Port 9200
tls On
tls.verify Off
HTTP_User admin
HTTP_Passwd wkyKr!2024
Retry_Limit False
Suppress_Type_Name On
fluent-bit 의 config map hot reload 를 설정하지 않았으므로, fluent-bit pod를 전체 재기동한다.
11. 연동 후 OpenSearch에서 확인을 위해 서비스를 통한 로깅 테스트 후 Fluent-Bit 확인
$ kubectl apply -f k8s.yaml
deployment.apps/stdout-node created
service/stdout-node-service created
ingress.networking.k8s.io/stdout-node-ingress created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
stdout-node-6f945d7989-6xjp2 1/1 Running 0 20s
3. fluent-bit install
$ helm repo add fluent https://fluent.github.io/helm-charts
$ helm upgrade --install fluent-bit fluent/fluent-bit
# namespace 를 주지않으면 default namespace에 생성된다
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
fluent-bit-67blm 0/1 ContainerCreating 0 5s
fluent-bit-vvt7c 0/1 ContainerCreating 0 5s
4. 현재 elasticsearch 나 opensearch 를 설치하지 않았으므로 stdout테스트를 진행한다. (테스트 후 opensearch 설치 예정)
기존에 있던 OUTPUT인 elasticsearch를 삭제하고 [OUTPUT]으로 stdout 을 추가한다.
(해당 Name의 경우 이름이 정해져있으며, 이름마다 사용할 수 있는 변수?가 다르다. 공식 가이드에서 확인 가능하다.)
$ kubectl edit cm fluent-bit
기존에 있던 elasticsearch OUTPUT 삭제
[OUTPUT]
Name es
Match host.*
Host elasticsearch-master
Logstash_Format On
Logstash_Prefix node
Retry_Limit False
아래 stdout OUTPUT 추가
[OUTPUT]
Name stdout
Match kube.*
# config map 수정 후 fluent-bit pod 삭제를 통해 재기동한다.
$ kubectl delete pods fluent-bit-67blm fluent-bit-vvt7c
pod "fluent-bit-67blm" deleted
pod "fluent-bit-vvt7c" deleted
5. 1번에서 설치한 테스트 pod 위치를 확인 후 같은 위치의 fluent-bit pod 의 로그를 f option을 통해 확인한다.