Наш эксперт Михаил Сергеев подготовил подробный материал (в двух форматах: статья и видеоурок), из которого вы узнаете:
- Что такое Prometheus, Grafana и Trickster;
- Как установить эти компоненты в кластер Kubernetes;
- Как ускорить работу и снизить нагрузку с помощью кэширующего прокси Trickster;
- Как получить метрики всех нод нашего кластера;
- Как настроить различные дашборды в Grafana для отображения собранных метрик.
Что такое Prometheus, Grafana и Trickster
Prometheus — это система мониторинга с открытым исходным кодом, которая широко используется для мониторинга Kubernetes-кластеров и других распределенных систем. Она позволяет операторам Kubernetes-кластеров отслеживать метрики, связанные с использованием ресурсов и способностью приложений и событий в кластере.
Prometheus позволяет собирать метрики из различных источников, включая сам Kubernetes, приложения и другие компоненты инфраструктуры. Он использует язык запросов PromQL для извлечения и агрегации метрик, что позволяет операторам получать ценную информацию о статусе кластера и приложений.
Prometheus поставляется с множеством инструментов для визуализации и анализа метрик, включая интерфейс веб-приложения, графики и предупреждения. Он также может интегрироваться с различными инструментами мониторинга и алертинга, такими как Grafana и Alertmanager, чтобы операторы могли получать уведомления о проблемах в реальном времени и принимать соответствующие меры.
Использование Prometheus и Kubernetes может помочь операторам эффективно управлять кластером, обеспечивает масштабируемость, надёжность приложений, а также быстро реагировать на проблемы. Он может помочь выявлять проблемы до того, как они начнут влиять на пользователей и предупреждать о возможных проблемах в режиме реального времени.
Grafana — это инструмент визуализации и анализа данных, который используется для мониторинга системы, приложений и инфраструктуры. В контексте Kubernetes и Prometheus, Grafana является компонентом, который используется для визуализации данных, собранных с помощью Prometheus.
Grafana может быть использован для создания красивых информационных дашбордов (Dashboard), которые представляют метрики, собранные Prometheus. Дашборды могут быть настроены для отображения графиков, таблиц, гистограмм и других типов данных. В зависимости от того, какие метрики необходимы для мониторинга. Вместе с Prometheus, Grafana образует мощную комбинацию для мониторинга и отладки Kubernetes приложений и инфраструктуры. Он предоставляет администраторам и разработчикам удобный интерфейс для просмотра и анализа метрик. А также помогает быстро обнаруживать проблемы в приложениях и инфраструктуре Kubernetes.
Trickster — это кэширующий прокси-сервер, который может использоваться в связке с Prometheus и Grafana для улучшения производительности и снижения нагрузки на сервер Prometheus. Он представляет собой отдельный сервер, который может располагаться между клиентскими приложениями и сервером Prometheus.
Trickster кэширует ответы от сервера Prometheus, что позволяет сократить количество запросов, отправляемых на сервер, и уменьшить нагрузку на него. Он также может обрабатывать запросы на агрегированные данные, что позволяет снизить нагрузку на сервер Prometheus и ускорить обработку запросов.
Trickster поддерживает протокол HTTP, поэтому его можно использовать в любом окружении, которое поддерживает этот протокол. Он также предоставляет API для управления кэшем, которое может быть использовано для контроля размера кэша и времени хранения данных в нем.
Для использования Trickster с Prometheus и Grafana в Kubernetes необходимо настроить соответствующую интеграцию. Для этого нужно создать конфигурационный файл Trickster, который определяет настройки прокси-сервера. Затем нужно настроить Grafana на использование Trickster в качестве источника данных, а Prometheus - на отправку запросов через Trickster.
В целом использование кэширующего прокси Trickster позволяет увеличить производительность и снизить нагрузку на сервер Prometheus, что делает его более эффективным в работе с Kubernetes.
Принцип работы кэширующего прокси-сервера Trickster основан на кэшировании ответов от сервера Prometheus. Когда клиентское приложение отправляет запрос на сервер Prometheus, Trickster перехватывает этот запрос и проверяет, есть ли соответствующий ответ в его кэше. Если ответ есть в кэше, то Trickster возвращает его клиентскому приложению без обращения к серверу Prometheus. Если ответа нет в кэше, то Trickster отправляет запрос на сервер Prometheus, получает ответ и сохраняет его в кэше для дальнейшего использования.
Одним из ключевых элементов работы Trickster является его способность к агрегации данных. Trickster может обрабатывать запросы на агрегированные данные, такие как суммы, средние значения, максимальные и минимальные значения и т.д., что позволяет снизить количество запросов, отправляемых на сервер Prometheus, и ускорить обработку запросов.
Trickster также имеет возможность управления кэшем. Он может контролировать размер кэша и время хранения данных в нем, что позволяет сбалансировать производительность и потребление памяти.
Принцип работы Trickster можно описать следующим образом:
- 1. Клиентское приложение отправляет запрос на Trickster.
- 2. Trickster проверяет, есть ли ответ в кэше.
- 3. Если ответ есть в кэше, Trickster возвращает его клиентскому приложению.
- 4. Если ответа нет в кэше, Trickster отправляет запрос на сервер Prometheus.
- Trickster получает ответ от сервера Prometheus и сохраняет его в кэше.
- Trickster возвращает ответ клиентскому приложению.
При необходимости Trickster может обрабатывать запросы на агрегированные данные, контролировать размер кэша и время хранения данных в нем.
Установка компонентов в Kubernetes-кластер
Итак, с теорией разобрались, теперь переходим к практике.
#Используемые в уроке команды: #### Kubernetes алиасы echo "alias k='kubectl'" >> ~/.bashrc echo "alias kg='kubectl get'" >> ~/.bashrc echo "alias kgp='kubectl get po'" >> ~/.bashrc echo "alias kd='kubectl delete -f'" >> ~/.bashrc echo "alias ka='kubectl apply -f'" >> ~/.bashrc echo "alias ke='kubectl exec -it'" >> ~/.bashrc echo "alias k1='kubectl describe'" >> ~/.bashrc echo "alias kl='kubectl logs'" >> ~/.bashrc echo "alias kgs='kubectl get svc -A'" >> ~/.bashrc echo "alias kr='kubectl rollout restart deployment'" >> ~/.bashrc echo "alias krs='kubectl rollout restart sts'" >> ~/.bashrc echo "alias kpa='kubectl get po -A'" >> ~/.bashrc source ~/.bashrc
Посмотрим, что у нас есть, вот наш Kubernetes-кластер, 3 ceph ноды, сетевое хранилище, 3 мастер ноды (mnode), и одна вокер нода (wnode).
У нас имеются уже подготовленные команды для установки Prometheus.
# Установка Prometheus cd /helms helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm pull prometheus-community/prometheus tar zxf prometheus-19.7.2.tgz rm prometheus-19.7.2.tgz -f cp prometheus/values.yaml prometheus-values.yaml vi prometheus-values.yaml helm upgrade --install --create-namespace --values prometheus-values.yaml prometheus -n monitoring prometheus-community/prometheus
Релиз Prometheus не найден. Если посмотреть список подов, у нас немспейс мониторинг.
Давайте посмотрим сервисы. Вот сюда нам нужно обращаться будет, но мы будем обращаться не сюда, а к Trickster. Чуть позже это покажем. Мы указали 100 Гб размер для persistent volume claim (pvc). Он сделал запрос и создал нам pv на 100 Гб. С Prometheus в принципе всё, проверим, установлен ли он. Все поды запущены, статус running.
У нас имеются уже подготовленные команды для установки Grafana.
#### GRAFANA helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm pull grafana/grafana tar zxf grafana-6.52.1.tgz rm grafana-6.52.1.tgz -f cp grafana/values.yaml grafana-values.yaml vi grafana-values.yaml persistence необходимо поставить в положение true иначе после смерти пода все настройки сбросятся persistence: type: pvc enabled: true helm upgrade --install --create-namespace --values grafana-values.yaml grafana -n monitoring grafana/grafana admin TstCEZG7H1RRDGFoAhWSeXhyE0EZJsBUBpmIMjRH
Получаем пароль TstCEZG7H1RRDGFoAhWSeXhyE0EZJsBUBpmIMjRH
Ускорение работы и снижение нагрузки с помощью кэширующего прокси Trickster
Затем устанавливаем Trickster, для него все команды также заранее подготовлены.
# Установка Trickster helm repo add tricksterproxy https://helm.tricksterproxy.io helm repo update helm pull tricksterproxy/trickster tar zxf trickster-1.5.4.tgz rm trickster-1.5.4.tgz -f cp trickster/values.yaml trickster-values.yaml vi trickster-values.yaml helm upgrade --install --create-namespace --values trickster-values.yaml trickster -n monitoring tricksterproxy/trickster
Проверяем созданные поды и какие сервисы добавились.
#Добавляем ингресс для внешнего доступа: cat << \EOF > grafana-ingress.yaml --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 95.217.236.3/32,192.248.191.109/32,94.143.44.29/32 cert-manager.io/issuer: gitlab-issuer kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" name: grafana namespace: monitoring spec: rules: - host: monitoring.195-208-185-64.sslip.io http: paths: - backend: service: name: grafana port: number: 80 path: / pathType: Prefix tls: - hosts: - monitoring.195-208-185-64.sslip.io secretName: grafanassl ... EOF ka grafana-ingress.yaml #Получить пароль админа от графаны: kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Тут важной частью является White-лист в нем прописаны IP-адреса с которых можно подключаться к системе. Поскольку Grafana будет доступна на внешнем адресе, любой желающий не должен иметь возможность подключиться к ней. Подключение должно происходить исключительно с определённых IP-адресов. У нас это VPN. Для подключения к Grafana включаем VPN, получаем нужный адрес из белого списка. Также сотруднику вы сможете выдавать VPN сертификат для получения нужного IP-адреса.
При увольнении сотрудника у него забирается VPN, после чего он теряет доступ к системе. Это очень удобно, поскольку позволяет не менять пароли.
Копируем текст, и теперь Grafana создан, можно к нему удалённо подключаться.
Получение метрик всех нод нашего кластера
Теперь, имея пароль, перейдём к Grafana и попытаемся настроить источник Prometheus через txt. И ещё один важный момент — нам нужен сервис. Для него нужно заполнить название и задать порт.
Открываем браузер, вводим наш адрес сервиса monitoring.195-208-185-64.sslip.io, при этом создаётся SSL-сертификат (цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение). Вводим наши логин и пароль. Успешно зашли, тут ещё пока ничего не настроено. Теперь нам нужно подключить источник. Заходим в настройки и выбираем необходимый источник. Тут можно с разных источников получать данные, но у нас используется Prometheus. Затем вводим адрес нашего прокси, оставляем название источника по умолчанию. Аутентификации там нет. Сохраняем изменения настроек и запускаем их тест. Нажимаем сохранить и после этого источник добавлен.
Настройка различных дашбордов в Grafana для отображения собранных метрик
Теперь нам необходимо создать дашборд, который будет нам показывать метрики. Есть уже готовые дашборды и мы переходим на сайт, где можно их посмотреть. Открываем https://grafana.com/grafana/dashboards/
Нам нужен Prometheus, мы заранее подготовили ID номера наиболее интересных дашбордов.
Grafana dashboards: 1860 (stat) 9614 (nginx) 2842 (ceph) 315
Дашборд устанавливается двумя способами, либо через установку сон файла, либо через указание ID номера. Выбираем папку, название и наш источник ID номера. Нажимаем импорт и всё готово.
Если одна нода вылетит, то система продолжит свою работу, но её статус уже изменится. Можно посмотреть длину очереди и собирать все метрики с вашего кластера. Также можно настроить уведомления о различных происшествиях аллерты (программируемые оповещения о каком-либо событии).