kubectl get logs
명령이 있을 것이다. 하지만 하나의 pod에 대해서 해당 명령을 쳐서 log를 확인하는 작업도 번거로운데 pod가 많아지면 상당히 귀찮고 불가능한 작업이 된다.helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
grafana/loki-stack
차트에 대한 values.yaml
파일을 override-values.yaml
이름으로 저장 후 필요한 서비스들만 남기고 지워준다.persistence
항목을 추가해준다.helm show values grafana/loki-stack > ./override-values.yaml
override-values.yaml
loki:
enabled: true
isDefault: true
url: http://{{(include "loki.serviceName" .)}}:{{ .Values.loki.service.port }}
readinessProbe:
httpGet:
path: /ready
port: http-metrics
initialDelaySeconds: 45
livenessProbe:
httpGet:
path: /ready
port: http-metrics
initialDelaySeconds: 45
datasource:
jsonData: "{}"
uid: ""
persistence:
enabled: true
storageClassName: nfs-client
size: 5Gi
promtail:
enabled: true
config:
logLevel: info
serverPort: 3101
clients:
- url: http://{{ .Release.Name }}:3100/loki/api/v1/push
grafana:
enabled: true
sidecar:
datasources:
label: ""
labelValue: ""
enabled: true
maxLines: 1000
image:
tag: 10.3.3
override-values.yaml
파일의 내용이 참조될 수 있도록 해준다. (dataops
라는 namespace에 설치하였다.)helm install loki-stack grafana/loki-stack --values override-values.yaml -n dataops
NAME: loki-stack
LAST DEPLOYED: Thu May 9 09:00:51 2024
NAMESPACE: dataops
STATUS: deployed
REVISION: 1
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See http://docs.grafana.org/features/datasources/loki/ for more detail.
Running
상태가 되며 설치가 잘 된 것을 확인할 수 있다.kubectl get all -n dataops
NAME READY STATUS RESTARTS AGE
pod/loki-stack-0 1/1 Running 0 2m59s
pod/loki-stack-grafana-5fb9bb986f-xj8vj 2/2 Running 0 2m59s
pod/loki-stack-promtail-7l6nv 1/1 Running 0 2m59s
pod/loki-stack-promtail-hddjq 1/1 Running 0 2m59s
pod/loki-stack-promtail-tvgph 1/1 Running 0 2m59s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/loki-stack ClusterIP 198.19.210.169 <none> 3100/TCP 2m59s
service/loki-stack-grafana ClusterIP 198.19.170.17 <none> 80/TCP 2m59s
service/loki-stack-headless ClusterIP None <none> 3100/TCP 2m59s
service/loki-stack-memberlist ClusterIP None <none> 7946/TCP 2m59s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/loki-stack-promtail 3 3 3 3 3 <none> 2m59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/loki-stack-grafana 1/1 1 1 2m59s
NAME DESIRED CURRENT READY AGE
replicaset.apps/loki-stack-grafana-5fb9bb986f 1 1 1 2m59s
NAME READY AGE
statefulset.apps/loki-stack 1/1 2m59s
nfs-subdir-external-provisioner
가 설치되어 있어야 Default로 연결된 NAS Volume에 PV가 생성이 되는데 해당 내용은 이 글에서는 따로 설명하지 않고 자세한 내용은>>>NAS 볼륨 관련 글<<< 이 글에서 확인해볼 수 있다.kubectl get pv,pvc -n dataops
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-3a495763-b43b-4d3c-b341-a4484dc35b96 5Gi RWO Delete Bound dataops/storage-loki-stack-0 nfs-client 87s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/storage-loki-stack-0 Bound pvc-3a495763-b43b-4d3c-b341-a4484dc35b96 5Gi RWO nfs-client 87s
loki-stack
helm chart 관련 리소스가 모두 생성이 되고 Service를 확인해보면 디폴트 타입인 ClusterIP
로 되어있는 것을 확인할 수 있다. 따라서 Loki 대시보드에 대한 외부 접속을 위해 서비스 리소스에 대해 ClusterIP를 NodePort로 수정하는 작업이 필요하다.kubectl edit svc loki-stack-grafana -n dataops
alb-ingress-controller
가 클러스터에 설치되어 있어야 하는데 설치부터 Ingress를 통한 ALB 생성의 자세한 과정은 >>>도메인 구매부터 쿠버네티스 웹서버 배포, SSL 인증서 적용까지 전체적인 내용 정리<<< 이 글에서 확인이 가능하다.loki-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: loki-ingress
namespace: dataops
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
alb.ingress.kubernetes.io/load-balancer-name: 'ai-prd-nks-alb-loki'
alb.ingress.kubernetes.io/ssl-certificate-no: "11111"
alb.ingress.kubernetes.io/ssl-redirect: "443"
alb.ingress.kubernetes.io/enable-sticky-session: "true"
spec:
ingressClassName: alb
defaultBackend:
service:
name: loki-stack-grafana
port:
number: 80
alb-ingress-controller
가 해당 내용을 감지하여 쿠버네티스가 배포된 클라우드 환경(AWS, AZURE, NCLOUD 등등)에 ALB를 자동으로 생성해준다. 해당 ALB의 URL로 접속하면 아직 SSL 적용이 안된 Grafana UI를 볼 수 있다.loki-stack-grafana
라는 이름의 secret 리소스도 함께 생성이 되는데 관리자 로그인 ID와 비밀번호가 담겨있다.kubectl get secret -n dataops
NAME TYPE DATA AGE
loki-stack Opaque 1 9m26s
loki-stack-grafana Opaque 3 9m26s
loki-stack-promtail Opaque 1 9m26s
sh.helm.release.v1.loki-stack.v1 helm.sh/release.v1 1 9m26s
loki-stack-grafana
secret 리소스를 YAML 형식으로 열게되면 BASE64로 인코딩된 관리자 ID와 비밀번호를 확인할 수 있다.kubectl get secret loki-stack-grafana -n dataops -o yaml
echo YWRtaW4= | base64 -d
echo VmVCV2JOb3FrQVdkRHASDF86D8G568SkWkxnNm9iUw== | base64 -d
최초에 배포할때 간혹 이 이슈가 발생하네요. 저도 최초에 설치했을 때는 해당 이슈가 뜨지 않았는데, helm uninstall 하고 다시 설치할 때 해당 이슈가 뜨네요.
https://github.com/grafana/loki/issues/1153
https://github.com/grafana/loki/issues/3346