Рубрики
Uncategorized

Начало работы с Grafana и Prometheus для метрик Kubernetes

В предыдущем посте мы запустили Grafana с использованием данных CloudWatch. Пока это провинция … Помечено начинающими, Kubernetes, метриками, DevOps.

Grafana-Cloudwatch-Prometheus (2 серии деталей)

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

Чтобы мы могли просмотреть метрики на нашей панели панели Grafana, мы можем интегрировать их в датчик Prometheus и попросить промеовать метрики из наших узлов и приложений. Мы развернем Prometheus, используя Helm, и объясним больше на этом пути.

  • Требования
  • Быстрая 5-минутная установка
    • Что вы получаете
    • Настраивать
    • Место для хранения
    • Установка
    • Соединение Графаны с Прометеем
    • Добавление мониторинга
  • Как это работает?
    • Метрики узла
    • Метрики приложения
    • Так как это настроено?
  • Завершая
  • Kubernetes Cluster, предпочтительно AWS EKS
  • Шлем

Что вы получаете

  • Прометей сервер
  • Экспортер Node Prometheus
  • Прометея оповещения менеджера
  • Прометеус толчок шлюза
  • Метрики штата Кубе

Настраивать

Место для хранения

Прежде чем мы начнем, стоит упомянуть требования к хранению файлов Прометея. Прометею сервер будет работать с прикрепленным томом (PV), и этот том будет использоваться в базе данных временных рядов для хранения различных метрик, которые он собирает в /данные папка. Обратите внимание, что мы установили наш PV до 100GI в следующей строке values.yaml Анкет

https://github.com/ryanoolala/recipes/blob/8a732de67f309a58a45dec2d29218dfb01383f9b/metrics/prometheus/5min/k8s/values.yaml#L765
## Prometheus server data Persistent Volume size
    ##
    size: 100Gi

Это создаст объем EBS 100GIB, прикрепленный к нашему Prometheus-Server. Итак, насколько велик диск нам нужно предоставить? Существует несколько факторов, поэтому, как правило, будет трудно рассчитать правильный размер для текущего кластера, не зная, сколько размещено приложения, а также учитывать рост количества узлов/приложений.

Прометей также имеет период хранения данных по умолчанию в 15 дней, это предотвращение роста объема данных на неопределенный срок и может помочь нам контролировать размер данных, поскольку он удалит данные о показателях старше 15 дней.

В Docs Prometheus они предлагают расчет с использованием этой формулы с 1-2 bytes_per_sample

# https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects
needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

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

В моем кластере я бегаю

  • 20 узлов EC2
  • ~ 700 стручки
  • По умолчанию интервалы скраски
  • 15 -дневное удержание

Мое текущее использование диска составляет ~ 70 г.

Если цена 100 Гиб хранения приемлема для вас, в моем регионе это около 12 долларов США в месяц. Я думаю, что это хорошая отправная точка, и вы можете сэкономить время и усилия на расчет для подготовки хранилища и просто начать с этого.

Обратите внимание, что я запускаю Prometheus 2.x, который имеет улучшенный уровень хранения по сравнению с Prometheus 1 и показал, что он уменьшил использование хранения и, следовательно, более низкую потребность в диске, см. блог

С этим, давайте запустим наше приложение Prometheus.

Установка

$ helm install prometheus stable/prometheus -f https://github.com/ryanoolala/recipes/blob/master/metrics/prometheus/5min/k8s/values.yaml --create-namespace --namespace prometheus

Убедитесь, что все стручки Prometheus работают

kubectl get pod -n prometheus
NAME                                             READY   STATUS    RESTARTS   AGE
prometheus-alertmanager-78b5c64fd5-ch7hb         2/2     Running   0          67m
prometheus-kube-state-metrics-685dccc6d8-h88dv   1/1     Running   0          67m
prometheus-node-exporter-8xw2r                   1/1     Running   0          67m
prometheus-node-exporter-l5pck                   1/1     Running   0          67m
prometheus-pushgateway-567987c9fd-5mbdn          1/1     Running   0          67m
prometheus-server-7cd7d486cb-c24lm               2/2     Running   0          67m

Соединение Графаны с Прометеем

Чтобы получить доступ к пользовательскому интерфейсу Grafana, запустите Kubectl Port -Forward SVC/Grafana -n Grafana 8080: 80 , перейти к http://localhost: 8080 и войдите в систему с пользователем администратора, если вам нужны учетные данные, см. Предыдущий пост по инструкциям.

Перейдите в раздел DataSource под колесом настроек и нажмите «Добавить источник данных»

Если вы выполнили мои шаги, ваша настройка Prometheus создаст услугу с именем Прометей-Сервер В пространстве имен Прометея. Поскольку Grafana и Prometheus размещены в том же кластере, мы можем просто использовать назначенную внутреннюю запись, чтобы Grafana обнаружил Prometheus.

Под URL Textbox, Enter http://prometheus-server.prometheus.svc.cluster.local: 80 . Это DNS -запись Prometheus, которая будет разрешена для любого капсула в кластере, включая наш Pod Grafana. Ваша настройка должна выглядеть так.

