Информационный портал по безопасности » Программирование » Мониторинг с Prometheus в Kubernetes за 15 минут

 

Мониторинг с Prometheus в Kubernetes за 15 минут

Автор: admin от 24-10-2017, 08:55, посмотрело: 733

Мониторинг с Prometheus в Kubernetes за 15 минут


Прим. перев.: Автор статьи Giancarlo Rubio — DevOps-инженер из ИТ-компании LINKIT (Нидерланды) — через онлайн-ресурс ITNEXT делится лаконичным рецептом по настройке мониторинга с Prometheus в Kubernetes с помощью Prometheus Operator. Инструкция появилась как следствие недавнего опыта выбора и внедрения системы проактивного мониторинга после миграции проекта с bare metal на облачную инфраструктуру. Рецепт отлично подходит для быстрого теоретического (первая половина статьи) и практического (вторая половина) знакомства. Для некоторых команд исправлены URL'ы, которые в оригинальном материале, по всей видимости, были преобразованы движком medium.Prometheus Operator, который отлично соответствовал моим потребностям, упрощая всю начальную конфигурацию.



Kubernetes Operator



«Операторами (Operators) мы называем новый класс программного обеспечения. Оператор — специфичный для приложения контроллер, расширяющий Kubernetes API возможностями создания и конфигурации экземпляров сложных stateful-приложений, а также управления ими от имени пользователя Kubernetes. Оператор основан на концепциях ресурса и контроллера в Kubernetes и добавляет к ним знания из определенной области или специфичных для приложения для автоматизации основных задач».

— Brandon Philips из CoreOS.



Операторы для Kubernetes были представлены в 2016 году и предлагают возможность абстрагировать разворачивание и конфигурацию приложений. Сам я успел активно поработать с elasticsearch-operator и prometheus-operator. Подробное описание операторов для Kubernetes не входит в задачи статьи, а всем заинтересованным предлагаю ознакомиться со списком других доступных операторов здесь.



Прим. перев.: подробнее об операторах для Kubernetes и их использовании для работы со stateful-приложениями мы писали в этой статье.



Prometheus



Prometheus — набор утилит с открытым кодом для мониторинга и уведомлений (alerts), созданный под вдохновением от Google Borg Monitor. Его разработку начинали в SoundCloud, а затем передали в фонд CNCF. (Прим. перев.: об истории появления Prometheus мы недавно писали в этой статье.)



Prometheus поддерживает приложения на многих языках программирования. Будучи отличным решением для мониторинга инфраструктуры и приложений, он также предлагает готовую интеграцию для подключения известных приложений (включая PostgreSQL, MySQL, AWS Cloudwatch, etcd, K8s и т.п.) в виде exporters.



Prometheus Operator



«Миссия Prometheus Operator — сделать запуск Prometheus поверх Kubernetes максимально простым, сохранив конфигурируемость и осуществляя конфигурацию в родном для Kubernetes виде».

Getting Started Guide по Prometheus Operator.



Prometheus Operator предлагает простой мониторинг для сервисов и deployments в K8s, а также управление настройками Prometheus, Alertmanager и Grafana (подробнее о них — см. ниже).



Как это работает?



Мониторинг с Prometheus в Kubernetes за 15 минут
Архитектура Prometheus Operator. Источник: GitHub



Когда вы разворачиваете новую версию приложения, K8s создаёт новый под и, когда этот под готов, уничтожает старый. Prometheus постоянно отслеживает Kubernetes API и, когда обнаруживает изменения, создаёт новую конфигурацию Prometheus, руководствуясь изменениями в службах (подах).



ServiceMonitor



Prometheus Operator использует Custom Resource Definition (CRD) под названием ServiceMonitor, чтобы абстрагировать конфигурацию. В примере ниже можно увидеть, как с помощью ServiceMonitor мониторить под с nginx. ServiceMonitor выбирает под с nginx с помощью селектора matchLabels. Prometheus Operator ищет поды, соответствующие селектору лейбла, и создаёт целевой объект, с которого Prometheus будет собирать метрики.



apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  namespaceSelector:
    matchNames:
    - default
  endpoints:
  - port: web
interval: 30s


Пробуем сами



Дальнейшая инструкция может быть выполнена менее чем за 15 минут, если у вас уже есть:




  1. Поднятый и работающий кластер Kubernetes.

  2. Установленный и работающий Helm.

  3. helm list.



Установка



1. Создайте пространство имён и склонируйте Git-репозиторий prometheus-operator:



$ kubectl create ns monitoring
$ git clone https://github.com/coreos/prometheus-operator.git
$ cd prometheus-operator


2. Установите prometheus-operator deployment:



$ helm install --name prometheus-operator  
  --set rbacEnable=true --namespace=monitoring helm/prometheus-operator


3. Установите Prometheus и Alertmanager specs, а также Grafana deployment:



$ helm install --name prometheus --set serviceMonitorsSelector.app=prometheus  
  --set ruleSelector.app=prometheus --namespace=monitoring helm/prometheus
