Grafana 4.4: LDAP-группы для Teams и автоматический provisioning дашбордов
Grafana 4.4 добавила Teams с LDAP-маппингом - теперь AD-группа автоматически получает доступ к своим дашбордам. Настраиваем корпоративный provisioning и разбираем подводные камни.
Grafana 4.4 - LDAP-группы для Team provisioning, улучшен templating, новые типы панелей
Grafana 4.4 вышла в начале августа, и главное в ней - не новые типы панелей и не улучшенный templating, хотя это тоже полезно. Главное - Teams с привязкой к LDAP-группам. Для тех кто эксплуатирует Grafana в корпоративной среде с Active Directory это меняет довольно много в ежедневной рутине.
Как было раньше
В Grafana до 4.4 с LDAP всё выглядело так: при первом входе пользователь создаётся автоматически из AD-учётки, роль ему присваивается через маппинг LDAP-групп на org-роли (Viewer, Editor, Admin). Это работает, но грубо. Нет способа сказать «пользователи из группы dev-backend видят только бэкенд-дашборды, а ops-team видит дашборды инфраструктуры». Единственное что было - организации. Можно создать несколько Org и размазать пользователей по ним. Некоторые так и делали.
Организации в Grafana - неудобный инструмент для разделения доступа. Дашборды не шарятся между Org, каждая - отдельный изолированный мирок. Если хочешь показать один и тот же дашборд двум группам - придётся дублировать. У нас на нескольких managed клиентских кластерах стояла ровно эта проблема: ops видит всё, разные продуктовые команды - только своё, и при этом общие обзорные дашборды должны быть доступны всем.
Teams и LDAP-маппинг в 4.4
Teams - это теперь именованные группы внутри одной организации. Дашборды и папки получают permissions на уровне команды. Папка «Backend» - доступна Team «backend-devs», папка «Infra» - Team «ops». Пересечения разрешены, общие дашборды в корне Org доступны всем.
Ключевая часть - маппинг из LDAP. В ldap.toml появился блок для команд:
[[servers.group_mappings]]
group_dn = "CN=backend-devs,OU=Groups,DC=corp,DC=example,DC=ru"
org_role = "Viewer"
grafana_admin = false
[[servers.group_mappings]]
group_dn = "CN=ops-team,OU=Groups,DC=corp,DC=example,DC=ru"
org_role = "Editor"
grafana_admin = false
Маппинг на org-роли был и раньше. Новое - возможность привязать LDAP-группу к конкретной Grafana-команде. Пользователь заходит первый раз, Grafana смотрит его членство в LDAP-группах, создаёт учётку и добавляет в нужные Teams автоматически. Никаких «добавь Васю в команду вручную».
Что мы настраивали и где споткнулись
Клиент - компания с AD, несколько продуктовых команд и отдел инфраструктуры. Дашборды до этого все жили в одной куче - кто зашёл, тот и смотрит.
Переход сделали за один вечер, но с несколькими сюрпризами.
Первый. Пересинхронизация членства в Teams происходит только при логине пользователя. Если Вася был добавлен в AD-группу backend-devs, он получит доступ к дашбордам backend только при следующем входе в Grafana. Это не проблема, это просто нужно понимать - нельзя добавить человека в AD и немедленно ожидать что он увидит нужное в Grafana без перелогина.
Второй. Permissions на папки в 4.4 - это отдельный шаг который делается через UI или API. LDAP-маппинг создаёт Teams и наполняет их пользователями, но не расставляет permissions на дашборды и папки автоматически. Permissions настраиваешь один раз руками или через provisioning API. После этого всё работает само.
Третий. Вложенные группы AD (nested groups) - не работают. Если пользователь состоит в группе backend-leads, которая вложена в backend-devs, Grafana его в backend-devs не увидит. Только прямое членство. Это ограничение LDAP-клиента Grafana, оно было и раньше - просто теперь заметнее потому что от корректного членства зависит конкретный доступ к дашбордам.
Templating и новые панели
Из остального что вышло в 4.4 - улучшения в templating-переменных. Теперь переменная типа Query может фильтровать список значений через regex, причём regex применяется к display name, а не к value. Это удобно когда метрики называются по одному соглашению, а показывать хочется по-другому.
Из нового в панелях - улучшения Singlestat: новые единицы, больше опций форматирования. Функционально ничего радикально нового, но несколько частых пожеланий закрыли.
Для нас лично самым ценным оказался не функционал панелей - дашборды работали и без этого. Ценность в том что теперь Grafana знает про AD-структуру компании и воспроизводит её без ручного сопровождения. Новый сотрудник попадает в AD-группу - при первом входе он видит то что должен видеть.
Про управление конфигурацией
Один момент который стоит зафиксировать: provisioning в 4.4 - это пока только LDAP-маппинг для Teams. Dashboard provisioning из файловой системы и автоматический provisioning datasources в текущих релизах ещё не реализован - это то, что логично было бы добавить следующим шагом. Пока что IaC-подход для Grafana - это конфиг в репозитории, Ansible раскатывает конфиги и скрипты деплоя дашбордов через API.
Почти - потому что permissions на папки и Teams пока не provisioning, а только API. Мы написали простой скрипт который прогоняет нужные curl-запросы при деплое. Это не идеально, но работает и повторяемо.
Текущий статус: у клиента три Teams в Grafana соответствуют трём AD-группам, четыре папки дашбордов с правильными permissions. Ручное управление пользователями в Grafana убрали - не нужно.
- Prometheus 2.0 alpha: новый TSDB движок и remote read/write API · 31 июля 2017
- Ansible 2.3 и сетевые модули: Cisco IOS/NX-OS под version control · 7 августа 2017