Автоматизация проверки срока истечения регистрации доменов в kubernetes с использованием prometheus-stack

от автора

Для всех, кто хостит свои сайты, актуальна проблема продления доменного имени — если пропустить срок истечения регистрации, то можно на ровном месте получить кучу проблем. Для своевременного продления регистрации нужно отслеживать срок истечения.

Для небольшого количества доменов будет достаточно завести напоминание в календаре, но если доменов много — следует автоматизировать этот процесс.

Prometheus-stack

При использовании prometheus для мониторинга вашей инфраструктуры нужно проделать 3 шага:

  1. собрать метрики о времени истечения домена;

  2. создать визуализацию собранных метрик в grafana;

  3. создать алерты о приближении времени истечения домена.

В случае использования kubernetes и установленного в него prometheus-stack задача значительно упрощается, так как он предоставляет следующие возможности:

  • ServiceMonitor — механизм для динамического описания целей для сбора метрик;

  • автоматическое добавление дашбордов в grafana через ConigMap;

  • PrometheusRule — механизм динамического добавления алертов в prometheus;

Helm chart domain-exporter

helm — это пакетный менеджер для kubernetes. Пакет, соответственно, называют chart.

Можно воспользоваться готовым helm chart’ом domain-exporter, который из коробки предоставит всё необходимое.

Этот чарт оборачивает приложение экспорта prometheus метрик о доменах domain_exporter, простую визуализацию и необходимые алерты в единый chart, который легко кастомизировать под собственные нужды.

Метрики

Prometheus будет автоматически собирать данные с экспортера через механизм ServiceMonitor. Доступны следующие метрики:

  • domain_expiry_days — количество дней до истечения домена;

  • domain_probe_success — успешно или нет были собраны данные о домене;

# HELP domain_expiry_days time in days until the domain expires # TYPE domain_expiry_days gauge domain_expiry_days{domain="amazon.com"} 1144 domain_expiry_days{domain="amazon.de"} -1 domain_expiry_days{domain="amazon.pl"} 22 domain_expiry_days{domain="domain-failed.com"} -1 domain_expiry_days{domain="fabiensanglard.net"} 240 domain_expiry_days{domain="flibusta.site"} 50 domain_expiry_days{domain="github.com"} 391 domain_expiry_days{domain="google.com"} 2558 domain_expiry_days{domain="habr.ru"} 217 domain_expiry_days{domain="microsoft.com"} 232 domain_expiry_days{domain="ok.ru"} 79 domain_expiry_days{domain="ted.com"} 55 domain_expiry_days{domain="vaikutis.lt"} 63 domain_expiry_days{domain="viva64.com"} 57 # HELP domain_probe_success wether the probe was successful or not # TYPE domain_probe_success gauge domain_probe_success{domain="amazon.com"} 1 domain_probe_success{domain="amazon.de"} 0 domain_probe_success{domain="amazon.pl"} 1 domain_probe_success{domain="domain-failed.com"} 0 domain_probe_success{domain="fabiensanglard.net"} 1 domain_probe_success{domain="flibusta.site"} 1 domain_probe_success{domain="github.com"} 1 domain_probe_success{domain="google.com"} 1 domain_probe_success{domain="habr.ru"} 1 omain_probe_success{domain="microsoft.com"} 1 domain_probe_success{domain="ok.ru"} 1 domain_probe_success{domain="ted.com"} 1 domain_probe_success{domain="vaikutis.lt"} 1 domain_probe_success{domain="viva64.com"} 1

Дашборд

В верхней левой половине отображаются домены, время регистрации которых скоро истечет.

В верхней правой — домены, для которых не удалось получить данные.

Снизу — вообще все домены, для которых экспортируются метрики.

вид дашборда в grafana
вид дашборда в grafana

Алерты

