Вступление
Наряду с отслеживанием и регистрацией, мониторинг и оповещение являются важными компонентами стека наблюдаемости 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
, установленный на вашем локальном компьютере и настроенный для подключения к вашему кластеру. Вы можете узнать больше об установке и настройкеkubectl
in 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
из Helmstable
directory.
Вы должны увидеть следующий вывод:
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/grafana
values 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:
Введитеadmin в качестве имени пользователя и пароля, которые вы настроили вcustom-values.yaml
. Затем нажмитеLog In.
Вы попадете в следующийHome Dashboard:
На левой панели навигации нажмите кнопкуDashboards, затем нажмитеManage:
Вы попадете в следующий интерфейс управления панелью мониторинга, в котором перечислены панели мониторинга, установленные с помощью диаграммы Helmprometheus-operator
:
Эти информационные панели создаютсяkubernetes-mixin
, проектом с открытым исходным кодом, который позволяет вам создавать стандартизированный набор кластерных панелей мониторинга Grafana и предупреждений Prometheus. Чтобы узнать больше, обратитесь кKubernetes Mixin GitHub repo.
Щелкните на панели управленияKubernetes / Nodes, которая визуализирует использование ЦП, памяти, диска и сети для данного узла:
Описание каждой панели мониторинга и ее использования для визуализации данных метрики вашего кластера выходит за рамки данного руководства. Чтобы узнать больше о методе 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:
Отсюда вы можете использовать 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, обратитесь к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.