Theory
인프라
Loki 공식 문서 번역
setup
마이크로서비스 Loki 설치

마이크로서비스 Helm 차트 설치

이 Helm 차트는 쿠버네티스에 Grafana Loki를 배포합니다.

이 Helm 차트는 쿠버네티스 클러스터 내에서 마이크로서비스 모드로 Loki를 실행하도록 Loki를 배포합니다. 마이크로서비스 배포 모드는 Loki의 구성 요소를 별개의 프로세스로 실행합니다.

기본 Helm 차트는 다음 구성 요소를 배포합니다:

  • 압축기 구성 요소 (1 복제본): 저장된 데이터를 압축하고 처리합니다.
  • 배포자 구성 요소 (3 복제본, maxUnavailable: 2): 들어오는 요청을 배포합니다. 업데이트 중에는 최대 2개의 복제본을 사용할 수 없습니다.
  • 인덱스 게이트웨이 구성 요소 (2 복제본, maxUnavailable: 1): 인덱싱을 처리합니다. 업데이트 중에는 최대 1개의 복제본을 사용할 수 없습니다.
  • 수집기 구성 요소 (3 복제본): 데이터 수집을 처리합니다.
  • 쿼리어 구성 요소 (3 복제본, maxUnavailable: 2): 쿼리를 처리합니다. 업데이트 중에는 최대 2개의 복제본을 사용할 수 없습니다.
  • 쿼리 프론트엔드 구성 요소 (2 복제본, maxUnavailable: 1): 프론트엔드 쿼리를 관리합니다. 업데이트 중에는 최대 1개의 복제본을 사용할 수 없습니다.
  • 쿼리 스케줄러 구성 요소 (2 복제본): 쿼리를 예약합니다.

파일 시스템 스토리지를 사용하여 마이크로서비스 모드로 실행하는 것은 권장하지 않습니다. 이 가이드의 목적상, 완전한 예제를 제공하기 위해 MinIO를 객체 스토리지로 사용합니다.

전제 조건

