Theory
인프라
Loki 공식 문서 번역
setup
Tanka를 사용하여 설치

Tanka

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

💡

Grafana Cloud를 사용하면 자체 Grafana Loki 인스턴스를 설치, 유지 관리 및 확장할 필요가 없습니다. 무료 계정을 만들어 시작 (opens in a new tab)하세요. 여기에는 10k 메트릭, 50GB 로그, 50GB 추적, 500VUh k6 테스트 등에 대한 영구 무료 액세스가 포함됩니다.

Tanka (opens in a new tab)는 Ksonnet이 더 이상 사용되지 않게 된 후 Grafana Labs에서 만든 Ksonnet (opens in a new tab)의 재구현입니다. Tanka는 Grafana Labs에서 프로덕션 환경에서 Grafana Loki를 실행하는 데 사용됩니다.

Tanka 설치는 마이크로서비스 모드로 Loki 클러스터를 실행합니다.

전제 조건

tk env 명령을 사용하려면 최신 버전의 Tanka(버전 v0.31.0 이상)를 설치하세요. Tanka용 미리 빌드된 바이너리는 Tanka 릴리스 URL (opens in a new tab)에서 찾을 수 있습니다.

구성 리포지토리에서 Tanka 애플리케이션이 없는 경우 폴더를 만들고 그 안에서 tk init를 호출합니다. 그런 다음 Loki용 환경을 만들고 배포할 쿠버네티스 API 서버의 URL(예: https://localhost:6443)을 제공합니다.

mkdir <application name>
cd <application name>
tk init
tk env add environments/loki --namespace=loki --server=<Kubernetes API server>

jsonnet-bundler(jb)를 설치하고, Tanka의 설치 문서 (opens in a new tab)에서 플랫폼에 맞는 지침을 찾으세요.

배포

jb(버전 v0.6.0 이상)를 사용하여 Loki 및 Promtail 모듈을 다운로드하고 설치합니다.

jb init # `tk init`를 이미 실행한 경우에는 필요하지 않습니다.
jb install github.com/grafana/loki/production/ksonnet/loki@main
jb install github.com/grafana/loki/production/ksonnet/promtail@main

environments/loki/main.jsonnet의 YAML 내용을 수정하여 다음 변수를 업데이트합니다.

  • username, password 및 관련 htpasswd 변수 값을 업데이트합니다.
  • 객체 저장소 유형에 따라 S3 또는 GCS 변수 값을 업데이트합니다. 자세한 구성 내용은 storage_config를 참조하세요.
  • 설정에 포함되지 않은 S3 또는 GCS 객체 저장소 변수를 구성에서 제거합니다.
  • Promtail 구성 container_root_path 변수의 값을 Docker 데몬의 루트 경로를 반영하도록 업데이트합니다. docker info | grep "Root Dir"를 실행하여 루트 경로를 확인합니다.
  • Loki schema_config 섹션의 from 값을 현재 날짜보다 14일 이전으로 설정합니다. from 날짜는 schema_config 섹션이 유효한 첫날을 나타냅니다. 예를 들어 오늘이 2021-01-15이면 from2021-01-01로 설정합니다. 이 권장 사항은 Loki가 기본적으로 최대 14일 전의 로그 라인을 허용하는 것을 기반으로 합니다. reject_old_samples_max_age 구성 변수는 허용 범위를 제어합니다.
environments/loki/main.jsonnet
local gateway = import 'loki/gateway.libsonnet';
local loki = import 'loki/loki.libsonnet';
local promtail = import 'promtail/promtail.libsonnet';
 
loki + promtail + gateway {
  _config+:: {
    namespace: 'loki',
    htpasswd_contents: 'loki:$apr1$H4yGiGNg$ssl5/NymaGFRUvxIV1Nyr.',
 
    // S3 variables -- Remove if not using s3
    storage_backend: 's3,dynamodb',
    s3_access_key: 'key',
    s3_secret_access_key: 'secret access key',
    s3_address: 'url',
    s3_bucket_name: 'loki-test',
    dynamodb_region: 'region',
 
    // GCS variables -- Remove if not using gcs
    storage_backend: 'bigtable,gcs',
    bigtable_instance: 'instance',
    bigtable_project: 'project',
    gcs_bucket_name: 'bucket',
 
    //Update the object_store and from fields
    loki+: {
      schema_config: {
        configs: [
          {
            from: 'YYYY-MM-DD',
            store: 'boltdb-shipper',
            object_store: 'my-object-storage-backend-type',
            schema: 'v11',
            index: {
              prefix: '%s_index_' % $._config.table_prefix,
              period: '%dh' % $._config.index_period_hours,
            },
          },
        ],
      },
    },
 
    //Update the container_root_path if necessary
    promtail_config+: {
      clients: [
        {
          scheme:: 'http',
          hostname:: 'gateway.%(namespace)s.svc' % $._config,
          username:: 'loki',
          password:: 'password',
          container_root_path:: '/var/lib/docker',
        },
      ],
    },
    replication_factor: 3,
    consul_replicas: 1,
  },
}

tk show environments/loki를 실행하여 클러스터에 배포될 매니페스트를 확인합니다. tk apply environments/loki를 실행하여 매니페스트를 배포합니다. 클러스터에서 환경을 삭제하려면 tk delete environments/loki를 실행합니다.