Учебник Premetheus, который Xiaobai может легко начать с

Kubernetes
Учебник Premetheus, который Xiaobai может легко начать с

Эта статья последует за предыдущейОб использовании Prometheus для настройки пользовательских правил предупрежденийстатья. В этой статье мы продемонстрируем процесс установки Prometheus и настройки Alertmanager для отправки писем при срабатывании оповещений, но сделаем все проще — через установку Rancher.

В этом посте мы увидим, как это можно сделать без использования зависимостей. В этой статье нам не нужно:

  • Специально настроен для запуска kubectl, указывающего на кластер Kubernetes.

  • Знание kubectl, поскольку мы можем использовать Rancher UI

  • Установка/настройка бинарника Helm

Предварительная подготовка

  • Учетная запись Google Cloud Platform (бесплатно), то же самое для других облаков.

  • Rancher v2.4.2 (последняя версия на момент публикации статьи)

  • Кластер Kubernetes, работающий на GKE (версия 1.15.11-gke.3) (также работает EKS или AKS)

Запустите экземпляр Rancher

Сначала запустите экземпляр Rancher. Вы можете начать, следуя инструкциям Rancher:

woohoo.rancher.talent/быстрый старт…

Разверните кластер GKE с помощью Rancher

Используйте Rancher для установки и настройки кластера Kubernetes. Вы можете перейти по ссылке ниже для документации:

rancher2.docs.rancher.capable/docs/carust…

Развернуть Прометей

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

Как только наш кластер будет запущен, давайте выберем созданный для него проект по умолчанию на вкладке «Приложения» и нажмем кнопку «Запустить».

Теперь мы должны искать график, которую мы заинтересованы. Мы можем настроить много поле - но для этого демонстрация мы будем держать по умолчанию. Вы можете найти полезную информацию об этих значениях в разделе подробное описание. Не беспокоясь о проблеме, хотя чтобы увидеть их использование. Внизу страницы нажмите [Запуск]. PROMETHEUS SERVER и ALERTMANGER будет установлен и настроен.

Когда установка будет завершена, страница будет выглядеть так:

Далее нам нужно создать Сервисы для доступа к Prometheus Server и Alertmanager. Перейдите на вкладку «Рабочая нагрузка» под ресурсом, и в разделе балансировки нагрузки мы увидим, что конфигурации еще нет. Нажмите «Импорт YAML», выберите пространство имен prometheus, скопируйте сразу два YAML и нажмите «Импорт». Позже вы увидите, как мы узнаем, какие конкретные порты и теги компонентов использовать.

apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 9090
      protocol: TCP
  selector:
    component: server
apiVersion: v1
kind: Service
metadata:
  name: alertmanager-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 9093
      protocol: TCP
  selector:
    component: alertmanager

После завершения служба будет отображаться как Активная.

В раскрывающемся меню с вертикальным многоточием справа вы можете найти IP и нажать View/Edit YAML. В нижней части файла yaml вы увидите такой раздел:

status:
  loadBalancer:
    ingress:
      - ip: 34.76.22.14

Доступ к IP покажет нам графический интерфейс Prometheus Server и Alertmanager. Вы обнаружите, что в этот момент нечего просматривать, так как не были определены правила и настроены оповещения.

Добавить правило

Правило позволяет нам вызвать тревогу. Эти правила основаны на языке экспрессии PROMETHEUS. Всякий раз, когда они соответствуют условиям, сигнал тревоги будет вызван и отправлен в AlertManager.

Теперь давайте посмотрим, как мы можем добавить правила.

На вкладке «Ресурсы» -> «Рабочие нагрузки» мы можем увидеть, что создало развертывание при запуске диаграммы. Давайте посмотрим поближеprometheus-serverиprometheus-alertmanager.

Мы начинаем с первого и разбираемся в его конфигурации, как мы можем его редактировать и понимаем, на каком порту работает служба. Нажмите кнопку меню с вертикальным многоточием и выберите «Просмотр/редактирование YAML».

Прежде всего, мы видим, что два Deplolyment связаны с контейнером:prometheus-server-configmap-reloadиprometheus-server. контейнерprometheus-serverВ специальном разделе есть важная информация:

Как мы узнали, Прометей проходитprometheus.ymlнастроить. Этот файл (и другие, перечисленные в serverFiles) будут подключены к серверному модулю. Чтобы добавлять/редактировать правила, нам нужно изменить этот файл. По сути, это Config Map, которую можно найти на вкладке Resources Config. Нажмите кнопку меню вертикального пропуска и выберите «Редактировать». В разделе Правила добавим новое правило и нажмем Сохранить.

groups:
  - name: memory demo alert
    rules:
      - alert: High Pod Memory
        expr: container_memory_usage_bytes{pod_name=~"nginx-.*", image!="", container!="POD"} > 5000000
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: High Memory Usage

  - name: cpu demo alert
    rules:
      - alert: High Pod CPU
        expr: rate (container_cpu_usage_seconds_total{pod_name=~"nginx-.*", image!="", container!="POD"}[5m]) > 0.04
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: High CPU Usage

