Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki

В этой статье мы узнаем о метриках и журналах Kubernetes с помощью Prometheus, Filebeat и Grafana Loki | об интеграции Prometheus, Filebeat и Logstash с Grafana Loki для журналов и метрик Kubernetes.

В этом руководстве мы расскажем вам о том, как интегрировать эти мощные инструменты для создания комплексного решения по наблюдению за Kubernetes. К концу статьи у вас будет установка, которая не только отслеживает метрики с помощью Prometheus, но и обрабатывает и визуализирует журналы с помощью Filebeat, Logstash и Grafana Loki, предоставляя вам четкое представление о здоровье и производительности вашего кластера.

Предварительные условия

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

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

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

sudo apt update
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 1

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

sudo apt install curl wget apt-transport-https -y
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 2

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

sudo apt install docker.io -y
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 3

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

sudo usermod -aG docker $USER
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 4

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

sudo chmod 666 /var/run/docker.sock
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 5

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

egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 6

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

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 7

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

sudo adduser $USER libvirt
sudo adduser $USER libvirt-qemu
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 8

Reload Group.

newgrp libvirt
newgrp libvirt-qemu
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 9

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

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

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 10

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

sudo install minikube-linux-amd64 /usr/local/bin/minikube
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 11

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

minikube version
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и 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 с помощью Prometheus, Filebeat и Grafana Loki 13

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

chmod +x ./kubectl
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 14

переместить в /usr/local/bin

sudo mv kubectl /usr/local/bin/
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 15

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

kubectl version --client --output=yaml
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 16

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

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

minikube start --vm-driver docker
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 17

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

minikube status
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и 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 с помощью Prometheus, Filebeat и Grafana Loki 19

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

chmod 700 get_helm.sh
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 20

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

./get_helm.sh
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 21

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

helm version
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 22

Шаг #5:Настройка конфигурации диаграммы Helm

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

helm repo add grafana https://grafana.github.io/helm-charts
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 23

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

helm repo update
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 24

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

helm search repo loki
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 25

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

Просмотрите значения по умолчанию для стека Loki и загрузите их в yaml-файл. Мы создадим пользовательский файл конфигурации с именем loki-custom-values.yaml. Этот файл позволяет Filebeat для сбора журналов, Logstash для расширенной обработки журналов, и Prometheus для метрик.

helm show values grafana/loki-stack > loki-custom-values.yaml
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 26

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

nano loki-custom-values.yaml
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и 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: false
  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: true
  isDefault: false
  url: http://{{ include "prometheus.fullname" .}}:{{ .Values.prometheus.server.service.servicePort }}{{ .Values.prometheus.server.prefixURL }}
  datasource:
    jsonData: "{}"
  server:
    service:
      type: NodePort
    persistentVolume:
      ## If true, Prometheus server will create/use a Persistent Volume Claim
      ## If false, use emptyDir
      ##
      enabled: false

filebeat:
  enabled: true
  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-headless:5044"]

logstash:
  enabled: true
  image: grafana/logstash-output-loki
  imageTag: 1.0.1

  fullnameOverride: logstash-loki

  logstashConfig:
    logstash.yml: |
      http.host: 0.0.0.0
      xpack.monitoring.enabled: false

  logstashPipeline:
    logstash.conf: |
      input {
        beats {
          port => 5044
        }
      }

  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 с помощью Prometheus, Filebeat и Grafana Loki 28
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 29
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 30

Этот файл настраивает:

  • Filebeat для сбора журналов из подсистем Kubernetes.
  • Logstash для обработки журналов и передачи их в Loki.
  • Prometheus для сбора метрик.
  • Grafana для визуализации логов и метрик.

Используйте следующую команду Helm для развертывания стека. Она развертывает его в grafana-loki пространство имен

helm upgrade --install --values loki-custom-values.yaml loki grafana/loki-stack -n grafana-loki --create-namespace
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 31

Эта команда развертывает Loki, Prometheus, Filebeat, Logstash, Grafana и настраивает сервисы в соответствии с пользовательским конфигурационным файлом.

Шаг #6:Доступ к журналам Kubernetes в Grafana

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

kubectl get pods -n grafana-loki
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 32

Вы должны увидеть поды для Loki, Grafana, Filebeat, Logstash и Prometheus.

Перечислите сервисы для получения сведений о NodePort.

kubectl get services -n grafana-loki
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 33

Переадресуйте loki-grafana на порт 3000.

kubectl port-forward -n grafana-loki --address 0.0.0.0 svc/loki-grafana 3000:80
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 34

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

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 35

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

kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-user}" | base64 --decode; echo
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 36

admin – это наше имя пользователя.

kubectl get secret --namespace grafana-loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode; echo
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 37
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 38

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

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 39
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 40

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

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 41

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

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 42

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

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 43

Filebeat собирает журналы из подсистем Kubernetes и направляет их в Logstash. Logstash обрабатывает журналы, полученные от Filebeat, и направляет их в Grafana Loki.

Шаг #7:Визуализация метрик в Grafana

Вы также можете импортировать приборные панели из библиотеки Grafana.

Получите доступ к библиотеке Grafana. Поиск Grafana Labs в веб-браузере.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 44

Выберите нужную приборную панель, например kube-state-metrics-v2.

Поиск kube-state-metrics-v2.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 45
Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 46

Скопируйте его идентификатор.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 47

В Grafana перейдите на страницу Приборные панели > Новые > Импорт.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 48

Введите идентификатор приборной панели (11455) и нажмите Загрузить.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 49

Нажмите Импорт чтобы добавить приборную панель…

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 50

После загрузки приборная панель будет отображать метрики Kubernetes.

Метрики и журналы Kubernetes с помощью Prometheus, Filebeat и Grafana Loki 51

Заключение:

В заключение хочу сказать, что сегодня мы узнали об интеграции Prometheus, Filebeat и Logstash с Grafana Loki для журналов и метрик Kubernetes. Благодаря интеграции Prometheus, Filebeat, Logstash и Grafana Loki у вас теперь есть надежная система для мониторинга Kubernetes. Prometheus эффективно собирает метрики, Filebeat и Logstash упрощают обработку журналов, а Grafana Loki сохраняет и визуализирует их. Вместе эти инструменты обеспечивают целостное представление о вашем кластере, позволяя эффективно обнаруживать, устранять и решать проблемы.

Объединяя журналы и метрики в Grafana, вы можете коррелировать данные, чтобы раскрыть суть, которая поможет повысить надежность и производительность приложений. Это решение не только упрощает мониторинг, но и предоставляет инструменты, необходимые для уверенного управления Kubernetes в масштабе.

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

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