Автор статьи: Рустем Галиев

IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM

Привет, Хабр! Начнем с цитаты.

«Работа в производственной среде означает пристальное наблюдение за тем, как все работает, поэтому важно иметь данные, которые обеспечивают такое понимание. В конце концов, способность распознавать потенциально проблемные паттерны в том, как работают ваши приложения или как Kubernetes обрабатывает определенные рабочие нагрузки, может означать разницу между быстрым исправлением и получением звонка в 3 часа ночи, потому что ваш сайт не работает» — Брайан МакКлейн, Staff technologist, VMware.

Сегодня мы узнаем, как в Kubernetes:

  • Установить Prometheus и Grafana.

  • Настроить источник данных Prometheus для Grafana.

  • Настроить панель инструментов для Grafana.

  • Получить доступ к веб-интерфейсу Grafana.

Сначала проверим наш кластер.

{ clear && </span>
  echo -e "\n=== Kubernetes Status ===\n" && </span>
  kubectl get --raw '/healthz?verbose' && </span>
  kubectl version --short && </span>
  kubectl get nodes && </span>
  kubectl cluster-info; 
} | grep -z 'Ready| ok|passed|running'

Также Helm для установки приложений в кластер.

helm version --short

Панель управления Kubernetes

Вы можете администрировать свой кластер с помощью инструмента командной строки kubectl или использовать панель мониторинга Kubernetes.

Устанавливаем Прометей

Prometheus — это набор инструментов для системного мониторинга и оповещения с открытым исходным кодом, который собирает и сохраняет свои метрики в виде данных временных рядов (т. е. информация о метриках хранится с отметкой времени, в которую она была записана, наряду с необязательными парами ключ‑значение, называемыми метками).

Для этой лабораторной работы мы будем использовать хорошо написанный чарт Bitnami Prometheus для установки Prometheus.

Добавим ссылку на репозиторий Bitnami Chart в Helm:

helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo list

Устанавливаем Прометей:

helm install my-kube-prometheus bitnami/kube-prometheus --set prometheus.service.type=NodePort --set prometheus.service.nodePort=30010

Прометей будет доступен через несколько минут:

kubectl get deployments,pods,services --selector app.kubernetes.io/instance=my-kube-prometheus

Чтобы получить ссылку на прометея, используем команду:

export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services my-kube-prometheus-prometheus)
	export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
	echo "Prometheus URL: http://$NODE_IP:$NODE_PORT/"

Панель инструментов Prometheus позволяет запрашивать базу данных временных рядов и отображать необработанные данные. Веб‑интерфейсы доступны через NodePort и доступны на вкладке Prometheus над областью оболочки.

В интерфейсе вверху есть поле поиска. Введите одну из метрик с именем container_memory_working_set_bytes и нажмите Execute справа. Выберите вкладку График. Появится график, показывающий потребление памяти всеми контейнерами, работающими в вашем кластере.

Метрики состояния Куба

Слева от кнопки «Execute» находится действие «Metric Explorer», которое показывает список всех текущих метрик, отслеживаемых Prometheus. В чарте Bitnami также был установлен дополнительный агент KSM. kube‑state‑metrics (KSM) — это служба, которая прослушивает API метрик Kubernetes и генерирует метрики о состоянии объектов. Prometheus просто собирает данные метрик агента KSM.

Prometheus предоставляет функциональный язык запросов под названием PromQL (Prometheus Query Language), который позволяет пользователю выбирать и агрегировать данные временных рядов в режиме реального времени.

Хотя вы можете запрашивать и отображать эти метрики в виде графиков, нам действительно нужна панель мониторинга, которая будет запрашивать множество метрик на одной странице и предоставлять другие визуализации помимо графика временных рядов. Именно здесь Grafana отлично сочетается.

Устанавливаем Графану

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

Один из вариантов — просто установить Grafana, запустить веб‑интерфейс и приступить к настройке источников данных и информационных панелей. Однако чем больше мы будем следовать практике «инфраструктура как код» (IaC) с Kubernetes, тем эффективнее мы будем приближать решения к производству.

Хорошим методом «инфраструктура как код» является использование чарта Helm, такой как эта хорошо написанная диаграмма Bitnami Grafana.

Прежде чем мы установим диаграмму Grafana, мы можем определить источник данных в Kubernetes Secret и панель мониторинга в ConfigMap. Диаграмма Grafana будет ссылаться на эти объекты для настройки параметров инфраструктуры Grafana.

