Как настроить мониторинг кластера DigitalOcean Kubernetes с помощью руля и оператора Prometheus

Вступление

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

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

Одним из популярных решений для мониторинга является стекPrometheus,Grafana иAlertmanager с открытым исходным кодом:

  • Prometheus - это база данных временных рядов и инструмент мониторинга, который работает, опрашивая конечные точки метрик, а также очищая и обрабатывая данные, предоставляемые этими конечными точками. Он позволяет запрашивать эти данные, используяPromQL, язык запросов данных временных рядов.

  • Grafana - это инструмент визуализации и аналитики данных, позволяющий создавать информационные панели и графики для данных ваших показателей.

  • Alertmanager, обычно развертываемый вместе с Prometheus, формирует уровень предупреждений в стеке, обрабатывая предупреждения, генерируемые Prometheus, и дедуплицирует, группирует и направляет их в такие интеграции, как электронная почта илиPagerDuty.

Кроме того, такие инструменты, какkube-state-metrics иnode_exporter, предоставляют метрики объектов Kubernetes на уровне кластера, а также метрики на уровне машины, такие как использование ЦП и памяти.

Реализовать этот стек мониторинга в кластере Kubernetes может быть сложно, но, к счастью, с некоторыми из этих сложностей можно справиться с помощью диспетчера пакетовHelm и проектов CoreOSPrometheus Operator иkube-prometheus. Эти проекты представляют собой стандартные конфигурации и панели мониторинга для Prometheus и Grafana и абстрагируют некоторые определения объектов Kubernetes более низкого уровня. Helmprometheus-operator chart позволяет вам запустить и запустить полное решение для мониторинга кластера, установив Prometheus Operator и остальные компоненты, перечисленные выше, а также стандартный набор панелей мониторинга, правил и предупреждений, полезных для мониторинга кластеров Kubernetes.

В этом руководстве мы продемонстрируем, как установить диаграмму Helmprometheus-operator в кластер DigitalOcean Kubernetes. К концу учебного курса вы уже установили полный стек мониторинга в свой кластер.

Предпосылки

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

  • КластерDigitalOcean Kubernetes.

  • Интерфейс командной строкиkubectl, установленный на вашем локальном компьютере и настроенный для подключения к вашему кластеру. Вы можете узнать больше об установке и настройкеkubectlin its official documentation.

  • Диспетчер пакетовHelm (2.10+), установленный на вашем локальном компьютере, и Tiller, установленный в вашем кластере, как подробно описано вHow To Install Software on Kubernetes Clusters with the Helm Package Manager.

[[step-1 -—- created-a-custom-values-file]] == Шаг 1. Создание файла пользовательских значений

Перед установкой диаграммы Helmprometheus-operator мы создадим файл пользовательских значений, который заменит некоторые настройки диаграммы по умолчанию параметрами конфигурации, специфичными для DigitalOcean. Чтобы узнать больше о переопределении значений диаграммы по умолчанию, обратитесь к разделуHelm Install документации Helm.

Для начала создайте и откройте файл с именемcustom-values.yaml на вашем локальном компьютере с помощьюnano или вашего любимого редактора:

nano custom-values.yaml

Скопируйте и вставьте следующие пользовательские значения, которые обеспечивают постоянное хранение для компонентов Prometheus, Grafana и Alertmananger, а также отключают мониторинг для компонентов плоскости управления Kubernetes, не представленных в DigitalOcean Kubernetes:

custom-values.yaml

# Define persistent storage for Prometheus (PVC)
prometheus:
  prometheusSpec:
    storageSpec:
      volumeClaimTemplate:
        spec:
          accessModes: ["ReadWriteOnce"]
          storageClassName: do-block-storage
          resources:
            requests:
              storage: 5Gi

# Define persistent storage for Grafana (PVC)
grafana:
  # Set password for Grafana admin user
  adminPassword: your_admin_password
  persistence:
    enabled: true
    storageClassName: do-block-storage
    accessModes: ["ReadWriteOnce"]
    size: 5Gi

# Define persistent storage for Alertmanager (PVC)
alertmanager:
  alertmanagerSpec:
    storage:
      volumeClaimTemplate:
        spec:
          accessModes: ["ReadWriteOnce"]
          storageClassName: do-block-storage
          resources:
            requests:
              storage: 5Gi

# Change default node-exporter port
prometheus-node-exporter:
  service:
    port: 30206
    targetPort: 30206

