Эта статья последует за предыдущейОб использовании 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
: Кумулятивное время ЦП в секундах
Все индикаторы можно найти на следующих страницах:
Все регулярные выражения в 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).