Определить источник данных

Для первой настройки мы определяем источник данных в форме YAML, которую Grafana распознает.

Создадим файл с содержимым datasource‑prometheus.yaml

datasources:
  - name: Prometheus
	type: prometheus
	url: http://my-kube-prometheus-prometheus.default.svc.cluster.local:9090
	isDefault: true

Если удобнее увидеть так

less datasource-prometheus.yaml | tee

Мы размещаем этот YAML в ConfigMap:

kubectl create secret generic datasource-secret --from-file=datasource-prometheus.yamlkubectl get secrets datasource-secret -o yaml

Определяем панель мониторинга

Подробная информация о конфигурации панели мониторинга может храниться в файле JSON. JSON‑схема панели мониторинга имеет множество разделов и полей, и ее может быть сложно написать или настроить без более глубоких знаний. К счастью, существует множество готовых информационных панелей. Коллекция информационных панелей Grafana Labs поможет вам начать работу со многими типами и стилями информационных панелей. Мы будем использовать часто упоминаемый Cluster Monitoring for Kubernetes (id: 10 000).

Эта команда загрузит файл JSON в новый ConfigMap:

kubectl create configmap dashboard-10000 --from-file=dashboard-10000.json

Запустить Графану

Секрет источника данных с именем datasource‑secret и ConfigMap с именем Dashboard-10 000 являются значениями, присвоенными чарту Grafana Helm. Смотрим их в настроенных значениях чарта (создадим файл grafana.values.yaml с содержимым):

service:
  type: NodePort
  nodePorts:
	grafana: 30011

persistence:
  enabled: false

dashboardsProvider:
  enabled: true

datasources:
  secretName: datasource-secret

dashboardsConfigMaps:
  - configMapName: dashboard-10000
	filename: dashboard-10000.json

Устанавливаем grafana чарт

helm install my-grafana bitnami/grafana --values grafana.values.yaml

Доступ к графане получаем через

export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services my-grafana)
	export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
	echo http://$NODE_IP:$NODE_PORT


И данные для входа

echo "User: admin"
	echo "Password: $(kubectl get secret my-grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"

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

kubectl get deployments,pods,services --selector app.kubernetes.io/instance=my-grafana

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

После входа в левое меню в разделе Configuration | Data sources вы видите источник данных Prometheus.

В меню слева выберите Browse в разделе Dashboard. На странице Dashboards щелкните панели в списке, и он развернется, чтобы показать Cluster Monitoring for Kubernetes. Нажмите на него, и он покажет текущие показатели кластера.

Эта первая панель мониторинга дает некоторые основные показатели, такие как ЦП и память в кластере. Есть много других метрик и информационных панелей, которые предоставляют эти данные в режиме реального времени. Наблюдение за метриками на уровне приложения может дать вам более глубокое понимание вашего приложения и поведения клиентов. Наблюдение за приложениями, которые реплицируются на многих машинах в кластере, может быть неуловимым без жизненно важных показателей в реальном времени и на основе времени.

Любые данные в Prometheus можно увидеть в Grafana. Как разработчик приложений, вы также можете предоставлять свои данные Prometheus. Вам не нужно посылать его Прометею; вместо этого все, что вам нужно сделать, это указать конечную точку метрик. Когда контейнер вашего приложения находится в поде и под определяет URL‑адрес метрик, Prometheus соскребает ваши метрики. Это подход «очистки и извлечения», а не подхода «проталкивания метрик». Это значительно упрощает приложению получение метрик в Prometheus и этих информационных панелях. Большинство фреймворков веб‑сервисов на распространенных языках предлагают способы легко отображать метрики вашего приложения.


Приглашаем на открытое занятие «Лог‑менеджмент с Loki». На занятии узнаем, как установить и настроить Loki, а также как проводить анализ с его помощью. Записаться можно на странице курса «Observability: мониторинг, логирование, трейсинг».

Комментарии (2)


  1. antivoland
    00.00.0000 00:00

    Совсем для новичков...

    Думаю что следующим вопросом будет "а как заставить prometheus не жрать оперативку гигабайтами?"


    1. ib13
      00.00.0000 00:00
      +1

      туториалы тоже нужны, порой порог вхождения непонятен...

      сейчас как раз в поиске работы, в мониторинге работал ранее, но уже отстал от темы. Так что мне в копилочку-самое оно!