
В этой статье мы изучим ведение логов 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

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

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

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

Настройте права доступа для сокета Docker, чтобы упростить взаимодействие с демоном Docker.
sudo chmod 666 /var/run/docker.sock

Проверяет, поддерживает ли система виртуализацию.
egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no

Установите KVM и сопутствующие инструменты.
sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon

Добавление пользователя в группы виртуализации.
sudo adduser $USER libvirt
sudo adduser $USER libvirt-qemu

Группа перезагрузки.
newgrp libvirt
newgrp libvirt-qemu

Шаг № 2:Установите Minikube и kubectl
Загрузите последнюю версию бинарного файла Minikube.
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

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

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

Загрузите последнюю версию kubectl
(Kubernetes CLI).
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

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

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

Используйте версия kubectl команда для проверки установки.
kubectl version --client --output=yaml

Шаг № 3:Запуск Minikube
Запустите Minikube с Docker в качестве драйвера.
minikube start --vm-driver docker

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

Шаг #4:Установите Helm
Загрузите helm, менеджер пакетов для Kubernetes.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

Измените его разрешения.
chmod 700 get_helm.sh

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

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

Шаг #5:Настройка Grafana Loki с помощью Helm
Добавьте репозиторий Grafana Helm Chart Repository.
helm repo add grafana https://grafana.github.io/helm-charts

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

Поиск стека Loki.
helm search repo loki

Вы должны увидеть несколько репозиториев, но мы будем использовать grafana/loki-stack
репозиторий для развертывания Promtail, Grafana и настроить Loki.
Просмотрите значения по умолчанию для стека Loki. Загрузите их в yaml-файл.
helm show values grafana/loki-stack > loki-custom-values.yaml

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

Измените его, как показано ниже.
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: ""


Разверните стек Loki. Устанавливает стек Loki в grafana-loki
пространстве имен.
helm upgrade --install --values loki-custom-values.yaml loki grafana/loki-stack -n grafana-loki --create-namespace

Шаг #6:Доступ к Grafana Loki
Сначала проверьте стручки в grafana-loki
, чтобы узнать, все ли запущено или нет.
kubectl get pods -n grafana-loki

Перечислите сервисы для получения информации о NodePort.
kubectl get services -n grafana-loki

Переадресуйте Grafana loki на порт 3100.
kubectl port-forward -n grafana-loki --address 0.0.0.0 svc/loki-grafana 3000:80

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

Получите учетные данные администратора Grafana с помощью следующих команд.
kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-user}" | base64 --decode; echo

kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode; echo


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


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

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

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

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