# Disable Etcd metrics
kubeEtcd:
  enabled: false

# Disable Controller metrics
kubeControllerManager:
  enabled: false

# Disable Scheduler metrics
kubeScheduler:
  enabled: false

В этом файле мы переопределяем некоторые значения по умолчанию, упакованные с диаграммой в ееvalues.yaml file.

Сначала мы включаем постоянное хранилище для Prometheus, Grafana и Alertmanager, чтобы их данные сохранялись при перезапуске Pod. За кулисами это определяет утверждение постоянного тома (PVC)5 Gi для каждого компонента с использованием класса хранилища DigitalOceanBlock Storage. Вы должны изменить размер этих PVCs в соответствии с вашими потребностями хранения данных. Чтобы узнать больше о PVC, обратитесь кPersistent Volumes в официальной документации Kubernetes.

Затем заменитеyour_admin_password на безопасный пароль, который вы будете использовать для входа на панель мониторинга показателейGrafana с пользователемadmin.

Затем мы настроим другой порт дляnode-exporter. Узел-экспортер работает на каждом узле Kubernetes и предоставляет метрики ОС и оборудования для Prometheus. Мы должны изменить порт по умолчанию, чтобы обойти настройки брандмауэра DigitalOcean Kubernetes, которые заблокируют порт 9100, но разрешат порты в диапазоне 30000-32767. Кроме того, вы можете настроить пользовательское правило брандмауэра для узла-экспортера. Чтобы узнать, как это сделать, обратитесь кHow to Configure Firewall Rules из официальных документов DigitalOcean Cloud Firewalls.

Наконец, мы отключим сбор метрик для трех Kubernetescontrol plane components, которые не предоставляют метрики в DigitalOcean Kubernetes: планировщик Kubernetes и диспетчер контроллеров, а также хранилище данных кластера etcd.

Чтобы увидеть полный список настраиваемых параметров для диаграммыprometheus-operator, обратитесь к разделуConfiguration в README репозитория диаграмм или в файле значений по умолчанию.

Когда вы закончите редактирование, сохраните и закройте файл. Теперь мы можем установить график с помощью Helm.

[[step-2 -—- install-the-prometheus-operator-chart]] == Шаг 2 - Установка диаграммыprometheus-operator

Диаграмма Helmprometheus-operator установит следующие компоненты мониторинга в ваш кластер DigitalOcean Kubernetes:

  • Оператор Prometheus, KubernetesOperator, который позволяет настраивать кластеры Prometheus и управлять ими. Kubernetes Operators интегрируют доменную логику в процесс упаковки, развертывания и управления приложениями с Kubernetes. Чтобы узнать больше об операторах Kubernetes, обратитесь кCoreOS Operators Overview. Чтобы узнать больше об Операторе Прометей, обратитесь кthis introductory post об Операторе Прометей и Операторе ПрометейGitHub repo. Оператор Прометей будет установлен какDeployment.

  • Prometheus, установленный какStatefulSet.

  • Alertmanager, сервис, который обрабатывает оповещения, отправленные сервером Prometheus, и направляет их к таким интеграциям, как PagerDuty или электронная почта. Чтобы узнать больше о Alertmanager, обратитесь кAlerting из документации Prometheus. Alertmanager будет установлен как StatefulSet.

  • Grafana, инструмент визуализации данных временных рядов, который позволяет вам визуализировать и создавать информационные панели для ваших метрик Prometheus. Графана будет установлена ​​как Развертывание.

  • node-exporter, экспортер Prometheus, который работает на узлах кластера и предоставляет метрики ОС и оборудования для Prometheus. Проконсультируйтесь сnode-exporter GitHub repo, чтобы узнать больше. узел-экспортер будет установлен какDaemonSet.

  • kube-state-metrics, дополнительный агент, который прослушивает сервер API Kubernetes и генерирует метрики о состоянии объектов Kubernetes, таких как Deployments и Pod. Вы можете узнать больше, обратившись кkube-state-metrics GitHub repo. kube-state-metrics будет установлен как развертывание.

По умолчанию, наряду со соскребаемыми метриками, сгенерированными с помощью экспортера узлов, kube-state-metrics и других компонентов, перечисленных выше, Prometheus будет настроен для очистки метрик от следующих компонентов:

  • kube-apiserver,Kubernetes API server.

  • CoreDNS, DNS-сервер кластера Kubernetes.

  • kubelet, агент основного узла, который взаимодействует с kube-apiserver для управления модулями и контейнерами на узле.

  • cAdvisor, агент узла, который обнаруживает запущенные контейнеры и собирает их показатели использования ЦП, памяти, файловой системы и сети.

