![](https://habrastorage.org/getpro/habr/upload_files/d5a/d03/097/d5ad030972507be126665586f55a8bb5.png)
![](https://habrastorage.org/getpro/habr/upload_files/3a4/8b9/979/3a48b997975511600422e89a510acf8a.jpg)
Автор статьи: Рустем Галиев
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'
![](https://habrastorage.org/getpro/habr/upload_files/2a7/add/617/2a7add617b2feb4fd45f71b3d5bdf034.png)
Также Helm для установки приложений в кластер.
helm version --short
![](https://habrastorage.org/getpro/habr/upload_files/d8f/cb8/c92/d8fcb8c921b99094e7575f6f4c18bdcf.png)
Панель управления Kubernetes
Вы можете администрировать свой кластер с помощью инструмента командной строки kubectl или использовать панель мониторинга Kubernetes.
![](https://habrastorage.org/getpro/habr/upload_files/a8c/6cf/404/a8c6cf4048d94891e542e100a8af6bfc.png)
Устанавливаем Прометей
Prometheus — это набор инструментов для системного мониторинга и оповещения с открытым исходным кодом, который собирает и сохраняет свои метрики в виде данных временных рядов (т. е. информация о метриках хранится с отметкой времени, в которую она была записана, наряду с необязательными парами ключ‑значение, называемыми метками).
Для этой лабораторной работы мы будем использовать хорошо написанный чарт Bitnami Prometheus для установки Prometheus.
Добавим ссылку на репозиторий Bitnami Chart в Helm:
helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo list
![](https://habrastorage.org/getpro/habr/upload_files/bff/653/e1d/bff653e1df960bbdd71df6171ddc8cf5.png)
Устанавливаем Прометей:
helm install my-kube-prometheus bitnami/kube-prometheus --set prometheus.service.type=NodePort --set prometheus.service.nodePort=30010
![](https://habrastorage.org/getpro/habr/upload_files/260/9b5/1a8/2609b51a884c722ea6ff44f035cc325f.png)
Прометей будет доступен через несколько минут:
kubectl get deployments,pods,services --selector app.kubernetes.io/instance=my-kube-prometheus
![](https://habrastorage.org/getpro/habr/upload_files/010/031/758/010031758c32a7e3200d9f5d23b2804a.png)
Чтобы получить ссылку на прометея, используем команду:
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 справа. Выберите вкладку График. Появится график, показывающий потребление памяти всеми контейнерами, работающими в вашем кластере.
![](https://habrastorage.org/getpro/habr/upload_files/886/d2f/f26/886d2ff26b44517035aba68994871586.png)
![](https://habrastorage.org/getpro/habr/upload_files/040/6a6/b00/0406a6b005b2e2fe1755aae06947f5a5.png)
Метрики состояния Куба
Слева от кнопки «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
![](https://habrastorage.org/getpro/habr/upload_files/fd6/a0b/409/fd6a0b4098a7a375160feb2e7b39b53a.png)
Мы размещаем этот YAML в ConfigMap:
kubectl create secret generic datasource-secret --from-file=datasource-prometheus.yamlkubectl get secrets datasource-secret -o yaml
![](https://habrastorage.org/getpro/habr/upload_files/912/274/9f1/9122749f1d0142b90a218bd388e41044.png)
Определяем панель мониторинга
Подробная информация о конфигурации панели мониторинга может храниться в файле JSON. JSON‑схема панели мониторинга имеет множество разделов и полей, и ее может быть сложно написать или настроить без более глубоких знаний. К счастью, существует множество готовых информационных панелей. Коллекция информационных панелей Grafana Labs поможет вам начать работу со многими типами и стилями информационных панелей. Мы будем использовать часто упоминаемый Cluster Monitoring for Kubernetes (id: 10 000).
Эта команда загрузит файл JSON в новый ConfigMap:
kubectl create configmap dashboard-10000 --from-file=dashboard-10000.json
![](https://habrastorage.org/getpro/habr/upload_files/cfb/b34/901/cfbb349018830cefc5d9c5f80d616ed4.png)
Запустить Графану
Секрет источника данных с именем 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
![](https://habrastorage.org/getpro/habr/upload_files/322/a61/268/322a6126867e124569774cda87ead86f.png)
Доступ к графане получаем через
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
![](https://habrastorage.org/getpro/habr/upload_files/54e/4d8/a24/54e4d8a24710d05750ec1899dea7a959.png)
Служба панели инструментов Grafana предоставляется через NodePort, и к ней можно получить доступ на вкладке Grafana чуть выше области оболочки.
После входа в левое меню в разделе Configuration | Data sources вы видите источник данных Prometheus.
В меню слева выберите Browse в разделе Dashboard. На странице Dashboards щелкните панели в списке, и он развернется, чтобы показать Cluster Monitoring for Kubernetes. Нажмите на него, и он покажет текущие показатели кластера.
![](https://habrastorage.org/getpro/habr/upload_files/49c/3a1/17c/49c3a117c609774f4566148683c2b1bd.png)
![](https://habrastorage.org/getpro/habr/upload_files/b56/b24/db1/b56b24db1f7adaf3e63fd2558da74b2d.png)
Эта первая панель мониторинга дает некоторые основные показатели, такие как ЦП и память в кластере. Есть много других метрик и информационных панелей, которые предоставляют эти данные в режиме реального времени. Наблюдение за метриками на уровне приложения может дать вам более глубокое понимание вашего приложения и поведения клиентов. Наблюдение за приложениями, которые реплицируются на многих машинах в кластере, может быть неуловимым без жизненно важных показателей в реальном времени и на основе времени.
Любые данные в Prometheus можно увидеть в Grafana. Как разработчик приложений, вы также можете предоставлять свои данные Prometheus. Вам не нужно посылать его Прометею; вместо этого все, что вам нужно сделать, это указать конечную точку метрик. Когда контейнер вашего приложения находится в поде и под определяет URL‑адрес метрик, Prometheus соскребает ваши метрики. Это подход «очистки и извлечения», а не подхода «проталкивания метрик». Это значительно упрощает приложению получение метрик в Prometheus и этих информационных панелях. Большинство фреймворков веб‑сервисов на распространенных языках предлагают способы легко отображать метрики вашего приложения.
Приглашаем на открытое занятие «Лог‑менеджмент с Loki». На занятии узнаем, как установить и настроить Loki, а также как проводить анализ с его помощью. Записаться можно на странице курса «Observability: мониторинг, логирование, трейсинг».