Правила будут загружены автоматически сервером Prometheus, и мы можем увидеть их в графическом интерфейсе сервера Prometheus:

Вот объяснение двух приведенных выше правил:

  • container_memory_usage_bytes: Текущее использование памяти (в байтах), включая всю память, независимо от времени.

  • container_cpu_usage_seconds_total: Кумулятивное время ЦП в секундах

Все индикаторы можно найти на следующих страницах:

GitHub.com/Google/cad В…

Все регулярные выражения в Prometheus используютRE2 syntax. Используя регулярные выражения, мы можем выбирать временные ряды только для подов, имена которых соответствуют определенному шаблону. В нашем примере нам нужно искать модули, начинающиеся с nginx-, и исключать «POD», так как это родительская контрольная группа контейнера, которая будет отображать статистику для всех контейнеров внутри модуля.

заcontainer_cpu_usage_seconds_totalНапример, мы используем так называемый подзапрос. Он возвращает наши показатели каждые 5 минут.

Если вы хотите узнать больше о запросе и примерах, вы можете найти их по адресуОфициальная документация ПрометеяПосмотреть в.

Настроить оповещения

Как только возникает проблема, оповещение может немедленно предупредить нас, чтобы мы могли сразу узнать, что в системе произошла ошибка. Prometheus предоставляет оповещения через компонент Alertmanager.

Шаги работы такие же, как для PROMETHEUS SERVER: в вкладке ResourceS-> Workloads нажмитеprometheus-alertmanagerКнопка правой строки меню, выберите View/Edit YAML, проверьте его конфигурацию:

Alertmanager черезalertmanager.ymlнастроить. Этот файл (и другие, перечисленные в файле alertmanagerFiles) будут смонтированы в модуле alertmanager. Далее нам нужно изменить configMap, связанный с менеджером предупреждений, чтобы установить предупреждения. На вкладке «Конфигурация» нажмитеprometheus-alertmanagerстроку в строке меню, а затем выберите Изменить. Используйте следующий код вместо базовой конфигурации:

global:
  resolve_timeout: 5m
route:
  group_by: [Alertname]
  # Send all notifications to me.
  receiver: demo-alert
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  routes:
    - match:
        alertname: DemoAlertName
      receiver: "demo-alert"

receivers:
  - name: demo-alert
    email_configs:
      - to: your_email@gmail.com
        from: from_email@gmail.com
        # Your smtp server address
        smarthost: smtp.gmail.com:587
        auth_username: from_email@gmail.com
        auth_identity: from_email@gmail.com
        auth_password: 16letter_generated token # you can use gmail account password, but better create a dedicated token for this
        headers:
          From: from_email@gmail.com
          Subject: "Demo ALERT"

Новая конфигурация будет перезагружена Alertmanager, и мы увидим графический интерфейс на вкладке «Статус».

Сквозные сценарии тестирования

Давайте развернем некоторые компоненты для мониторинга. Для практики достаточно простого развертывания nginx. Используя графический интерфейс Rancher, нажмите «Импорт YAML» на вкладке «Ресурсы» -> «Рабочие нагрузки», вставьте следующий код (на этот раз с использованием пространства имен по умолчанию) и нажмите «Импорт»:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.7.9
          ports:
            - containerPort: 80

В пользовательском интерфейсе Prometheus мы видим некоторые метрики для использования одного из двух выражений, ранее настроенных для оповещения:

rate (container_cpu_usage_seconds_total{pod_name=~"nginx-.*", image!="", container!="POD"}[5m])

Давайте добавим некоторую нагрузку к одному из модулей, чтобы увидеть изменение значения. Мы должны получить предупреждение, когда значение больше 0,04. Для этого нам нужно выбрать один из модулей развертывания nginx и нажать «Выполнить оболочку». В нем выполним команду:

Оповещение имеет 3 этапа:

  • Неактивно - условие не выполнено

  • В ожидании - условия выполнены

  • Firing - оповещение срабатывает

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

Всякий раз, когда срабатывает оповещение, оно будет отображаться в Alertmanager:

Настройте Alertmanager для отправки электронных писем при получении предупреждения. Если мы посмотрим на папку «Входящие», мы увидим что-то вроде:

Суммировать

Все мы знаем, насколько важен мониторинг во всем процессе эксплуатации и технического обслуживания, но мониторинг невозможен без предупреждений. Оповещение может быть при возникновении проблемы, и тогда мы сразу знаем, что в системе есть проблема. Prometheus включает в себя как решение для мониторинга, так и возможности оповещения компонента Alertmanager. В этой статье мы увидели, как легко развернуть Prometheus с Rancher и интегрировать Prometheus Server с Alertmanager. Мы также настроили правила оповещения с помощью Rancher и отправили конфигурацию Alertmanager, чтобы он мог оповещать нас о возникновении проблем. Наконец, мы увидели, как получить электронное письмо с подробностями срабатывания оповещения на основе определения/интеграции Alertmanager (также можно отправить через Slack или PagerDuty).