На вашем локальном компьютере давайте начнем с установки диаграммы Helmprometheus-operator и передачи файла пользовательских значений, который мы создали выше:

helm install --namespace monitoring --name doks-cluster-monitoring -f custom-values.yaml stable/prometheus-operator

Здесь мы запускаемhelm install и устанавливаем все компоненты в пространство именmonitoring, которое мы создаем одновременно. Это позволяет нам четко отделить стек мониторинга от остальной части кластера Kubernetes. Мы называем выпуск Helmdoks-cluster-monitoring и передаем файл пользовательских значений, который мы создали вStep 1. Наконец, мы указываем, что хотим установить диаграммуprometheus-operator из Helmstabledirectory.

Вы должны увидеть следующий вывод:

OutputNAME:   doks-cluster-monitoring
LAST DEPLOYED: Mon Apr 22 10:30:42 2019
NAMESPACE: monitoring
STATUS: DEPLOYED

RESOURCES:
==> v1/PersistentVolumeClaim
NAME                             STATUS   VOLUME            CAPACITY  ACCESS MODES  STORAGECLASS  AGE
doks-cluster-monitoring-grafana  Pending  do-block-storage  10s

==> v1/ServiceAccount
NAME                                              SECRETS  AGE
doks-cluster-monitoring-grafana                   1        10s
doks-cluster-monitoring-kube-state-metrics        1        10s

. . .

==> v1beta1/ClusterRoleBinding
NAME                                                  AGE
doks-cluster-monitoring-kube-state-metrics            9s
psp-doks-cluster-monitoring-prometheus-node-exporter  9s


NOTES:
The Prometheus Operator has been installed. Check its status by running:
  kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"

Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.

Это указывает на то, что Prometheus Operator, Prometheus, Grafana и другие перечисленные выше компоненты были успешно установлены в вашем кластере DigitalOcean Kubernetes.

Следуя примечанию в выходных данныхhelm install, проверьте состояние модулей выпуска с помощьюkubectl get pods:

kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"

Вы должны увидеть следующее:

OutputNAME                                                         READY   STATUS    RESTARTS   AGE
doks-cluster-monitoring-grafana-9d7f984c5-hxnw6              2/2     Running   0          3m36s
doks-cluster-monitoring-kube-state-metrics-dd8557f6b-9rl7j   1/1     Running   0          3m36s
doks-cluster-monitoring-pr-operator-9c5b76d78-9kj85          1/1     Running   0          3m36s
doks-cluster-monitoring-prometheus-node-exporter-2qvxw       1/1     Running   0          3m36s
doks-cluster-monitoring-prometheus-node-exporter-7brwv       1/1     Running   0          3m36s
doks-cluster-monitoring-prometheus-node-exporter-jhdgz       1/1     Running   0          3m36s

Это указывает на то, что все компоненты мониторинга запущены и работают, и вы можете приступить к изучению метрик Prometheus, используя Grafana и его предварительно сконфигурированные панели мониторинга.

[[step-3 -—- accessing-grafana-and-explore-metrics-data]] == Шаг 3. Доступ к Grafana и изучение данных метрик

Диаграммаprometheus-operator Helm представляет Grafana как службуClusterIP, что означает, что она доступна только через внутренний IP-адрес кластера. Чтобы получить доступ к Grafana за пределами вашего кластера Kubernetes, вы можете использоватьkubectl patch для обновления Службы на месте до общедоступного типа, такого какNodePort илиLoadBalancer, илиkubectl port-forward для перенаправить локальный порт в порт Grafana Pod.

В этом руководстве мы будем перенаправлять порты, но чтобы узнать больше оkubectl patch и типах сервисов Kubernetes, вы можете обратиться кUpdate API Objects in Place Using kubectl patch иServices из официальных документов Kubernetes.

Начните с перечисления запущенных служб в пространстве именmonitoring:

kubectl get svc -n monitoring

Вы должны увидеть следующие Услуги:

OutputNAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
alertmanager-operated                              ClusterIP   None                     9093/TCP,6783/TCP   34m
doks-cluster-monitoring-grafana                    ClusterIP   10.245.105.130           80/TCP              34m
doks-cluster-monitoring-kube-state-metrics         ClusterIP   10.245.140.151           8080/TCP            34m
doks-cluster-monitoring-pr-alertmanager            ClusterIP   10.245.197.254           9093/TCP            34m
doks-cluster-monitoring-pr-operator                ClusterIP   10.245.14.163            8080/TCP            34m
doks-cluster-monitoring-pr-prometheus              ClusterIP   10.245.201.173           9090/TCP            34m
doks-cluster-monitoring-prometheus-node-exporter   ClusterIP   10.245.72.218            30206/TCP           34m
prometheus-operated                                ClusterIP   None                     9090/TCP            34m

Мы собираемся перенаправить локальный порт8000 на порт80 службыdoks-cluster-monitoring-grafana, который, в свою очередь, будет перенаправлять на порт3000 работающего модуля Grafana Pod. Эти сервисные порты и порты Pod настроены на диаграмме управленияstable/grafanavalues file:

kubectl port-forward -n monitoring svc/doks-cluster-monitoring-grafana 8000:80

Вы должны увидеть следующий вывод:

OutputForwarding from 127.0.0.1:8000 -> 3000
Forwarding from [::1]:8000 -> 3000

Это указывает на то, что локальный порт8000 успешно перенаправляется на Grafana Pod.

Посетитеhttp://localhost:8000 в своем браузере. Вы должны увидеть следующую страницу входа Grafana:

Grafana Login Page

Введитеadmin в качестве имени пользователя и пароля, которые вы настроили вcustom-values.yaml. Затем нажмитеLog In.

Вы попадете в следующийHome Dashboard:

Grafana Home Page

На левой панели навигации нажмите кнопкуDashboards, затем нажмитеManage:

Grafana Dashboard Tab

Вы попадете в следующий интерфейс управления панелью мониторинга, в котором перечислены панели мониторинга, установленные с помощью диаграммы Helmprometheus-operator:

Grafana Dashboard List

Эти информационные панели создаютсяkubernetes-mixin, проектом с открытым исходным кодом, который позволяет вам создавать стандартизированный набор кластерных панелей мониторинга Grafana и предупреждений Prometheus. Чтобы узнать больше, обратитесь кKubernetes Mixin GitHub repo.

Щелкните на панели управленияKubernetes / Nodes, которая визуализирует использование ЦП, памяти, диска и сети для данного узла:

Grafana Nodes Dashboard

Описание каждой панели мониторинга и ее использования для визуализации данных метрики вашего кластера выходит за рамки данного руководства. Чтобы узнать больше о методе USE для анализа производительности системы, вы можете обратиться к странице Брендана ГреггаThe Utilization Saturation and Errors (USE) Method. SRE Book от Google - еще один полезный ресурс, в частности, глава 6:Monitoring Distributed Systems. Чтобы узнать, как создавать собственные панели управления Grafana, посетите страницу GrafanaGetting Started.

На следующем шаге мы последуем аналогичному процессу подключения и изучения системы мониторинга Prometheus.

[[step-4 -—- accessing-prometheus-and-alertmanager]] == Шаг 4. Доступ к Prometheus и Alertmanager

Чтобы подключиться к модулям Prometheus Pods, мы снова должны использоватьkubectl port-forward для перенаправления локального порта. Если вы закончили изучение Графаны, вы можете закрыть туннель с переадресацией портов, нажавCTRL-C. В качестве альтернативы вы можете открыть новую оболочку и соединение через порт.

Начните с перечисления запущенных служб в пространстве именmonitoring:

kubectl get svc -n monitoring

Вы должны увидеть следующие Услуги:

OutputNAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
alertmanager-operated                              ClusterIP   None                     9093/TCP,6783/TCP   34m
doks-cluster-monitoring-grafana                    ClusterIP   10.245.105.130           80/TCP              34m
doks-cluster-monitoring-kube-state-metrics         ClusterIP   10.245.140.151           8080/TCP            34m
doks-cluster-monitoring-pr-alertmanager            ClusterIP   10.245.197.254           9093/TCP            34m
doks-cluster-monitoring-pr-operator                ClusterIP   10.245.14.163            8080/TCP            34m
doks-cluster-monitoring-pr-prometheus              ClusterIP   10.245.201.173           9090/TCP            34m
doks-cluster-monitoring-prometheus-node-exporter   ClusterIP   10.245.72.218            30206/TCP           34m
prometheus-operated                                ClusterIP   None                     9090/TCP            34m

