-
환경: NCP
구성: NKS 2Node
NCP의 SES(Search engine Service)를 사용해서 Fluent bit를 구축할 것이다.
우선 알아야할 것은, Fluent bit는 Log를 수집하고 보낸주는 역할을 하고, SES로 구축하는 Opensearch 는 Log를 받아 시각화 해주는 역할을 한다는 것이다.
자주 이야기하는 Eliastic의 ELK스택과 유사하다 생각하면 편하다.
애초에 Opensearch가 Elastic의 라이센스 변경에 대한 반발로 Fork질 해서 나온것이니.....
이름을 붙이자면 OFO정도지 않을까?(Opensearch, Fluent bit, Opensearch-dashboard)......
아무튼 구성도는 이러하다.
각 Worker Node마다 Daemonset(Node마다 Pod를 하나씩 생성)형식으로 Pod를 배포한다.
해당 Pod의 Image는 Fluent bit이며, 해당 항목을 통해 Container의 Log를 수집할 것이다.
수집한 로그는 Opensearch로 보낼 것이고, 해당 Log를 Opensearch-dashboard를 통해 볼 수 있을 것이다.
우선 NCP환경이기에 Kubernetes또한 NKS를 사용할 것이고,
Opnesearch또한 Search engine Service를 사용할 것이다.
직접 VM으로 구축하는 것과 완전관리형으로 제공받는 것, 무엇이 좋냐고 물어본다면...... 솔직하게는 직접 구축이 좋은 것 같다는 생각이 든다. 버전의 선택이나, 더 넓은 configure 범위, 비용적인 문제....
하지만 CSAP나 보안인증등을 받을 생각이 있다면 NCP측에서 사전에 보안인증을 마친 완전관리형을 사용 하는 것이 훨씬 유리할 것이다.
잡소리가 길었는데 이쯤에서 본론으로 들어가겠다.
0.우선 NKS를 설치하고 Bastion Server에서 해당 Kubernetes Cluster와 연동한다.
자세한 사항은 아래의 링크를 따라하면 된다.
https://guide.ncloud-docs.com/docs/ko/k8s-k8soverview
준비가 되었다면 이제 본격적으로 yaml파일을 생성한다.
순서는
1. ServiceAccount
2. ConfigMap
3. Daemonset
순으로 작성할 것이다.
apiVersion: v1 kind: ServiceAccount metadata: name: fluentbitds namespace: logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentbit rules: - apiGroups: [""] resources: - namespaces - pods - nodes - nodes/proxy verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: fluentbit roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluentbit subjects: - kind: ServiceAccount name: fluentbitds namespace: logging
apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: logging labels: k8s-app: fluent-bit data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File /fluent-bit/etc/parsers.conf @INCLUDE input-kubernetes.conf @INCLUDE filter-kubernetes.conf @INCLUDE output-opensearch.conf @INCLUDE input-nodeexporter.conf @INCLUDE output-nodeexporter.conf input-kubernetes.conf: | [INPUT] Name tail Path /var/log/containers/*.log Tag kube.* Parser cri Mem_Buf_Limit 0 Skip_Long_Lines On filter-kubernetes.conf: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 output-opensearch.conf: | [OUTPUT] Name opensearch Match * Host SES IP Port 9200 HTTP_User name HTTP_Passwd pw tls On tls.verify Off Index nks-%Y.%m.%d parsers.conf: | [PARSER] # http://rubular.com/r/tjUt3Awgg4 Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentbit namespace: logging labels: app.kubernetes.io/name: fluentbit spec: selector: matchLabels: name: fluentbit template: metadata: labels: name: fluentbit spec: serviceAccountName: fluentbitds containers: - name: fluent-bit imagePullPolicy: Always image: fluent/fluent-bit:latest ports: - containerPort: 9090 volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: fluent-bit-config mountPath: /fluent-bit/etc/ volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: fluent-bit-config configMap: name: fluent-bit-config
이렇게 생성하면 fluent bit pod가 생성되었을 것이다.
SES로 생성한 대시보드를 보고 싶다면, 해당 Manager Node에 대하여 LB(Load Balancer)를 생성하여 접속할 수 있다.
TCP 80번에 타겟그룹은 자동으로 생성된 xxx-ses-m-xxxx 를 선택하여 타겟그룹을 생성한 후에,
해당 타겟그룹을 사용하는 LB를 생성하면 된다.
해당하는 작업을 마쳤다면 LB를 통해 opensearch로 접근한다.
최초 ses를 생성할때 id/pw를 입력했을 텐데, 해당하는 id/pw가 opensearch 웹페이지의 계정이다.
ses로 접속했다면 좌측의 줄무늬 3개를 클릭하여 메뉴를 열고, index를 생성한 후에 discover를 클릭하면 log를 볼 수 있다.
'클라우드 > fluent bit' 카테고리의 다른 글
댓글