brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Apr 30. 2023

쿠버4탄-9. K8S- PLG스택 사용,로그수집

9/11

본 내용은 CloudNet 에서 진행하는 주말 스터디에 참여하여 해당 내용을 참고로 작성되었습니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  



목표

PLG Stack으로 로그를 보자

LOKI 로그 사용해보자.

그라파나에서 로그 확인해보자



<1> PLG Stack 소개 

<2> LOKI 설치

<3> Promtail 설치

<4> 그라파나에서 로그 확인

<5> 삭제

<6> 정리



<1> PLG Stack 소개 


1

Promtail + Loki + Grafana 여러 파드의 로그들을 중앙 서버에 저장하고 이를 조회




2

NGINX 웹서버 배포 ⇒ 위에서 이미 배포 했음



3

https://grafana.com/docs/loki/latest/



4

이미지 출처

https://www.infracloud.io/blogs/logging-in-kubernetes-efk-vs-plg-stack/



5

https://grafana.com/docs/loki/latest/fundamentals/architecture/




<2> LOKI 설치


1

책 설치 버전으로 진행

https://grafana.com/docs/loki/latest/installation/helm/install-monolithic/

https://artifacthub.io/packages/helm/grafana/promtail



2

# 모니터링

kubectl create ns loki

watch kubectl get pod,pvc,svc,ingress -n loki


Every 2.0s: kubectl get pod,pvc,svc,ingress -n loki                                                                                                                                      Sun Apr 30 15:37:17 2023

NAME         READY   STATUS    RESTARTS   AGE

pod/loki-0   0/1     Running   0          17s


NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE

persistentvolumeclaim/storage-loki-0   Bound    pvc-4ec5509c-39a4-4001-878d-b4cae03f4941   20Gi       RWO            kops-csi-1-21   17s


NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE

service/loki              ClusterIP   100.66.168.161   <none>        3100/TCP   17s

service/loki-headless     ClusterIP   None             <none>        3100/TCP   17s

service/loki-memberlist   ClusterIP   None             <none>        7946/TCP   17s



3

# Repo 추가

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


4

# 파라미터 설정 파일 생성

cat <<EOT > ~/loki-values.yaml

persistence:

  enabled: true

  size: 20Gi


serviceMonitor:

  enabled: true

EOT



5

# 배포

helm install loki grafana/loki --version 2.16.0 -f loki-values.yaml --namespace loki



6

# 설치 확인 : 데몬셋, 스테이트풀셋, PVC 확인

helm list -n loki

kubectl get pod,pvc,svc,ds,sts -n loki

kubectl get-all -n loki

kubectl get servicemonitor -n loki

kubectl krew install df-pv && kubectl df-pv



7

# curl 테스트 용 파드 생성

kubectl delete -f ~/pkos/2/netshoot-2pods.yaml

kubectl apply -f ~/pkos/2/netshoot-2pods.yaml



8

# 로키 gateway 접속 확인

kubectl exec -it pod-1 -- curl -s http://loki.loki.svc:3100/api/prom/label

(1분후)

{}



9

# (참고) 삭제 시

helm uninstall loki -n loki

kubectl delete pvc -n loki --all




<3> Promtail 설치



1

# 파라미터 설정 파일 생성

cat <<EOT > ~/promtail-values.yaml

serviceMonitor:

  enabled: true

config:

  serverPort: 3101

  clients:

    - url: http://loki-headless:3100/loki/api/v1/push

#defaultVolumes:

#  - name: pods

#    hostPath:

#      path: /var/log/pods

EOT



2

# 배포

helm install promtail grafana/promtail --version 6.0.0 -f promtail-values.yaml --namespace loki



# (참고) 파드 로그는 /var/log/pods에 저장

ssh -i ~/.ssh/id_rsa ubuntu@api.$KOPS_CLUSTER_NAME ls /var/log/pods



3

# 설치 확인 : 데몬셋, 스테이트풀셋, PVC 확인

helm list -n loki

kubectl get pod,pvc,svc,ds,sts,servicemonitor -n loki

kubectl get-all -n loki


Every 2.0s: kubectl get pod,pvc,svc,ingress -n loki                                                                                                                                      Sun Apr 30 15:40:39 2023

NAME                 READY   STATUS    RESTARTS   AGE

pod/loki-0           1/1     Running   0          3m39s

pod/promtail-2cm94   1/1     Running   0          37s

pod/promtail-75qsx   1/1     Running   0          37s

pod/promtail-86mt5   1/1     Running   0          37s


NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE

persistentvolumeclaim/storage-loki-0   Bound    pvc-4ec5509c-39a4-4001-878d-b4cae03f4941   20Gi       RWO            kops-csi-1-21   3m39s


NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE

service/loki               ClusterIP   100.66.168.161   <none>        3100/TCP   3m39s

service/loki-headless      ClusterIP   None             <none>        3100/TCP   3m39s

service/loki-memberlist    ClusterIP   None             <none>        7946/TCP   3m39s

service/promtail-metrics   ClusterIP   None             <none>        3101/TCP   37s



4

# (참고) 삭제 시

helm uninstall promtail -n loki




<4> 그라파나에서 로그 확인



  1

    그라파나 → Configuration → Data Source -> 데이터 소스 추가 ⇒ Loki 클릭  

HTTP URL : http://loki-headless.loki:3100 ⇒ Save & Test.





2

nginx 반복 접속


# 접속 주소 확인 및 접속

kubectl logs deploy/nginx -f



3

# 반복 접속

while true; do curl -s http://nginx2.$KOPS_CLUSTER_NAME -I | head -n 1; date; sleep 1; done



4

그라파나 → Explore  ->  상단 데이터 소스 Loki 선택


Logfilters : 

Job → default/nginx 값 선택 

우측 상단 Run query 클릭


nginx 컨테이너 로그가 나온다.




5

(선택)

Logfilters : 

node_name → 아무 노드 선택 ⇒ 우측 상단 Run query 클릭



6

로키 대시보드를 추가해보자~


로키를 소스로 변경하여 보자.

15141


Loki 로그 확인 대시보드 : 15141




7

(선택)

로키 최신버전으로 해서 사용해보자

https://hanhorang31.github.io/post/pkos2-4-logging/





<5> 삭제


1

헬름 차트 삭제


# nginx 삭제

helm uninstall nginx


# promtail 삭제

helm uninstall promtail -n loki


# loki 삭제

helm uninstall loki -n loki

kubectl delete pvc -n loki --all


# 프로메테우스 스택 삭제

helm uninstall -n monitoring kube-prometheus-stack



2

kOps 클러스터 삭제 & AWS CloudFormation 스택 삭제


kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops




<6> 정리


PLG Stack 사용해보자~

그라파나에서 로그 확인해보자




다음은 보안

https://brunch.co.kr/@topasvga/3221




아래는 모음 사이트


https://brunch.co.kr/@topasvga/3144


감사합니다.





브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari