And Brain said,
CI/CD Argonautica - 1장/ Loki, Trickster 본문
CI/CD Argonautica
Docker, 선박
Kubernetes, 조타수 Harbor, 항구
Helm, 타륜
Istio, 돛
Jenkins, 선장
ArgoCD, 출항
1장/ Loki, Trickster
Troubleshooting
출항이 시작되고 배가 한참을 순항 중에, 저 멀리서 Loki가 나타났습니다. 그는 구름 속에서 독수리로 나와 연어로 변해 바닷속으로 들어갑니다. 그의 변화무쌍한 모습은 우리에게 분명 도움이 될 것 같습니다. 그를 우리 편으로 만들어 봅시다.
먼저, grafana를 helm chart에 추가해줍니다.
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
loki-stack을 설치하기 위해 아래 명령어를 통해, loki-stack yaml파일을 생성.
helm show values grafana/loki-stack > loki-stack-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: ""
promtail:
enabled: true
config:
logLevel: info
serverPort: 3101
clients:
- url: http://{{ .Release.Name }}:3100/loki/api/v1/push
grafana:
enabled: false
sidecar:
datasources:
label: ""
labelValue: ""
enabled: true
maxLines: 1000
image:
tag: 8.3.5
prometheus:
enabled: false
isDefault: false
url: http://{{ include "prometheus.fullname" .}}:{{ .Values.prometheus.server.service.servicePort }}{{ .Values.prometheus.server.prefixURL }}
datasource:
jsonData: "{}"
그 후, logging 네임스페이스에 Loki, Promtail, Grafana를 각각 설치해줍시다.
helm install loki-stack grafana/loki-stack --values loki-stack-values.yaml -n logging --create-namespace
helm install grafana grafana/grafana --namespace logging
기본적으로 grafana가 ClusterIP로 설치되기에, kubectl edit svc grafana -n logging 명령어를 통해 type을 LoadBalancer로 바꿔주어 외부 접속을 허용해주도록 합시다. (MetalLB가 우리 Chart에 있기 때문에 가능한 작업입니다.)
ports:
- name: service
port: 80
protocol: TCP
targetPort: 3000
selector:
app.kubernetes.io/instance: grafana
app.kubernetes.io/name: grafana
sessionAffinity: None
type: LoadBalancer
외부 IP 확인하셔서, 80 포트로 접속하시면 됩니다.
Grafana에 대한 추가적인 설명은 아래 링크로,
https://theworldaswillandidea.tistory.com/207
아래의 명령어를 통해 초기 관리자 비밀번호를 알 수 있습니다.
kubectl get secret --namespace logging grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
admin / 관리자 비번으로 접속 후,
Data sources 에 URL을 http://loki-stack:3100으로 연결시킵니다.(Kubernetes의 DNS 기능 덕에 그냥 저 그대로 적으시면 됩니다.)
여기까지 설정했다면, 놀라운 일이 벌어집니다. 우리는 추가적인 로깅 설정을 하지 않았음에도,
로그가 쌓이고 있는 것을 볼 수 있습니다.
어떻게 이 같은 일이 가능했을까요?
힌트는 여기서 얻을 수 있습니다. loki-stack-promtail 파드들을 보시면 모든 노드들에 하나씩 추가된 것을 확인하실 수 있습니다. promtail은 모든 노드들의 /var/log/pods 디렉토리 내의 로그를 알아서 수집합니다. 이 덕분에 즉시 Loki 에서 확인하실 수 있는 것입니다.
우리 MSA의 로그들을 바로 대시보드에서 확인하실 수 있습니다.
오늘은 간단한 로깅 시스템을 위해 Loki를 사용했지만, 이밖에도 Loki는 다양한 환경과 구성에서 유연하게 작동하며, 다양한 로그 소스를 수집하고 집계할 수 있습니다.
다음 시간은 2장/ Prometheus, Etrernal Flame 입니다.
Thanks for watching, Have a nice day.
'IT > CICD Argonautica' 카테고리의 다른 글
CI/CD Argonautica - ArgoCD, 출항 (0) | 2023.09.26 |
---|---|
CI/CD Argonautica - Jenkins, 선장 (0) | 2023.09.19 |
CI/CD Argonautica - Troubleshooting (0) | 2023.09.14 |
CI/CD Argonautica - Istio, 돛 (0) | 2023.09.14 |
CI/CD Argonautica - Helm, 타륜 (0) | 2023.09.12 |