<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Grafana Loki

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

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

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

Установка

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

Scr 20250702 Nwug

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

Scr 20250702 Nwyg

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

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

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

loki:
  enabled: true
  isDefault: true

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

  • url — внутренний адрес сервиса Loki (используется другими компонентами).

  • readinessProbe и livenessProbe — проверки состояния сервиса.

  • datasource — настройки подключения к Loki как к источнику данных в Grafana.

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

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

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

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

fluent-bit:
  enabled: false

filebeat:
  enabled: false
  filebeatConfig: ...

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

Альтернативные агенты для сбора логов. Их можно включить, если Promtail не подходит для вашего случая (например, вы уже используете Fluent Operator).

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

grafana:
  enabled: false

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

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

prometheus:
  enabled: false
  isDefault: false
  url: ...

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

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

proxy:
  http_proxy: ""
  https_proxy: ""
  no_proxy: ""

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

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

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

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

grafana: 
  enabled: false

на:

grafana: 
  enabled: true

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

Также установите дополнение Nginx Ingress — оно нужно для доступа к интерфейсу Grafana по доменному имени.

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

kubectl get pods -n loki

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

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-контроллер работает:

kubectl get pods -n ingress-nginx

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

kubectl get svc -n loki

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

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 по домену. Для этого создадим балансировщик. Создайте манифест loadbalancer.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

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

kubectl apply -f loadbalancer.yaml

Создайте правило Ingress в файле grafana-ingress.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 созданного балансировщика.

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

kubectl apply -f loadbalancer.yaml

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

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

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

kubectl get pods

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

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

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

admin

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

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

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

Scr 20250701 Ojyo

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

Scr 20250701 Oksp

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

Scr 20250701 Olsq

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев