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 파일에서 일부분만 살펴보겠다.
values.yaml을 보면 daemonset과 deployment가 있는데 기본적으로 daemonset.enabled : true로 되어있으므로 굳이 건드릴 필요가 없다. 여기서 Daemonset이 뭔지 모르겠다면 DaemonSet | Kubernetes를 참고하면 된다.
그리고 config에서 log를 어떻게 가져올건지 구성하면 된다. 우선 따로 수정하지 않고 진행하겠다.
다음은 loki의 values.yaml 파일을 살펴보겠다. loki에서는 몇몇 부분을 수정할 것이다.
배치 모드는 Monolithic, SimpleScalable, Microservice가 있다. 기본적으로 SimpleScalable로 되어있다. 배치 모드는 구축하는 환경에 따라 배치모드를 선택하면 될 것 같다. SimpleScalable이나 Microservice의 경우 storage를 구성할 때 filesystem을 쓸 수 없으므로 Monolithic으로 바꿔주겠다. deploymentMode: SingleBinary로 적어주면 된다.
Loki 배포 모드에 대해서 자세히 알고 싶으시다면 위 링크를 참고하시면 됩니다.
auth_enabled 부분은 기본적으로 true로 되어있다. true 상태로 진행한다면 Multi-tenancy라고 하여 promtail에 tenants 헤더가 필요하다. 나는 우선 false로 해놓고 진행하겠다.
현재 AWS, GCP, Azure에 있는 cloud storage를 쓰고 있지 않으므로 type을 s3가 아닌 filesystem으로 바꿔준다.
마지막으로 grafana의 values.yaml을 수정하겠다.
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
이렇게 pod가 뜨는 것을 확인할 수 있다. grafana의 ingress 부분을 따로 건드리지 않아 ingress가 뜨지 않았을 것이다. aws에서 하면 간단하게 ingress를 띄울 수 있겠지만 로컬 환경이라 nginx controller를 써야 한다. 우선 나는 port forward를 하여 grafana가 정상적으로 되는지 확인하였다. username 부분에 admin을 입력하고 설정한 password를 입력하면 접속할 수 있을 것이다.
프로젝트 당시에는 몰랐는데 정리하면서 자료를 찾아보니 생각보다 공식 사이트에 구성 방법이 잘 나와있는 것 같다. 다만 영어로 되어있어서 보기 꺼려질 뿐.. 이상으로 PLG 구축에 대한 정리를 마치겠다.
'Infra > Kubernetes' 카테고리의 다른 글
[k8s] Kubernetes란? (1) | 2024.11.16 |
---|---|
[k8s] Kubernetes 로그 - PLG 개요 (0) | 2024.11.04 |
[k8s] kind로 Kubernetes 실습 환경 구성하기 (0) | 2024.10.21 |
[k8s] Kubernetes 로그 - EFK 구축 (1) | 2024.09.28 |
[k8s] Kubernetes 로그 - EFK 개요 (1) | 2024.09.28 |