selectel-exporter — экспортер от kts

Всем привет! Меня зовут Александр, я руковожу backend-разработкой в КТS. Сегодня расскажу об экспортере, который мы написали для selectel.

Что будет в статье:

Интро: зачем мы написали собственный экспортер

Мы на многих проектах пользуемся услугами selectel. Например, managed kubernetes и базами данных. За этими компонентами и услугами нужно следить, и хорошо бы делать это из одной точки. Этой точкой у нас является prometheus, alertmanager и grafana.

При этом мы часто запускаем новые проекты, за которыми тоже нужно следить, но тратить минимум времени на настройку метрик и мониторинга. При запуске нового проекта он автоматически попадает в grafana:

image-loader.svg

Кроме метрик самого проекта, рядом удобно иметь информацию о кластере и самой базе проекта. В selectel есть внутренние графики и мониторинг, но использовать их затруднительно по нескольким причинам:

  1. доступ к админке selectel есть только у суперадминов компании. Дать доступ разрабам/админам нельзя

  2. метрики находятся в разных местах

  3. не хватает возможности настроек правил для алертинга

  4. уведомления от мониторинга идут через разные каналы

На тех проектах, в которых применяется self-hosted кластер patroni, для решения задачи можно поставить node_exporter и postgres_exporter. Но на managed-кластерах selectel так сделать нельзя. Доступа к внутренним метрикам selectel нет, пользователя БД с root правами тоже создать нельзя.

image-loader.svg

Этот функционал планируется к реализации, но только к концу 2021 года:

image-loader.svg

Ждать не хотелось, а в Гугле нашлись только экспортеры баланса. Поэтому мы решили написать собственный — https://github.com/ktsstudio/selectel-exporter.

Что умеет selectel exporter и как его установить

selectel exporter умеет получать:

  • метрики узлов кластера: cpu, память и диск

  • метрики баз данных: postgres и mysql

  • метрики баланса

Подробнее можно посмотреть в readme. Для установки можно использовать helm chart. Если вы используете prometheus operator, достаточно указать serviceMonitor.enabled=true и serviceMonitor.additionalLabels. По ним prometheus оператор получает ServiceMonitor, и метрики начнут собираться автоматически.

Как он работает

Exporter принимает 2 параметра на вход:

  • SELECTEL_REGION — регион, в котором расположены ресурсы. Допустимые значения: {«ru-1», «ru-2», «ru-7», «ru-3», «ru-9», «ru-8»}. Экспортер получает ресурсы только из указанного региона. Если ресурсы нужны из 2 регионов, следует запустить 2 инстанса экспортера. На баланс это не распространяется, так как к региону он не привязан.

  • SELECTEL_TOKEN — токен из кабинета selectel https://my.selectel.ru/profile/apikeys

После старта экспортер пытается получить openstack-токен. Он используется для получения метрик БД и выдается на selectel-проект.

image-loader.svg

Поэтому сначала exporter получает все проекты аккаунта, выбирает проект и выписывает openstack-токен для этого проекта. Если проектов больше одного, выбирает первый. Если в будущем понадобится сделать выбор проекта, мы добавим возможность указывать id необходимого проекта.

Openstack-токен протухает через 24 часа после создания, поэтому exporter обновляет его каждые 20 часов. Подробнее про авторизацию в selectel можно почитать тут:
https://developers.selectel.ru/docs/control-panel/authorization/

После успешного получения openstack-токена запускается 3 горутины, которые раз в минуту получают:

  • баланс — методом /api/v3/billing/balance

  • метрики datastore — методом /v1/datastores//metrics

  • метрики database — методом /v1/datastores//database-metrics

Описание используемых методов selectel можно посмотреть здесь:
https://developers.selectel.ru/docs/selectel-cloud-platform/dbaas_api/

Доступные метрики

Все доступные метрики можно посмотреть в readme exporter. Обратите внимание:

  1. все метрики selectel exporter повторяют доступные метрики в интерфейсе selectel, ни больше ни меньше

  2. в selectel разные балансы: primary, storage, vmware, vpc. Про устройство балансов подробнее можно почитать тут: https://kb.selectel.ru/docs/control-panel-actions/billing/balance/

  3. в метриках selectel_database_* есть label «database», но доступен он только для базы данных postgres, а для mysql там будет пустая строка

В результате получается такой dashboard:

image-loader.svg

Что в планах

selectel-exporter написан на Go и распространяется под Open Source-лицензией Apache 2.0. Будем благодарны любой помощи по развитию проекта на GitHub: и звездочкам, и issues, и pull requests. В ближайшее время добавим дашборды для grafana и готовые PrometheusRule для алертинга.

Мы планируем и дальше рассказывать о решениях, которые мы написали для своих проектов. Например:

  • модуль для managed-кластера kubernetes в selectel, который позволяет получить ip клиента.

  • оператор копирования secret для динамической инфраструктуры: когда делаешь раскладку по веткам в проекте, на каждую выписывается let’s encrypt сертификат. Можно упереться в rate limit обращений к let’s encrypt. В этом случае нужно выпускать wildcard-сертификат и копировать его между namespace проекта… Но это темы для отдельных историй.

Stay tuned!

© Habrahabr.ru