По умолчанию доступны следующие алерты:

  • DomainExpiringWarning — осталось меньше 60 дней до окончания регистрации. Количество дней может быть изменено;

  • DomainExpiringCritical — осталось меньше 5 дней. Имеет самый высокий severity. Количество дней может быть изменено;

  • DomainProbeFailed — не удалось собрать данные о домене;

  • DomainMetricsAbsent — метрики о доменах отсутствуют. По каким-то причинам, метрики не могут быть собраны или отсутствуют. Это может свидетельствовать о каких-либо проблемах в приложении, конфигурации helm chart’а, prometheus или даже kubernetes кластерe.

отображение алертов в prometheus
отображение алертов в prometheus

Кастомизация

Helm chart domain-exporter, как и любой другой helm chart, легко кастомизировать через values. Можно отключить конкретные алерты и задать другие границы:

# Prometheus rules rules:   enabled: true   # Alert with warning severity if metrics is absent   absent:     enabled: true   # Alert with warning severity if expiration time is less then provided   warning:     enabled: true     expiration: 60  # days   # Alert with critical severity alert if expiration time is less then provided   critical:     enabled: true     expiration: 5  # days   # Alert on failure to detect expiration time   failed:     enabled: true  # Grafana dashboard with representation of monitoring domains dashboards:   enabled: true   # Labels to add dashboard   labels:     # default grafana dashboard discovery label with stub value     # Override this value if you use custom grafana label     # https://github.com/grafana/helm-charts/blob/grafana-6.16.3/charts/grafana/values.yaml#L629     grafana_dashboard: '1'   # Folder to put dashboard in grafana   # Will be used default if it's empty   targetFolder: ""  # Prometheus service monitor metrics:   enabled: true   # Interval between metrics scraping   interval: 1m  # List of domains to monitor domains:   - example.com

Установка

Для начала нужно добавить локально helm репозиторий:

helm repo add zifter https://zifter.github.io/helm-charts/

после чего установить чарт с нужными доменами:

helm install domain-exporter zifter/domain-exporter --namespace monitoring --set "domains={aliexpress.ru,amazon.com,amazon.pl,censor.net,domain-is-not-found.net}"

или же через файл кастомизации values.yaml:

helm install domain-exporter zifter/domain-exporter --namespace monitoring -f values.yaml

где values.yaml:

# Prometheus rules rules:   warning:     expiration: 60  # days   critical:     expiration: 5  # days  # List of domains to monitor domains: - google.com - habr.ru - github.com - vaikutis.lt - amazon.pl - amazon.com - amazon.de - ok.ru - flibusta.site - domain-failed.com - viva64.com - ted.com

Что осталось за рамками статьи

Есть несколько моментов, которые будут влиять на работу helm chart:

  1. должен быть настроен AlertManager, чтобы получать информацию об алертах в желаемый канал связи;

  2. CRD ServiceMonitor относительно новый механизм. Убедитесь, что в вашей версии prometheus-stack поддерживается именно он, а не устаревший механизм на базе аннотаций. Достаточно проверки через установку helm chart;

  3. Prometheus-stack смотрит в конкретные namespace’ы для отслеживания ServiceMonitor, дашбордов и алертов. Убедитесь, что он настроен должным образом и вы ставите helm chart в нужный namespace;

  4. совместимость дашборда не тестировалась с более новыми или же более старыми версиями grafana. Совместимость вероятна, но не гарантирована;

  5. чарт гарантированно работает в kubernetes 1.19+ и helm 3. С остальными версиями совместимость не тестировалась, но, скорее всего, все работает или требуется немного допилить напильником.

Заключение

Отслеживать время истечения доменов критически важно.

С prometheus stack в kubernetes, который предоставляет удобные механизмы для упрощения оперирования мониторинга, это сделать легко.

Используя готовый helm chart domain-exporter, который предоставит все необходимые метрики, дашборды и алерты из коробки, становится очень просто автоматизировать отслеживание времени истечения домена.


ссылка на оригинал статьи https://habr.com/ru/articles/581292/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *