Ведение логов Kubernetes с помощью Grafana Loki

В этой статье мы изучим ведение логов Kubernetes с помощью Grafana Loki | Setup Grafana Loki for Kubernetes Cluster Logging | How to Set Up Grafana Loki for Kubernetes Logging.

Мониторинг и ведение логов необходимы для понимания производительности и здоровья кластеров Kubernetes. Grafana Loki – это легкая и экономичная система агрегации логов, разработанная для упрощения ведения логов Kubernetes. Мы расскажем вам, как настроить Grafana Loki для ведения логов Kubernetes, и подробно объясним каждую команду.

Необходимые условия

  • Учетная запись AWS с Ubuntu 24.04 LTS Экземпляр EC2.
  • Minikube и kubectl, Helm установлен
  • Базовые знания о Kubernetes

Шаг #1:Настройка инстанса Ubuntu EC2

Обновите список пакетов.

sudo apt update
Логирование Kubernetes с помощью Grafana Loki 1

Устанавливает такие необходимые инструменты, как curl, wget и apt-transport-https.

sudo apt install curl wget apt-transport-https -y
Логирование Kubernetes с помощью Grafana Loki 2

Устанавливает Docker, контейнерную среду выполнения, которая будет использоваться в качестве драйвера ВМ для Minikube.

sudo apt install docker.io -y
Логирование Kubernetes с помощью Grafana Loki 3

Добавьте текущего пользователя в группу Docker, что позволит ему выполнять команды Docker без sudo.

sudo usermod -aG docker $USER
Логирование Kubernetes с помощью Grafana Loki 4

Настройте права доступа для сокета Docker, чтобы упростить взаимодействие с демоном Docker.

sudo chmod 666 /var/run/docker.sock
Логирование Kubernetes с помощью Grafana Loki 5

Проверяет, поддерживает ли система виртуализацию.

egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no
Логирование Kubernetes с помощью Grafana Loki 6

Установите KVM и сопутствующие инструменты.

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon
Логирование Kubernetes с помощью Grafana Loki 7

Добавление пользователя в группы виртуализации.

sudo adduser $USER libvirt
sudo adduser $USER libvirt-qemu
Логирование Kubernetes с помощью Grafana Loki 8

Группа перезагрузки.

newgrp libvirt
newgrp libvirt-qemu
Логирование Kubernetes с помощью Grafana Loki 9

Шаг № 2:Установите Minikube и kubectl

Загрузите последнюю версию бинарного файла Minikube.

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
Логирование Kubernetes с помощью Grafana Loki 10

Установите его в /usr/local/bin, сделав его доступным для всей системы.

sudo install minikube-linux-amd64 /usr/local/bin/minikube
Логирование Kubernetes с помощью Grafana Loki 11

Используйте версия minikube команда для подтверждения установки.

minikube version
Логирование Kubernetes с помощью Grafana Loki 12

Загрузите последнюю версию kubectl (Kubernetes CLI).

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Логирование Kubernetes с помощью Grafana Loki 13

Сделайте двоичный файл kubectl исполняемым.

chmod +x ./kubectl
Логирование Kubernetes с помощью Grafana Loki 14

перенести в /usr/local/bin

sudo mv kubectl /usr/local/bin/
Логирование Kubernetes с помощью Grafana Loki 15

Используйте версия kubectl команда для проверки установки.

kubectl version --client --output=yaml
Логирование Kubernetes с помощью Grafana Loki 16

Шаг № 3:Запуск Minikube

Запустите Minikube с Docker в качестве драйвера.

minikube start --vm-driver docker
Логирование Kubernetes с помощью Grafana Loki 17

Чтобы проверить состояние Minikube, выполните следующую команду.

minikube status
Логирование Kubernetes с помощью Grafana Loki 18

Шаг #4:Установите Helm

Загрузите helm, менеджер пакетов для Kubernetes.

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
Логирование Kubernetes с помощью Grafana Loki 19

Измените его разрешения.

chmod 700 get_helm.sh
Логирование Kubernetes с помощью Grafana Loki 20

Установите штурвал.

./get_helm.sh
Логирование Kubernetes с помощью Grafana Loki 21

Проверьте его версию, чтобы подтвердить установку.

helm version
Логирование Kubernetes с помощью Grafana Loki 22

Шаг #5:Настройка Grafana Loki с помощью Helm

Добавьте репозиторий Grafana Helm Chart Repository.

helm repo add grafana https://grafana.github.io/helm-charts
Логирование Kubernetes с помощью Grafana Loki 23

обновите репозитории Helm для получения последних графиков.

helm repo update
Логирование Kubernetes с помощью Grafana Loki 24

Поиск стека Loki.

helm search repo loki
Логирование Kubernetes с помощью Grafana Loki 25

Вы должны увидеть несколько репозиториев, но мы будем использовать grafana/loki-stack репозиторий для развертывания Promtail, Grafana и настроить Loki.

Просмотрите значения по умолчанию для стека Loki. Загрузите их в yaml-файл.

helm show values grafana/loki-stack > loki-custom-values.yaml
Логирование Kubernetes с помощью Grafana Loki 26

Откройте и отредактируйте файл пользовательских значений, как показано ниже.

nano loki-custom-values.yaml
Логирование Kubernetes с помощью Grafana Loki 27

Измените его, как показано ниже.

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

