---
title: "Аддон Grafana Loki для Kubernetes"
description: "Аддон Grafana Loki для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Grafana Loki — это система сбора и просмотра логов, созданная командой Grafana Labs. Она используется совместно с Grafana для удобной визуализации логов.

В отличие от ELK-стека, Loki не индексирует содержимое логов, а хранит их вместе с метаданными (например, имя пода или namespace). Это делает систему более быстрой и менее требовательной к ресурсам.

Чаще всего Loki используется в связке с Promtail — агентом, который собирает логи с нод и отправляет их в Loki. Затем вы можете просматривать эти логи прямо в Grafana с помощью запросов на языке LogQL.

## Установка

Для установки перейдите в раздел «Дополнения» в панели управления кластера. 

![Scr 20250702 Nwug](https://content.timeweb.com/assets/ccd7c712-1040-4d91-b94e-95d32dec837e.png?width=2042&height=1602)

После выбора дополнения «Grafana Loki» в панели управления вы увидите YAML-конфигурацию с параметрами по умолчанию. 

![Scr 20250702 Nwyg](https://content.timeweb.com/assets/28cd4ab4-139a-449f-8e49-277608ba827c.png?width=2052&height=1612)

Кратко опишем, за что отвечает каждый блок.

```yaml
test_pod:
  enabled: true
  image: bats/bats:1.8.2
```

Запускает тестовый под с утилитой `bats`, которая проверяет, что Loki доступен и принимает логи. Используется только для автоматической валидации после установки.

```yaml
loki:
  enabled: true
  isDefault: true
```

Основной компонент — Loki, который принимает и хранит логи.  
Здесь можно настроить:

-   `url` — внутренний адрес сервиса Loki (используется другими компонентами).
    
-   `readinessProbe` и `livenessProbe` — проверки состояния сервиса.
    
-   `datasource` — настройки подключения к Loki как к источнику данных в Grafana.
    

Если вы используете Grafana, `datasource.uid` может быть задан для явного подключения источника.

```yaml
promtail:
  enabled: true
  config:
    clients:
      - url: http://<release-name>:3100/loki/api/v1/push
```

Promtail — агент, который собирает логи с узлов кластера (из `/var/log/containers/*.log`) и отправляет их в Loki.

Используется по умолчанию. Если вы планируете использовать альтернативные сборщики логов, например, Filebeat или Fluent Bit — можно отключить.

```yaml
fluent-bit:
  enabled: false

filebeat:
  enabled: false
  filebeatConfig: ...

logstash:
  enabled: false
  filters: ...
  outputs: ...
```

Альтернативные агенты для сбора логов. Их можно включить, если Promtail не подходит для вашего случая (например, вы уже используете [Fluent Operator](https://timeweb.cloud/docs/k8s/addons/fluent-operator)).

По умолчанию они отключены.

```yaml
grafana:
  enabled: false
```

Отвечает за установку Grafana. Если вы хотите просматривать логи через веб-интерфейс — укажите значение `enabled: true`.

Если в кластере уже установлена Grafana, можно оставить выключенным и подключить Loki вручную как источник данных.

```yaml
prometheus:
  enabled: false
  isDefault: false
  url: ...
```

Позволяет подключить Prometheus как источник метрик в Grafana. Сам Prometheus при этом не устанавливается — этот блок лишь добавляет его как `datasource`.

Можно включить, если у вас уже настроен Prometheus в кластере и вы хотите использовать его в Grafana вместе с Loki.

```yaml
proxy:
  http_proxy: ""
  https_proxy: ""
  no_proxy: ""
```

Настройки прокси, которые могут быть нужны при подключении к внешним сервисам. 

## Пример использования

В качестве примера рассмотрим работу дополнения в связке с Promtail. В роли источника логов запустим под, который будет писать сообщения в стандартный вывод. Kubelet сохраняет эти сообщения в файл в директории `/var/log/containers/`. Promtail, установленный как DaemonSet, считывает эти файлы и отправляет содержимое в Loki. Loki сохраняет логи, а Grafana позволяет их просматривать через веб-интерфейс.

Установите дополнение в панели управления. В окне конфигурации оставьте все параметры по умолчанию, изменив только:

```yaml
grafana: 
  enabled: false
```

на:

```yaml
grafana: 
  enabled: true
```

Это позволит развернуть Grafana, через которую потом будем смотреть логи.

Также установите дополнение [Nginx Ingress](https://timeweb.cloud/docs/k8s/addons/nginx-ingress#ustanovka-nginx-ingress) — оно нужно для доступа к интерфейсу Grafana по доменному имени.

Проверьте, что все поды запущены:

```shell
kubectl get pods -n loki
```

Вы должны увидеть примерно следующее:

```shell
NAME                                 READY   STATUS    RESTARTS   AGE
loki-stack-0                         1/1     Running   0          3h5m
loki-stack-grafana-878d56dc6-s28sq   2/2     Running   0          3h5m
loki-stack-promtail-5wtlr            1/1     Running   0          3h5m
loki-stack-promtail-hl6pl            1/1     Running   0          3h5m
```

Проверьте, что ingress-контроллер работает:

```shell
kubectl get pods -n ingress-nginx
```

Также проверьте сервисы Grafana Loki:

```shell
kubectl get svc -n loki
```

Пример вывода:

```shell
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
loki-stack              ClusterIP   10.111.63.222    <none>        3100/TCP   3h7m
loki-stack-grafana      ClusterIP   10.104.154.158   <none>        80/TCP     3h7m
loki-stack-headless     ClusterIP   None             <none>        3100/TCP   3h7m
loki-stack-memberlist   ClusterIP   None             <none>        7946/TCP   3h7m
```

После этого настроим nginx ingress для работы с Grafana по домену. Для этого [создадим балансировщик](https://timeweb.cloud/docs/k8s/network/kubernetes-load-balancer). Создайте манифест `loadbalancer.yaml`:

```yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
  type: LoadBalancer
```

Примените манифест:

```shell
kubectl apply -f loadbalancer.yaml
```

Создайте правило Ingress в файле `grafana-ingress.yaml`:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
  namespace: loki
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: grafana.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: loki-stack-grafana
                port:
                  number: 80
```

Измените `host: grafana.example.com`, указав домен, по которому вы хотите, чтобы открывался веб-интерфейс Grafana. В качестве A-записи для этого домена укажите IP созданного балансировщика.

Примените манифест:

```shell
kubectl apply -f loadbalancer.yaml
```

Теперь создадим под `logger`, который будет записывать сообщения, эмулируя логи:

```shell
kubectl run logger --image=busybox --restart=Never -- sh -c 'while true; do echo "hello from logger"; sleep 5; done'
```

Проверьте, что под запустился:

```shell
kubectl get pods
```

У пода `logger` должен быть статус `Running`.

Теперь обратимся к веб-интерфейсу графаны. Откройте домен, указанный ранее в Ingress. При переходе вас встретит окно авторизации Grafana.

В качестве логина укажите:

```shell
admin
```

Пароль для авторизации хранится в секрете. Получите его командой:

```shell
kubectl get secret -n loki loki-stack-grafana -o jsonpath="{.data.admin-password}" | base64 --decode
```

В интерфейсе Grafana перейдите в раздел «Explore».

![Scr 20250701 Ojyo](https://content.timeweb.com/assets/fb7fe9a5-d27a-493a-b0d3-143bf0fc39d7.png?width=2884&height=1562)

_Основное меню в интерфейсе [Grafana](https://grafana.com/)_

Выберите источник данных «Loki». В поле «Label filters» укажите `pod=logger` и запустите запрос, нажав на кнопку «Run query».

![Scr 20250701 Oksp](https://content.timeweb.com/assets/95f8c71a-1a12-467d-8f0a-acbc4d23f752.png?width=2858&height=1364)

_Запуск запроса в интерфейсе [Grafana](https://grafana.com/)_

После этого пролистайте страницу вниз. Вы увидите записи в логе «hello from logger».

![Scr 20250701 Olsq](https://content.timeweb.com/assets/373ffcef-2c0e-453f-9bdf-6dcd46366ed8.png?width=2880&height=1608)

_Просмотр логов в интерфейсе [Grafana](https://grafana.com/)_
