And Brain said,

CI/CD Argonautica - 1장/ Loki, Trickster 본문

IT/CICD Argonautica

CI/CD Argonautica - 1장/ Loki, Trickster

The Man 2023. 10. 4. 10:50
반응형

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

 

Grafana, 밝게 빛나는 인프라의 밤

오늘은 인프라 전반에 걸쳐 모니터링 및 분석을 위한 시각화 도구인 Grafana를 소개해보겠습니다. 그럼 우리 같이 칠흑같던 인프라를 빛내볼까요? https://grafana.com/docs/grafana/latest/setup-grafana/installati

theworldaswillandidea.tistory.com

 

 

아래의 명령어를 통해 초기 관리자 비밀번호를 알 수 있습니다.

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
Comments