9/11
목표
PLG Stack으로 로그를 보자
LOKI 로그 사용해보자.
그라파나에서 로그 확인해보자
<1> PLG Stack 소개
<2> LOKI 설치
<3> Promtail 설치
<4> 그라파나에서 로그 확인
<5> 삭제
<6> 정리
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/
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
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
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/
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
PLG Stack 사용해보자~
그라파나에서 로그 확인해보자
다음은 보안
https://brunch.co.kr/@topasvga/3221
아래는 모음 사이트
https://brunch.co.kr/@topasvga/3144
감사합니다.