﻿# Установка Loki

> [HTML Version](install-loki.html)

Loki — это открытая платформа для сбора, индексации и хранения логов. Позволяет проводить отладку и выявлять проблемы в системе на основе анализа и мониторинга данных логов.

Перед установкой Loki убедитесь, что настроены [средства мониторинга](install-monitoring-tools.md).

В статье рассмотрим:

- установку сервиса Loki с помощью чарта. Это универсальный вариант, который можно применить при любой используемой платформе Kubernetes;

- [настройку модуля Loki, встроенного в платформу Deckhouse](#loki-in-deckhouse).

Установка Loki состоит из пяти этапов:

1. [Загрузить Helm-чарт и конфигурационный файл](#download-helm-chart-and-config-file).

2. [Создать бакеты в minio](#create-bucket).

3. [Заполнить конфигурационный файл](#filling-out-configuration-file).

4. [Установить чарт Loki с помощью Helm в Kubernetes-кластер](#install-chart-loki).

5. [Настроить подключение Loki в источниках данных Grafana](#configure-connection).

````
Начало внимание

````
При установке Loki + [Tempo](install-tempo.md) начните с аддона Loki. Это позволит сохранить настройки перекрёстных ссылок, так как изначально прописываются настройки **Datasource**.

````
Конец внимание

## ````
Шаг 1. Загрузить Helm-чарт и конфигурационный файл

Для установки через интернет получите конфигурационный файла \[OBJECT\], выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm show values elma365/loki > values-loki.yaml

````
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет



1. На компьютере с доступом в интернет загрузите архив актуальной версии (latest) чарта **Loki** из репозитория ELMA365, выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm pull elma365/loki

2. ````
Полученный архив чарта **loki-X.Y.Z.tgz** скопируйте на сервер, где будет производиться установка.

3. Распакуйте чарт и скопируйте конфигурационный файл по умолчанию \[OBJECT\] в \[OBJECT\].

````
tar -xf loki-X.Y.Z.tgz  
cp loki/values.yaml values-loki.yaml
````

## ````
Шаг 2. Создать бакеты в MinIO

1. Создайте \[OBJECT\] для MinIO:

````
mc alias set my\_alias http://minio.local accessKey secretKey

````
2. Создайте бакеты с наименованиями **admins**, **chunks** и **rules**, выполнив команду:

````
mc mb -p my\_alias/admin --region=ru-central-1  
mc mb -p my\_alias/chunks --region=ru-central-1  
mc mb -p my\_alias/rules --region=ru-central-1

## ````
Шаг 3. Заполнить конфигурационный файл

Заполнение конфигурационного файла values-loki.yaml для установки Loki

````
  
loki:  
\# Режим развёртывания позволяет указать способ развёртывания Loki  
  deploymentMode: SimpleScalable  
\# Конфигурация для запуска Enterprise Loki  
  enterprise:  
    enabled: false  
\# Использовать шлюз GEL, если false, будет использоваться шлюз nginx по умолчанию  
    gelGateway: false  
\# Включение кеширование фрагментов на основе memcached  
  chunksCache:  
    enabled: false  
  loki:  
    # Включение аутентификации  
    auth\_enabled: false  
    # Конфигурация хранилища  
    storage:  
      bucketNames:  
        chunks: chunks  
        ruler: ruler  
        admin: admin  
      type: s3  
      s3:  
        s3: null  
        endpoint: minio.local:9000  
        region: ru-central-1  
        secretAccessKey: secretAccessKey  
        accessKeyId: accessKeyId  
        signatureVersion: null  
        s3ForcePathStyle: true  
        insecure: true  
        http\_config: \{\}  
    # Дополнительная конфигурация уплотнителя  
    compactor:  
      delete\_request\_store: s3  
      compaction\_interval: 10m  
      retention\_enabled: true  
      retention\_delete\_delay: 2h  
      retention\_delete\_worker\_count: 150  
      working\_directory: /var/loki/chunks  
    # Настройка схемы  
    schemaConfig:  
      configs:  
      - from: "2024-04-01"  
        index:  
          period: 24h  
          prefix: index\_  
        object\_store: s3  
        schema: v13  
        store: tsdb  
    useTestSchema: false  
    # Конфигурация лимитов  
    limits\_config:  
      retention\_period: 744h #default 744h  
      per\_stream\_rate\_limit: 512M  
      per\_stream\_rate\_limit\_burst: 1024M  
    commonConfig:  
      replication\_factor: 1  
  # Конфигурация модулей записи  
  write:  
    replicas: 1  
    autoscaling:  
      enabled: false  
      minReplicas: 2  
      maxReplicas: 6  
  # Конфигурация модулей чтения  
  read:  
    replicas: 1  
    autoscaling:  
      enabled: false  
      minReplicas: 2  
      maxReplicas: 6  
  # Конфигурация модулей бэкенда  
  backend:  
    replicas: 1  
    autoscaling:  
      enabled: false  
      minReplicas: 2  
      maxReplicas: 6  
  # Конфигурация модулей шлюза  
  gateway:  
    enabled: true  
    replicas: 1  
    verboseLogging: true  
    autoscaling:  
      enabled: false  
      minReplicas: 1  
      maxReplicas: 3  
  # Раздел для настройки дополнительного теста Helm  
  test:  
    enabled: false  
  # Канарейка Loki  
  lokiCanary:  
    enabled: false  
  
\# Настройка promtail  
promtail:  
  daemonset:  
    # Развёртывает Promtail как DaemonSet  
    enabled: true  
    autoscaling:  
      enabled: false  
  deployment:  
    # Развёртывает Promtail как Deployment  
    enabled: false  
    replicaCount: 1  
    autoscaling:  
      enabled: false  
      minReplicas: 1  
      maxReplicas: 10  
  # Конфигурация Promtail  
  config:  
    enabled: true  
    serverPort: 3101  
    clients:  
      - url: http://loki-gateway/loki/api/v1/push
````

````
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет

  
Для подключения к приватному **registry** нужно:

1. Скачать образы ELMA365 и загрузить их в локальный реестр образов. Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Задать адрес и путь для параметра \[OBJECT\].

3. Указать наименование секрета с правами доступа к приватному **registry** в параметре \[OBJECT\]. Секрет должен быть создан вручную и зашифрован в Base64.

````
loki:  
\# параметры подключения к приватному registry  
  global:  
    image:  
      registry: null  
  imagePullSecrets: \[\]    
  
promtail:  
\# параметры подключения к приватному registry  
  global:  
    imageRegistry: ""  
    imagePullSecrets: \[\]
````

## ````
Шаг 4. Установить чарт Loki с помощью Helm в Kubernetes-кластер

Выполните установку чарта **Loki** в \[OBJECT\].

Для установки через интернет:

````
helm upgrade --install -n monitoring loki elma365/loki -f values-loki.yaml

````
Для офлайн-установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:

````
helm upgrade --install loki ./loki -f values-loki.yaml -n monitoring

## ````
Шаг 5. Настроить подключение Loki в источниках данных Grafana

Источник Loki добавляется в Grafana автоматически при установке. Проверить его можно в меню администратора **Home > Administration > Data source** или **Home > Connections > Data sources**. 

Для добавления вручную в поле **URL** укажите значение **http://loki-gateway**.

**(install-loki-1.png)**

Пример просмотра лога приложения \[OBJECT\]: **(install-loki-2.png)**

## Настроить Loki в платформе Deckhouse

Если вы используете платформу Deckhouse, установить Loki можно двумя способами:

- загрузить чарт **Loki** в Kubernetes-кластер, использовав [описанную выше пошаговую инструкцию](#download-helm-chart-and-config-file);

- включить встроенный в Deckhouse модуль **Loki**. При его использовании вы сможете просматривать логи из всех подов кластера в программе Grafana.

Включение модуля **Loki** в платформе Deckhouse выполняется с помощью следующей команды:

````
kubectl apply -f - <<EOF  
\# Настраиваем сбор логов со всех подов  
apiVersion: deckhouse.io/v1alpha1  
kind: ClusterLoggingConfig  
metadata:  
  name: all-logs  
spec:  
  type: KubernetesPods  
  destinationRefs:  
  - d8-loki  
\---  
\# Включаем модуль Loki и настраиваем параметры хранения данных  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: loki  
spec:  
  settings:  
    storageClass: localpath-deckhouse-system  
    diskSizeGigabytes: 30  
    retentionPeriodHours: 168  
  enabled: true  
  version: 1  
\---  
\# Включаем модуль log-shipper  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: log-shipper  
spec:  
  version: 1  
  enabled: true  
EOF

````
После установки Loki вы можете настроить компонент Tempo, который собирает трейсы с данными о выполнении запросов. Для быстрой диагностики проблем в работе системы трейсы можно связать с логами, в которых фиксируются ошибки. Это позволит переходить из лога к деталям выполнения запроса. Подробнее о том, как подключить Tempo к встроенному модулю Loki читайте в статье [«Установка Tempo»](install-tempo.md). 