Мы собираемся перенаправить локальный порт9090 на порт9090 службыdoks-cluster-monitoring-pr-prometheus:

kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-prometheus 9090:9090

Вы должны увидеть следующий вывод:

OutputForwarding from 127.0.0.1:9090 -> 9090
Forwarding from [::1]:9090 -> 9090

Это означает, что локальный порт9090 успешно перенаправляется на модуль Prometheus.

Посетитеhttp://localhost:9090 в своем браузере. Вы должны увидеть следующую страницу PrometheusGraph:

Prometheus Graph Page

Отсюда вы можете использовать PromQL, язык запросов Prometheus, для выбора и агрегирования метрик временных рядов, хранящихся в его базе данных. Чтобы узнать больше о PromQL, обратитесь кQuerying Prometheus в официальной документации Prometheus.

В полеExpression введитеmachine_cpu_cores и нажмитеExecute. Вы должны увидеть список временных рядов с метрикойmachine_cpu_cores, которая сообщает количество ядер ЦП на данном узле. Вы можете увидеть, какой узел сгенерировал метрику и какое задание удалило метрику в метках метрики.

Наконец, на верхней панели навигации нажмитеStatus, а затемTargets, чтобы увидеть список целей, которые Prometheus настроил для очистки. Вы должны увидеть список целей, соответствующий списку конечных точек мониторинга, описанному в началеStep 2.

Чтобы узнать больше о Promtheus и о том, как запросить метрики кластера, обратитесь к официальномуPrometheus docs.

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

Чтобы подключиться к модулям Alertmanager Pods, мы снова будем использоватьkubectl port-forward для перенаправления локального порта. Если вы закончили изучение Прометея, вы можете закрыть туннель с переадресацией портов, нажавCTRL-C. В качестве альтернативы вы можете открыть новую оболочку и соединение через порт.

Начните с перечисления запущенных служб в пространстве именmonitoring:

kubectl get svc -n monitoring

Вы должны увидеть следующие Услуги:

OutputNAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
alertmanager-operated                              ClusterIP   None                     9093/TCP,6783/TCP   34m
doks-cluster-monitoring-grafana                    ClusterIP   10.245.105.130           80/TCP              34m
doks-cluster-monitoring-kube-state-metrics         ClusterIP   10.245.140.151           8080/TCP            34m
doks-cluster-monitoring-pr-alertmanager            ClusterIP   10.245.197.254           9093/TCP            34m
doks-cluster-monitoring-pr-operator                ClusterIP   10.245.14.163            8080/TCP            34m
doks-cluster-monitoring-pr-prometheus              ClusterIP   10.245.201.173           9090/TCP            34m
doks-cluster-monitoring-prometheus-node-exporter   ClusterIP   10.245.72.218            30206/TCP           34m
prometheus-operated                                ClusterIP   None                     9090/TCP            34m

Мы собираемся перенаправить локальный порт9093 на порт9093 службыdoks-cluster-monitoring-pr-alertmanager.

kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-alertmanager 9093:9093

Вы должны увидеть следующий вывод:

OutputForwarding from 127.0.0.1:9093 -> 9093
Forwarding from [::1]:9093 -> 9093

Это означает, что локальный порт9093 успешно перенаправляется на модуль Alertmanager Pod.

Посетитеhttp://localhost:9093 в своем браузере. Вы должны увидеть следующую страницу AlertmanagerAlerts:

Alertmanager Alerts Page

Отсюда вы можете изучить оповещения об увольнении и, при необходимости, отключить их. Чтобы узнать больше о Alertmanager, обратитесь кofficial Alertmanager documentation.

Заключение

В этом руководстве вы установили стек мониторинга Prometheus, Grafana и Alertmanager в свой кластер DigitalOcean Kubernetes со стандартным набором панелей мониторинга, правил Prometheus и оповещений. Поскольку это было сделано с помощью Helm, вы можете использоватьhelm upgrade,helm rollback иhelm delete для обновления, отката или удаления стека мониторинга. Чтобы узнать больше об этих функциях, обратитесь кHow To Install Software on Kubernetes Clusters with the Helm Package Manager.

Диаграммаprometheus-operator помогает быстро настроить и запустить мониторинг кластера с помощью Helm. Вы можете создать, развернуть и настроить Prometheus Operator вручную. Для этого обратитесь к репозиториямPrometheus Operator иkube-prometheus на GitHub.

Related