Нажмите «Сохранить и тестировать», и Графана скажет вам, что источник данных работает.

Добавление мониторинга

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

https://grafana.com/grafana/dashboards/315 https://grafana.com/grafana/dashboards/1860 https://grafana.com/grafana/dashboards/11530

Мышь над значком «+» и выберите «Импорт», вставьте идентификатор панели панели в текстовую поле и нажмите «Загрузить»

Выберите наш DataSource Prometheus, который мы добавили на предыдущем шаге в раскрывающемся выборе

У вас будет приборная панель, которая выглядит так

Возможно, вы заметили «N/A» в нескольких панелях приборной панели, это распространенная проблема на различных панелях мониторинга из -за несовместимых версий Prometheus/Kubernetes с изменениями в метрических метках и т. Д. Нам придется отредактировать панель и отлаживать запросы, чтобы исправить их. Если слишком много ошибок, я предложу найти другую панель, пока вы не найдете ту, которая работает и соответствует вашим потребностям.

Возможно, вы задавались вопросом, как доступны все эти показатели, даже если вы просто развернули их, не настраивая что -либо, кроме дискового пространства. Чтобы понять архитектуру Прометея, ознакомьтесь с их Документация Анкет Я приложил архитектурную диаграмму из документов здесь для справки.

Мы будем держать это проще, только сосредоточившись на том, как мы получаем метрики узла и приложения (управляющие стручками). Помните, что в начале статьи мы отметили различные приложения Prometheus, которые вы получите, чтобы следовать этому руководству.

Prometheus-Server Pod будет тянуть метрики через HTTP-конечные точки, наиболее обычно /метрики Конечная точка из различных источников.

Метрики узла

Когда мы установили Prometheus, появляется Daemonset Prometheus-Node-Exporter Daemonset. Это гарантирует, что каждый узел в кластере будет иметь одну стручку узел-экспортера, который отвечает за получение метрик узлов и выявление их на его /Метрики конечная точка.

Метрики приложения

Прометеус-Сервер обнаружит услуги через API Kubernetes, чтобы найти стручки с конкретными аннотациями . В рамках конфигурации развертывания приложения вы обычно увидите следующие аннотации в различных других приложениях.

metadata:
  annotations:
    prometheus.io/path: /metrics
    prometheus.io/port: "4000"
    prometheus.io/scrape: "true

Это то, на что будет следить Прометея-Сервер, чтобы очистить метрики из стручков.

Так как это настроено?

Prometheus загрузит свою конфигурацию соскобки из файла с именем Prometheus.yml который представляет собой конфигурацию, установленную в Prometheus-Server Pod. Во время нашей установки с использованием диаграммы Helm этот файл настраивается внутри values.yaml , см. исходный код в values.yaml#l1167 Анкет Целевые показатели Scrape настроены на различных заданиях, и вы увидите несколько заданий, настроенных по умолчанию, каждая из которых обслуживает конкретную конфигурацию того, как и когда очистить.

Пример для наших метрик приложений найден на

#https://github.com/ryanoolala/recipes/blob/8a732de67f309a58a45dec2d29218dfb01383f9b/metrics/prometheus/5min/k8s/values.yaml#L1444
 - job_name: 'kubernetes-pods'

        kubernetes_sd_configs:
          - role: pod

        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: true
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
            action: replace
            target_label: __metrics_path__
            regex: (.+)
          - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
            action: replace
            regex: ([^:]+)(?::\d+)?;(\d+)
            replacement: $1:$2
            target_label: __address__
          - action: labelmap
            regex: __meta_kubernetes_pod_label_(.+)
          - source_labels: [__meta_kubernetes_namespace]
            action: replace
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_pod_name]
            action: replace
            target_label: kubernetes_pod_name

Это то, что настраивает Prometheus-Server для очистки стручков с аннотациями, о которых мы говорили ранее.

При этом у вас будет функционирующий метрический коллекционер и панель инструментов, чтобы помочь начать путешествие по наблюдению в метрик. Прометей, который мы создали в этом руководстве, сможет обеспечить здоровую настройку в большинстве систем.

Тем не менее, есть одно ограничение, которое нужно принять к сведению, и это этот прометей не настроен на высокую доступность (HA)

Поскольку это использует объем упругих блоков (EBS), как мы объяснили в предыдущем посте, это не позволит нам расширить масштаб Prometheus-Server обеспечить лучшее время безотказной работы, если Prometheus Pod перезагружается, возможно, с -Ф-память (oomkilld) или нездоровые узлы, и если у вас есть оповещения, установленные с использованием метрик, это может быть раздражающей проблемой, так как вы на данный момент потеряете свои показатели, и слепые к текущей ситуации.

Решение этой проблемы — это то, что я еще предстоит развернуть себя, и когда я это сделаю, я напишу часть 3 этой серии, но если вы заинтересованы в том, чтобы попробовать ее, посмотрите Танос Анкет

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

Grafana-Cloudwatch-Prometheus (2 серии деталей)

Оригинал: «https://dev.to/mcf/getting-started-with-grafana-and-prometheus-for-metric-monitoring-3e3j»