$ helm install --name alertmanager --namespace=monitoring helm/alertmanager
$ helm install --name grafana --namespace=monitoring helm/grafana


4. Установите kube-prometheus, чтобы загрузить предопределённые k8s exporters и serviceMonitors:



$ helm install --name kube-prometheus --namespace=monitoring helm/kube-prometheus


Если всё прошло успешно, можно запустить эту команду для вывода списка приложений:



$ kubectl get pods -n monitoring
NAME                                                      READY     STATUS    RESTARTS   AGE
alertmanager-alertmanager-0                               2/2       Running   0          3m
grafana-grafana-3066287131-brj8n                          2/2       Running   0          4m
kube-prometheus-exporter-kube-state-2696859725-s8m56      2/2       Running   0          3m
kube-prometheus-exporter-node-029w0                       1/1       Running   0          3m
kube-prometheus-exporter-node-n3txz                       1/1       Running   0          3m
kube-prometheus-exporter-node-q2rk3                       1/1       Running   0          3m
prometheus-operator-prometheus-operator-514889780-qm3fp   1/1       Running   0          4m
prometheus-prometheus-0                                   2/2       Running   0          3m


Prometheus



Пробросьте сервер Prometheus на свой компьютер, чтобы получить доступ к панели через http://localhost:9090:



$ kubectl port-forward -n monitoring prometheus-prometheus-0 9090


Мониторинг с Prometheus в Kubernetes за 15 минут


В панели Prometheus можно делать запросы к метрикам, просматривать предопределённые уведомления и целевые объекты Prometheus.



Обратите внимание: Если какие-то цели возвращают ошибку недоступности, проверьте группы безопасности и правила firewall. Если у вас нет целей, представленных на скриншоте выше, проверьте лейблы подов K8s, т.к. иногда утилиты, используемые для деплоя кластера, не ставят их.



Обратите внимание (№2): В проекте prometheus-operator работают над упаковкой стандартных уведомлений для K8s в Helm chart. Однако сейчас для их загрузки требуется выполнить последовательность из команд ниже (в будущем эта необходимость пропадёт):



$ sed -ie 's/role: prometheus-rulefiles/app: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ sed -ie 's/prometheus: k8s/prometheus: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ sed -ie 's/job="kube-controller-manager/job="kube-prometheus-exporter-kube-controller-manager/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ sed -ie 's/job="apiserver/job="kube-prometheus-exporter-kube-api/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ sed -ie 's/job="kube-scheduler/job="kube-prometheus-exporter-kube-scheduler/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ sed -ie 's/job="node-exporter/job="kube-prometheus-exporter-node/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
$ kubectl apply -n monitoring -f contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml


Grafana



Для отладочных целей у Prometheus есть expression browser. Чтобы получить красивую панель, воспользуйтесь Grafana со встроенной возможностью выполнять запросы в Prometheus.



Обратите внимание: В проекте prometheus-operator работают над созданием простого deployment для Grafana, вероятно, с использованием нового CRD. На данный момент для её настройки требуется выполнить следующие команды (в будущем эта необходимость пропадёт):



$ sed -ie 's/grafana-dashboards-0/grafana-grafana/g' https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
$ sed -ie 's/prometheus-k8s.monitoring/prometheus-prometheus.monitoring/g' https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
$ kubectl apply -n monitoring -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
$ kubectl port-forward -n monitoring $(kubectl get pods --selector=app=grafana-grafana -n monitoring --output=jsonpath={.items..metadata.name})  3000


Подождите несколько секунд, пока Grafana загрузит данные, откройте http://localhost:3000 в браузере и изучайте замечательные графики!



Мониторинг с Prometheus в Kubernetes за 15 минут
Grafana: доступные dashboards для Kubernetes



Мониторинг с Prometheus в Kubernetes за 15 минут
Grafana: графики для планирования занятости/производительности Kubernetes



Alertmanager



Alertmanager обслуживает уведомления, отправляемые клиентскими приложениями вроде сервера Prometheus. Он обеспечивает устранение дублей, группировку, отправку в правильный сервис-получатель вроде электронной почты, PagerDuty или OpsGenie. Также он отвечает за заглушение (silence) и подавление (inhibit) уведомлений.



Мы уже установили Alertmanager командами выше, и осталось пробросить порт сервиса на ваш компьютер, после чего можно будет открывать http://localhost:9093 в веб-браузере:



$ kubectl port-forward -n monitoring alertmanager-alertmanager-0 9093


Готово



Все компоненты K8s добавлены в мониторинг. Рекомендую также посмотреть это видео на YouTube, чтобы лучше разобраться с тем, как работает prometheus-operator.



P.S. от переводчика



Автор также обещает рассказать в своей следующей статье о настройке уведомлений с использованием Alertmanager. Её появления можно ожидать здесь.



Читайте также в нашем блоге:





Источник: Хабрахабр

Категория: Программирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent