Автор статьи: Рустем Галиев
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: мониторинг, логирование, трейсинг».
antivoland
Совсем для новичков...
Думаю что следующим вопросом будет "а как заставить prometheus не жрать оперативку гигабайтами?"
ib13
туториалы тоже нужны, порой порог вхождения непонятен...
сейчас как раз в поиске работы, в мониторинге работал ранее, но уже отстал от темы. Так что мне в копилочку-самое оно!