개발 및 테스트용 Helm 차트 배포

  1. Helm에 Grafana의 차트 저장소 (opens in a new tab)를 추가합니다:

    helm repo add grafana https://grafana.github.io/helm-charts
  2. 차트 저장소를 업데이트합니다:

    helm repo update
  3. 구성 파일 values.yaml을 만듭니다. 아래 예제는 MinIO를 스토리지로 사용하여 테스트 모드로 Loki를 배포하는 방법을 보여줍니다:

    loki:
      schemaConfig:
        configs:
        - from: "2024-04-01"
          store: tsdb
          object_store: s3
          schema: v13
          index:
            prefix: loki_index_
            period: 24h
      ingester:
        chunk_encoding: snappy
      querier:
        # 기본값은 4이며, 충분한 메모리와 CPU가 있는 경우 늘릴 수 있고, OOM 발생 시 줄일 수 있습니다.
        max_concurrent: 4
      pattern_ingester:
        enabled: true
      limits_config:
        allow_structured_metadata: true
      volume_enabled: true
    deploymentMode: Distributed
    ingester:
      replicas: 3
      # 복제를 통한 데이터 내구성을 보장하기 위해
      zoneAwareReplication:
        enabled: false
    querier:
      replicas: 3
      # 병렬 처리를 통해 쿼리 성능 향상
      maxUnavailable: 2
    queryFrontend:
      replicas: 2
      maxUnavailable: 1
    queryScheduler:
      replicas: 2
    distributor:
      replicas: 3
      maxUnavailable: 2
    compactor:
      replicas: 1
    indexGateway:
      replicas: 2
      maxUnavailable: 1
    bloomPlanner:
      replicas: 0
    bloomBuilder:
      replicas: 0
    bloomGateway:
      replicas: 0
    backend:
      replicas: 0
    read:
      replicas: 0
    write:
      replicas: 0
    singleBinary:
      replicas: 0
    # Loki 게이트웨이를 노출하여 외부에서 쓰기 및 쿼리 가능하도록 함
    gateway:
      service:
        type: LoadBalancer
    # 스토리지용 minio 활성화
    minio:
      enabled: true
  4. Loki 배포를 설치하거나 업그레이드합니다.

    • 설치:
      helm install --values values.yaml loki grafana/loki
    • 업그레이드:
      helm upgrade --values values.yaml loki grafana/loki
  5. Loki가 실행 중인지 확인합니다:

    kubectl get pods -n loki

    출력은 다음과 유사해야 합니다:

    loki-canary-8thrx                   1/1     Running   0          167m
    loki-canary-h965l                   1/1     Running   0          167m
    loki-canary-th8kb                   1/1     Running   0          167m
    loki-chunks-cache-0                 2/2     Running   0          167m
    loki-compactor-0                    1/1     Running   0          167m
    loki-compactor-1                    1/1     Running   0          167m
    loki-distributor-7c9bb8f4dd-bcwc5   1/1     Running   0          167m
    loki-distributor-7c9bb8f4dd-jh9h8   1/1     Running   0          167m
    loki-distributor-7c9bb8f4dd-np5dw   1/1     Running   0          167m
    loki-gateway-77bc447887-qgc56        1/1     Running   0          167m
    loki-index-gateway-0                1/1     Running   0          167m
    loki-index-gateway-1                1/1     Running   0          166m
    loki-ingester-zone-a-0              1/1     Running   0          167m
    loki-ingester-zone-b-0              1/1     Running   0          167m
    loki-ingester-zone-c-0              1/1     Running   0          167m
    loki-minio-0                        1/1     Running   0          167m
    loki-querier-bb8695c6d-bv9x2        1/1     Running   0          167m
    loki-querier-bb8695c6d-bz2rw        1/1     Running   0          167m
    loki-querier-bb8695c6d-z9qf8        1/1     Running   0          167m
    loki-query-frontend-6659566b49-528j5  1/1     Running   0          167m
    loki-query-frontend-6659566b49-84jtx  1/1     Running   0          167m
    loki-query-frontend-6659566b49-9wfr7  1/1     Running   0          167m
    loki-query-scheduler-f6dc4b949-fknfk  1/1     Running   0          167m
    loki-query-scheduler-f6dc4b949-h4nwh  1/1     Running   0          167m
    loki-query-scheduler-f6dc4b949-scfwp  1/1     Running   0          167m
    loki-results-cache-0                2/2     Running   0          167m

객체 스토리지 구성

MinIO (opens in a new tab)로 Loki를 테스트한 후, 객체 스토리지 공급자로 Loki를 구성하는 것이 좋습니다. 다음 예제는 다양한 객체 스토리지 공급자로 Loki를 구성하는 방법을 보여줍니다:

⚠️

S3 스토리지를 사용하여 Loki를 배포할 때 경고: 기본 버킷 이름인 chunk, ruleradmin을 사용하지 마십시오. 각 버킷에 대해 고유한 이름을 선택하십시오. 자세한 내용은 다음 보안 업데이트 (opens in a new tab)를 참조하십시오. 이 경고는 MinIO를 사용할 때는 적용되지 않습니다. MinIO를 사용할 때는 기본 버킷 이름을 사용하는 것이 좋습니다.

S3

다른 스토리지 공급자를 구성하려면 Helm 차트 참조를 참조하십시오.

프로덕션 환경에 Loki Helm 차트 배포

우리는 프로덕션 환경에 Loki를 배포하기 위한 더 많은 가이드를 제공하기 위해 적극적으로 노력하고 있습니다.

AWS, Azure 또는 GCP와 같은 클라우드 환경 내에서 대규모로 Loki를 실행하는 것이 좋습니다. 아래 가이드는 최소한의 실행 가능한 프로덕션 환경을 배포하는 방법을 보여줍니다.

다음 단계

원본: https://grafana.com/docs/loki/latest/setup/install/helm/install-microservices/ (opens in a new tab)