본문 바로가기
Infra/Kubernetes

[k8s] Kubernetes 로그 - PLG 구축

by The Future Engineer, Lucy 2024. 11. 4.
728x90
반응형

PLG를 선택한 이유

프로젝트 진행 중 EFK에서 slack으로 알림을 연동하기 위해서는 security 설정을 최고로 높여 체험판을 사용하거나 돈 내고 사용해야했다. 이 과정에서 security 설정에 어려움을 겪으며 마침 모니터링으로 prometheus와 grafana를 사용하였기 때문에 PLG로 변경하게 되었다.

Helm을 이용한 PLG 구축

앞서 작성한 EFK는 Fluent Bit만 Helm을 썼지만 PLG는 Promtail, Loki, Grafana 모두 helm으로 진행하겠다.

먼저 PLG를 구축할 namespace를 생성한다.

$ kubectl create namespace monitoring


grafana helm chart를 추가한다.

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo list
$ helm repo update

위 명령어를 입력하면 다음과 같이 나온다.

그럼 이제 repository를 살펴보겠다.

$ helm search repo grafana/grafana
$ helm search repo grafana/loki
$ helm search repo grafana/promtail

위 그림과 같이 다양한 차트가 있다. 이 중에서 grafana, loki, promtail을 사용하겠다. loki-stack도 있지만 더 이상 업데이트 되지 않으므로 loki를 사용하면 된다.

install 하기 전 values.yaml을 수정하기 위해 파일을 가져오겠다. 보통 install 시 파라미터로 --set, --set-string, --set-file를 사용하는 경우가 많지만 나는 아직 helm이 익숙하지 않기도 하고 파일을 자세히 보기 위해 가져올 것이다.

$ helm fetch grafana/promtail --untar
$ helm fetch grafana/loki --untar
$ helm fetch grafana/grafana --untar

뒤에 --untar를 붙이지 않으면 .tar로  다운된다.

그럼 promtail의 values.yaml 파일에서 일부분만 살펴보겠다.

promtail values.yaml의 daemonset

values.yaml을 보면 daemonset과 deployment가 있는데 기본적으로 daemonset.enabled : true로 되어있으므로 굳이 건드릴 필요가 없다. 여기서 Daemonset이 뭔지 모르겠다면 DaemonSet | Kubernetes를 참고하면 된다.

promtail values.yaml의 config

그리고 config에서 log를 어떻게 가져올건지 구성하면 된다. 우선 따로 수정하지 않고 진행하겠다.

다음은 loki의 values.yaml 파일을 살펴보겠다. loki에서는 몇몇 부분을 수정할 것이다.

loki values.yaml 의 deploymentMode

배치 모드는 Monolithic, SimpleScalable, Microservice가 있다. 기본적으로 SimpleScalable로 되어있다. 배치 모드는 구축하는 환경에 따라 배치모드를 선택하면 될 것 같다. SimpleScalable이나 Microservice의 경우 storage를 구성할 때 filesystem을 쓸 수 없으므로 Monolithic으로 바꿔주겠다. deploymentMode: SingleBinary로 적어주면 된다.

 

Loki deployment modes | Grafana Loki documentation

Open source Loki deployment modes Loki is a distributed system consisting of many microservices. It also has a unique build model where all of those microservices exist within the same binary. You can configure the behavior of the single binary with the -t

grafana.com

Loki 배포 모드에 대해서 자세히 알고 싶으시다면 위 링크를 참고하시면 됩니다.

loki values.yaml의 auth_enabled

auth_enabled 부분은 기본적으로 true로 되어있다. true 상태로 진행한다면 Multi-tenancy라고 하여 promtail에 tenants 헤더가 필요하다. 나는 우선 false로 해놓고 진행하겠다.

loki values.yaml의 storage

현재 AWS, GCP, Azure에 있는 cloud storage를 쓰고 있지 않으므로 type을 s3가 아닌 filesystem으로 바꿔준다.

마지막으로 grafana의 values.yaml을 수정하겠다.

grafana values.yaml의 persistence

persistence.enabled는 기본적으로 false로 되어있다. 이 경우 grafana는 컨테이너의 파일시스템 내에 모든 데이터를 저장하게 된다. 컨테이너가 정지,재시작하거나 충돌하는 경우 데이터가 유실될 수 있다. 그러므로 true로 바꾸겠다.

기본적으로 슈퍼 관리자 계정의 로그인 자격 증명은 secret을 통해 생성된다. 그러나 이는 쉽게 변경할 수 있다. 그러므로 adminPassword 부분에 주석을 해제하고 직접 설정해주겠다.

이제 다음 명령어를 이용하여 설치해주면 끝난다.

$ helm install promtail grafana/promtail -f promtail/values.yaml
$ helm install loki grafana/loki -f loki/values.yaml
$ helm install grafana grafana/grafana -f grafana/values.yaml

helm install 후 monitoring namespace의 pod

이렇게 pod가 뜨는 것을 확인할 수 있다. grafana의 ingress 부분을 따로 건드리지 않아 ingress가 뜨지 않았을 것이다. aws에서 하면 간단하게 ingress를 띄울 수 있겠지만 로컬 환경이라 nginx controller를 써야 한다. 우선 나는 port forward를 하여 grafana가 정상적으로 되는지 확인하였다. username 부분에 admin을 입력하고 설정한 password를 입력하면 접속할 수 있을 것이다.

프로젝트 당시에는 몰랐는데 정리하면서 자료를 찾아보니 생각보다 공식 사이트에 구성 방법이 잘 나와있는 것 같다. 다만 영어로 되어있어서 보기 꺼려질 뿐.. 이상으로 PLG 구축에 대한 정리를 마치겠다.

728x90
반응형