loki:
  enabled: true
  isDefault: true
  url: http://{{(include "loki.serviceName" .)}}:{{ .Values.loki.service.port }}
  readinessProbe:
    httpGet:
      path: /ready
      port: http-metrics
    initialDelaySeconds: 45
  livenessProbe:
    httpGet:
      path: /ready
      port: http-metrics
    initialDelaySeconds: 45
  datasource:
    jsonData: "{}"
    uid: ""


promtail:
  enabled: true
  config:
    logLevel: info
    serverPort: 3101
    clients:
      - url: http://{{ .Release.Name }}:3100/loki/api/v1/push

fluent-bit:
  enabled: false

grafana:
  enabled: true
  sidecar:
    datasources:
      label: ""
      labelValue: ""
      enabled: true
      maxLines: 1000
  image:
    tag: 10.3.3
  service:
    type: NodePort

prometheus:
  enabled: false
  isDefault: false
  url: http://{{ include "prometheus.fullname" .}}:{{ .Values.prometheus.server.service.servicePort }}{{ .Values.prometheus.server.prefixURL }}
  datasource:
    jsonData: "{}"

filebeat:
  enabled: false
  filebeatConfig:
    filebeat.yml: |
      # logging.level: debug
      filebeat.inputs:
      - type: container
        paths:
          - /var/log/containers/*.log
        processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
      output.logstash:
        hosts: ["logstash-loki:5044"]

logstash:
  enabled: false
  image: grafana/logstash-output-loki
  imageTag: 1.0.1
  filters:
    main: |-
      filter {
        if [kubernetes] {
          mutate {
            add_field => {
              "container_name" => "%{[kubernetes][container][name]}"
              "namespace" => "%{[kubernetes][namespace]}"
              "pod" => "%{[kubernetes][pod][name]}"
            }
            replace => { "host" => "%{[kubernetes][node][name]}"}
          }
        }
        mutate {
          remove_field => ["tags"]
        }
      }
  outputs:
    main: |-
      output {
        loki {
          url => "http://loki:3100/loki/api/v1/push"
          #username => "test"
          #password => "test"
        }
        # stdout { codec => rubydebug }
      }

# proxy is currently only used by loki test pod
# Note: If http_proxy/https_proxy are set, then no_proxy should include the
# loki service name, so that tests are able to communicate with the loki
# service.
proxy:
  http_proxy: ""
  https_proxy: ""
  no_proxy: ""
Логирование Kubernetes с помощью Grafana Loki 28
Логирование Kubernetes с помощью Grafana Loki 29

Разверните стек Loki. Устанавливает стек Loki в grafana-loki пространстве имен.

helm upgrade --install --values loki-custom-values.yaml loki grafana/loki-stack -n grafana-loki --create-namespace
Логирование Kubernetes с помощью Grafana Loki 30

Шаг #6:Доступ к Grafana Loki

Сначала проверьте стручки в grafana-loki , чтобы узнать, все ли запущено или нет.

kubectl get pods -n grafana-loki
Логирование Kubernetes с помощью Grafana Loki 31

Перечислите сервисы для получения информации о NodePort.

kubectl get services -n grafana-loki
Логирование Kubernetes с помощью Grafana Loki 32

Переадресуйте Grafana loki на порт 3100.

kubectl port-forward -n grafana-loki --address 0.0.0.0 svc/loki-grafana 3000:80
Логирование Kubernetes с помощью Grafana Loki 33

Посетите http://<Public-IP-address>:3000 в веб-браузере.

Логирование Kubernetes с помощью Grafana Loki 34

Получите учетные данные администратора Grafana с помощью следующих команд.

kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-user}" | base64 --decode; echo
Логирование Kubernetes с помощью Grafana Loki 35
kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode; echo
Логирование Kubernetes с помощью Grafana Loki 36
Логирование Kubernetes с помощью Grafana Loki 37

Перейти к Соединения > Источники данных, где можно подтвердить, что Loki был настроен.

Логирование Kubernetes с помощью Grafana Loki 38
Логирование Kubernetes с помощью Grafana Loki 39

Перейти к Просмотреть , нажав кнопку Explore.

Логирование Kubernetes с помощью Grafana Loki 40

Выберите метку (например, namespace) и значение (например, grafana-loki). Выбор в опциях Мгновенно как тип и предел линии 1000. Нажмите на синюю кнопку Выполнить запрос Кнопка в правом верхнем углу для просмотра журналов.

Логирование Kubernetes с помощью Grafana Loki 41

Вы можете увидеть журналы, как показано ниже.

Логирование Kubernetes с помощью Grafana Loki 42

Grafana Loki собирает журналы всех объектов Kubernetes, таких как контейнеры, подсистемы, пространства имен и развертывания. Журналы направляются в Loki с помощью Promtail, работающий как DaemonSet, упрощающий сбор логов Kubernetes.

Заключение:

В заключение отметим, что сегодня мы успешно настроили Grafana Loki для логирования Kubernetes. Начиная с подготовки среды и заканчивая развертыванием Grafana Loki с помощью Helm, каждый шаг был тщательно объяснен, чтобы обеспечить ясность. С Grafana Loki у вас теперь есть мощный инструмент для агрегации и визуализации логов из вашего кластера Kubernetes, что облегчает поиск и мониторинг неисправностей. Расширьте эту настройку, интегрировав дополнительные панели Grafana или включив механизмы оповещения для проактивного анализа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *