인포그랩
home
회사 소개
home

Loki 구축하기

소개

Kubernetes 로깅은 쿠버네티스 클러스터와 여기에서 실행되는 애플리케이션에서 생성된 로그 데이터를 캡처하고 저장하는 프로세스를 말합니다. 이 데이터에는 애플리케이션 성능, 오류, 경고 및 기타 이벤트에 대한 정보가 포함됩니다. Kubernetes 로그는 분산 시스템의 디버깅 및 문제 해결에 매우 중요하며, 개발자, 운영자 및 보안 팀이 애플리케이션 상태를 모니터링하고 유지 관리하는 데 사용됩니다.
로깅은 컨테이너의 수명이 짧은 Kubernetes의 동적인 세계에서 애플리케이션 동작을 모니터링하기 위한 중요한 도구입니다. Kubernetes 로깅은 클러스터의 상태 및 보안 유지, 문제 진단, 성능 최적화, 규정 준수 보장 및 귀중한 운영 통찰력 확보에 필수적입니다. 이는 효과적인 Kubernetes 관리에서 중심적인 역할을 하며 강력한 모니터링 및 관찰 가능성 전략의 기본 구성 요소입니다. 금융, 의료 및 공공기관과 같이 규제가 심한 산업 분야의 기업은 애플리케이션 로그를 포함하여 시스템 활동에 대한 자세한 로그를 유지해야 합니다. 규정을 준수하지 않으면 법적 및 금전적 처벌을 받을 수 있으며 이는 기업의 평판에도 영향을 미칠 수 있습니다. ELK 스택은 로그를 수집, 저장, 검색 및 분석하는 데 사용되는 인기 있는 오픈 소스 도구 조합입니다. ELK는 Elasticsearch, Logstash 및 Kibana의 약자입니다. Logstash는 로그를 수집하고 필터링하는 데 사용되며 Elasticsearch는 로그를 저장하고 검색하는 데 사용됩니다. Kibana는 Elasticsearch에서 저장된 로그를 시각화하는 데 사용됩니다. Logstash 대신 Fluentd를 사용하면 EFK 스택이라고 합니다. Loki, Promtail 및 Grafana를 조합하면 이와 유사한 기능을 제공할 수 있습니다. 로그 데이터는 모든 애플리케이션, 호스트 시스템 및 자체 로그 스트림 집합을 생성하는 인프라 구성 요소로 인해 거대한 경우가 많습니다. 이로 인해 스토리지 비용이 빠르게 증가할 수 있습니다. Elasticsearch는 저장된 문서의 전체 내용을 인덱싱합니다. 데이터는 구조화되지 않은 JSON 객체로 디스크에 저장됩니다. Elasticsearch를 사용하면 문서를 완전히 검색할 수 있지만 더 많은 저장 공간이 필요합니다. 반면에 Loki는 로그의 메타데이터(레이블)만 인덱싱합니다. 인덱싱이 완료되면 로그 데이터가 압축되어 S3 및 MinIO와 같은 오브젝트 스토리지에 저장됩니다. 압축된 로그 데이터를 청크라고 합니다. 각 로그 스트림에 대해 일련의 레이블만 인덱싱되므로 생성되는 인덱스가 작습니다. 인덱스와 청크 모두 Loki 2.0의 오브젝트 저장소에 저장할 수 있습니다. 학습의 결과로 Loki와 Promtail를 Kubernetes 클러스터에 배포합니다. 이후 이를 이용하여 로그를 수집하고 검색하여 Kubernetes 클러스터를 모니터링 할 수 있습니다. 또한, Grafana Observability Stack의 일부인 로깅 기능을 담당하는 데 사용할 수 있습니다.

Loki란?

Loki는 Prometheus에서 영감을 받아 만들어진 수평 확장이 가능하며 가용성이 높은 다중 테넌트 로그 집계 시스템입니다. 로그 데이터 자체는 압축되어 오브젝트 스토리지나 파일 시스템에 저장됩니다. 이는 로그 내용을 인덱싱하지 않고 각 로그 스트림의 레이블 집합을 인덱싱하므로 비용 효율이 높으며 작동하기 쉽도록 설계되었습니다.
Promtail은 Loki를 위해 특별히 제작된 로그 수집기입니다. Prometheus와 동일한 서비스 디스커버리(Service Discovery)를 사용하며, Loki로 수집하기 전에 로그에 레이블을 지정하고, 변환하고 필터링하는 유사한 기능을 포함하고 있습니다.
Loki는 로그 텍스트를 인덱싱하지 않습니다. 대신, 항목이 스트림으로 그룹화되고 레이블로 인덱싱됩니다. 이렇게 하면 비용이 절감될 뿐만 아니라 로그 라인이 Loki에 수신된 후 몇 밀리초 내에 쿼리할 수 있습니다.
Loki의 강력한 쿼리 언어인 LogQL을 사용하여 로그를 탐색할 수 있습니다. Grafana UI에서 LogQL 쿼리를 직접 실행하여 다른 데이터 소스와 함께 로그를 시각화할 수 있습니다. 또한, 명령줄 환경에서 작업하는 것을 선호하면 LogCLI를 사용할 수도 있습니다.
들어오는 로그 데이터에 대해 Loki가 평가할 알림 규칙을 설정할 수 있습니다. 이를 통해 결과 알림을 Prometheus Alertmanager로 전송하여 적절한 팀에 전달할 수 있도록 Loki를 구성할 수 있습니다.

학습내용

Loki와 Promtail의 Helm 차트 리포지터리를 구성하는 방법
Loki와 Promtail의 Helm 차트 구성 정보를 배포 환경에 맞게 설정하는 방법
Helm 차트로 Loki와 Promtail을 배포하고 확인하는 방법
Loki와 Grafana를 연동하는 방법

아키텍처

사전 준비사항

기본 요건

Kubernetes에 대한 기본 개념
Helm, kubectl에 대한 기본 개념
Kubernetes 로깅에 대한 기본 개념

필요 항목

Loki와 Promtail을 배포할 Kubernetes 클러스터가 구축되어 있어야 합니다.
로그 데이터를 저장하는 오브젝트 스토리지로 사용할 MinIO가 구축되어 있어야 합니다.
Loki와 연동할 Grafana가 구축되어 있어야 합니다.