Metabase
BI поверх вашей базы: дашборды и отчеты кликами или на SQL. Данные остаются там, где лежали - своего хранилища у Metabase нет. Разбираем, что умеет бесплатная версия и где начинается платная.
Вердикт
- Команде 5-50 человек с данными в Postgres, MySQL или ClickHouse
- Тем, кто потерял доступ к Power BI или Tableau
- Когда данные нельзя выпускать за периметр
- Если отчеты сейчас собирают руками или просят у разработчика
- Если SAML или OIDC - обязательное требование безопасности
- Если нужны права на уровне строк и колонок
- Если нужен аудит, кто что смотрел и выгружал
- Под тяжелую аналитику и экзотические графики
Вопросы к базе вместо выгрузок в Excel
Metabase подключается к боевой базе и дает людям спрашивать ее напрямую.
Инструмент подключается к существующей базе - Postgres, MySQL, ClickHouse, MongoDB, BigQuery и еще полутора десяткам источников. Дальше человек собирает отчет мышкой или пишет SQL, если умеет.
Ключевая особенность: своего хранилища у Metabase нет. Он переводит клики в SQL и идет в чужую базу. Собственная БД хранит только его самого - вопросы, дашборды, пользователей и права.
Отсюда вывод, который важнее любой фичи: данные никуда не копируются. Для компании с требованием держать все внутри периметра это снимает половину вопросов.
Задача, которую он закрывает, звучит обыденно. Данные лежат в базе, а отчетность собирается вручную или выпрашивается у разработчика. Metabase снимает разработчика с этого потока.
Что бесплатно, а что нет
Главный вопрос к продукту с открытым ядром. Ответ тоньше, чем обычно пишут.
Лицензия составная, и это не формальность. Все вне каталога enterprise/ - под AGPL-3.0, все внутри - под проприетарной Metabase Commercial License.
Сборки разведены по образам: metabase/metabase - бесплатная, metabase/metabase-enterprise - платная. В логе бесплатной прямым текстом: Enterprise Edition extensions are NOT PRESENT.
Обычно пишут коротко: SSO платный. На деле граница проходит иначе, и разница существенная для того, кто выбирает.
| Функция | Бесплатно | Pro / Enterprise |
|---|---|---|
| Вход через Google | да | да |
| Базовый LDAP | да | да |
| SAML, OIDC, JWT | нет | да |
| LDAP: синк атрибутов, фильтр групп | нет | да |
| SCIM: авто-заведение и отключение людей | нет | да |
| Двухфакторная аутентификация | нет | да |
| Права на уровне строк и колонок | нет | да |
| Аудит: кто что смотрел и выгружал | нет | да |
| Гранулярный кэш запросов | нет | да |
| Whitelabel и мультитенантное встраивание | нет | да |
Проверяли не по документации, а включением. Настройка 2FA в бесплатной сборке присутствует, но только для чтения, и переменная MB_MFA_ENFORCEMENT ее не поднимает.
Документация вендора тут вводит в заблуждение: страница про 2FA описывает ее для self-host и, в отличие от остальных платных страниц, не несет пометки о платности.
Настройки saml-enabled в бесплатной сборке не существует вовсе - API отвечает «Неизвестная настройка». Платного кода в образе физически нет, он не заблокирован флагом.
Сколько стоит перейти. Starter - 100 долларов в месяц за первых пять человек и по 6 за следующего. Pro - 575 за первых десять и по 12 за следующего. Enterprise - от 20 тысяч в год. Команда на 20 человек, которой понадобился SAML, платит около 695 долларов в месяц.
Чем отличается от Power BI и Tableau
Для российской компании список альтернатив короче, чем кажется.
Power BI и Tableau здесь официально не продаются с 2022 года. При запросе страницы цен Power BI Microsoft отдает в теле ответа «This product is not available in your market».
То есть выбор стоит не между Metabase и Power BI, а между Metabase, Superset и выгрузками в Excel.
| Продукт | Модель цены | Порог входа |
|---|---|---|
| Metabase, своя установка | бесплатно, людей неограниченно | только стоимость сервера |
| Metabase Cloud Starter | подписка + за человека | 100 долларов в месяц |
| Metabase Pro | подписка + за человека | 575 долларов в месяц |
| Power BI Pro | за человека | 14 долларов в месяц |
| Tableau Cloud Standard | за человека, по ролям | 15, 42 или 75 долларов |
| Apache Superset | бесплатно, Apache-2.0 | только стоимость сервера |
Цены сняты в сентябре 2026 с официальных страниц вендоров. Данные по Tableau - из сводки третьей стороны: официальная страница цен содержимое не отдала.
Разница в подходе важнее цифр. Metabase не про «построй витрину и наведи семантический слой», а про «дай человеку без SQL получить ответ за пять минут».
Обратная сторона ровно та же. На сложной аналитике он упирается раньше, чем Superset, и набор типов графиков у него беднее.
Сколько просит железа
Вендор публикует требования и собственный нагрузочный тест - редкий случай.
База - одно ядро и гигабайт памяти. Плюс ядро и два гигабайта на каждые 20 одновременных пользователей. Базе приложения нужен отдельный Postgres: на старте ядро и два гигабайта.
Собственный тест вендора показывает, что узкое место снимается на третьем ядре: на двух ядрах 95-й перцентиль 390 мс, на трех - 119, на четырех - 82. Дальше прирост в пределах шума.
| Тариф стенда | CPU2-RAM4-DISK50 |
| Контейнеров | 2 (приложение + Postgres) |
| Порт | 3000, healthcheck /api/health |
| Образ приложения | 1.81 ГБ |
| Образ postgres:16.15 | 642 МБ |
| Диск после установки | 5.3 ГБ из 48 |
Почему не два гигабайта. JVM в простое держит 1.23 ГиБ и под нагрузкой почти не растет. Рядом должен поместиться Postgres. На машине с 2 ГБ запаса не остается, поэтому CPU2-RAM4-DISK50 - это минимум, а не компромисс.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация: CPU2-RAM4-DISK50
Как ставится
Официальный способ для своей установки - Docker. Два контейнера, один порт.
Поставить Docker
Официальный apt-репозиторий docker.com. На чистой Ubuntu 24.04 заняло 143 секунды.
Сгенерировать секреты
Пароль базы и ключ шифрования. Ключ обязателен: без него подключения к базам и секреты лежат в открытом виде.
POSTGRES_PASSWORD=$(openssl rand -hex 24) MB_ENCRYPTION_SECRET_KEY=$(openssl rand -hex 32)Описать два сервиса
Приложение и Postgres. Порт наружу не публикуем - только на localhost, а снаружи ставим reverse-proxy с TLS.
services: metabase: image: metabase/metabase:v0.63.18.2 restart: unless-stopped ports: - "127.0.0.1:3000:3000" environment: MB_DB_TYPE: postgres MB_DB_HOST: postgres MB_DB_DBNAME: metabaseappdb MB_DB_USER: metabase MB_DB_PASS: ${POSTGRES_PASSWORD} MB_ENCRYPTION_SECRET_KEY: ${MB_ENCRYPTION_SECRET_KEY} JAVA_TIMEZONE: Europe/Moscow JAVA_TOOL_OPTIONS: "-Xmx2g" depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl --fail -I http://localhost:3000/api/health || exit 1"] interval: 15s start_period: 240s postgres: image: postgres:16.15 restart: unless-stopped environment: POSTGRES_DB: metabaseappdb POSTGRES_USER: metabase POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - ./pg_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U metabase -d metabaseappdb"] interval: 10s retries: 10Поднять и подождать
Скачивание образов заняло 109 секунд, запуск контейнеров - 23. Дальше терпение: первый старт идет больше трех минут.
docker compose pull docker compose up -d docker compose logs -f metabase
Итого от чистой машины до рабочего интерфейса - около восьми минут. Мастер первичной настройки заводит администратора и спрашивает язык.
Metabot и ключ к модели
Чат по данным в бесплатной версии работает - но до модели еще надо дойти.
С версии 0.60 ИИ-слой открыт: Metabot запускается на вашем ключе, и данные к вендору не уходят. В настройках поля под OpenAI, Anthropic, Bedrock, Azure, Mistral и OpenRouter.
Ключ выбирает клиент - продукт одинаково работает с любым провайдером. Платной в этой части остается только обвязка управления: лимиты токенов, доступы по группам и аналитика использования.
Проверили диалог на живом ключе: Metabot ответил потоком, finishReason: stop. Но до этого пришлось разобраться с двумя вещами.
Адрес провайдера может не отвечать
Запрос к модели с нашего сервера уходил в 403 Access denied by security policy - и без ключа, и с полностью валидным. Через прокси тот же запрос отдает 200 и ответ модели.
Прокси к внешним API уже есть на сервере. Адрес api-proxy.fatmetal.net:8080, входит в VPS, отдельно заказывать нечего. Какого провайдера моделей использовать - решаете вы, прокси пропускает любого.
Metabase не читает HTTPS_PROXY
Привычные переменные окружения тут не работают: подмена прокси на заведомо мертвый адрес ничего не меняла, запрос все равно шел напрямую. Это обычное поведение JVM - HTTPS_PROXY понимает curl, а не Java.
Настраивается системными свойствами JVM:
JAVA_TOOL_OPTIONS: "-Xmx2g
-Dhttps.proxyHost=api-proxy.fatmetal.net -Dhttps.proxyPort=8080
-Dhttp.proxyHost=api-proxy.fatmetal.net -Dhttp.proxyPort=8080
-Dhttp.nonProxyHosts=localhost|127.0.0.1|postgres|metabase"
Разделитель в nonProxyHosts - вертикальная черта, не запятая. Имена контейнеров в списке обязательны: иначе обращение к базе уйдет в прокси и Metabase потеряет ее.
Причина. Ключ может быть полностью рабочим. Metabase переводит чужой HTTP 403 в сообщение про права ключа, хотя ответ пришел от сети, а не от биллинга провайдера.
Решение. Проверить путь до провайдера отдельно - обычным curl с тем же ключом. Отвечает 403 и там - дело не в ключе, а в доступе к адресу.
Что намерили на стенде
Цифры с машины CPU2-RAM4-DISK50, Ubuntu 24.04, Docker 29.8.1.
| RAM в простое, приложение | 1.23 ГиБ |
| RAM в простое, Postgres | 83 МиБ |
| Занято на машине | 1815 МБ из 3915 |
| Пик RAM под нагрузкой | 1.30 ГиБ (+16 МиБ) |
| Пик CPU под нагрузкой | 131% из 200% (2 ядра) |
| Первый старт до HTTP 200 | 197 с |
| Из них миграции базы | 111 с |
| Повторный старт | 91 с |
| Пропускная способность | 24.7 запроса в секунду |
| Ответ /api/health | 8 мс |
Главный вывод замера не в абсолютных числах. Упирается процессор, а не память: за всю нагрузку JVM прибавила 16 МиБ, тогда как CPU ушел в 131 процент из двухсот доступных.
Практический смысл простой. Растет команда - добавляйте ядра, а не гигабайты. Это сходится с нагрузочным тестом самого вендора.
Данные растут медленно
Мы прогнали 2000 запросов и замерили прирост базы приложения: 745 байт на выполненный запрос. Растет история выполнения, больше в этой базе расти нечему.
В пересчете это 21 МБ в месяц при тысяче запросов в день и около 1.3 ГБ в год даже при пяти тысячах. Диска в 50 ГБ хватает на годы.
Объектное хранилище продукт не поддерживает, да оно ему и не нужно: анализируемые данные он не хранит вовсе, у контейнера приложения нет ни одного тома.
Проверено на версии v0.63.18.2, 28 сентября 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Три вещи, на которых обжигаются при своей установке.
База по умолчанию живет внутри контейнера
Если не указать внешний Postgres, Metabase заведет встроенную H2 в файле внутри контейнера. Пересоздали контейнер - потеряли все вопросы, дашборды и коллекции.
Вендор предупреждает об этом прямым текстом. Переезд с H2 на Postgres потом делается отдельной процедурой миграции, поэтому внешнюю базу подключают с первого запуска.
Healthcheck успевает объявить контейнер больным
Причина. Холодный старт занимает 197 секунд, из них 111 - миграции пустой базы. Типовое окно start_period: 60s под это не рассчитано.
Решение. Поднять start_period до 240 секунд. Иначе оркестратор, реагирующий на unhealthy, уводит машину в цикл перезапусков по три минуты каждый.
Письма уходят от чужого адреса
Причина. Ручка /api/email принимает только хост, порт, режим шифрования, логин и пароль. Адрес отправителя она молча игнорирует и отвечает 200.
Решение. Задать его отдельно через /api/setting/email-from-address или в интерфейсе. Иначе письма провалят SPF и DMARC у получателя и уедут в спам.
Что порадовало. Нерабочие настройки почты Metabase просто не сохраняет: проверяет соединение и отвечает 400 «Wrong host or port» за пять секунд. Молчаливого зависания на две минуты, типичного для других продуктов, тут не бывает.
Безопасность и обновления
Что закрыть до того, как пустить людей.
- Внешний Postgres с первого запуска, а не после первой потери данных.
- Ключ шифрования
MB_ENCRYPTION_SECRET_KEY- иначе пароли подключений лежат в базе открытыми. - TLS своим прокси. Вендор отдельно предупреждает, что терминация на том же сервере отъедает процессор у приложения.
- Порт только на localhost. Наружу - через reverse-proxy, а не голым портом.
- Бэкап - это дамп Postgres. Больше состояния нигде нет, томов у приложения ноль.
- Права на данные настраиваются на уровне подключения: отдельный пользователь базы только на чтение.
Обновление сводится к смене тега образа и перезапуску - схему база приложения мигрирует сама. Закрепляйте конкретную версию: на latest инструкция устареет незаметно.
Патчи выходят раз в одну-две недели, минорные версии - примерно раз в квартал. Параллельно поддерживается LTS-ветка, сейчас это 0.58.
Про нумерацию. У одного релиза два номера: 0.63.18 - бесплатная сборка, 1.63.18 - платная. «Metabase 1.63» не новее, чем 0.63, это другая редакция. В тегах Docker есть и четвертая цифра - номер пересборки.
Связь с другими стеками
- PostgreSQL или ClickHouse - источник данных и одновременно база приложения. ClickHouse поддерживается штатным драйвером.
- Reverse-proxy с TLS - обязательный сосед: наружу продукт смотреть не должен.
- Apache Superset - альтернатива для тех, кому нужны SAML и LDAP без платного тарифа.
- Grafana - соседняя задача, а не та же: метрики инфраструктуры вместо запросов к бизнес-базе.
Когда это НЕ ваш выбор
Служба безопасности требует SSO и права на строки
SAML, OIDC, SCIM и разграничение по строкам и колонкам - платные функции, и своя установка от этого не спасает. Лицензия нужна и на своем сервере.
Нужен комплаенс-аудит
Журнала «кто какой отчет открывал и что выгрузил» в бесплатной версии нет. Если этот журнал требуется регулятору, бюджет на Pro придется закладывать сразу.
Тяжелая аналитика и экзотическая визуализация
За пределами полусотни дашбордов и десятка типов графиков продукт упирается. Superset мощнее, хотя и заметно тяжелее в эксплуатации.
Вы правите код и отдаете доступ наружу
Лицензия AGPL: сетевое использование модифицированной копии обязывает раскрыть исходники. Установка без правок кода этого не требует.
Частые вопросы
Хватит ли двух гигабайт памяти?
Запустится, но впритык. JVM в простое занимает 1.23 ГиБ, и рядом должен работать Postgres. Практический минимум - 4 ГБ.
Можно без Docker?
Да, продукт поставляется JAR-файлом. Потребуется JRE 25 от Eclipse Temurin - более ранние версии Java не поддерживаются.
Правда ли, что двухфакторная аутентификация бесплатна?
Нет. Мы проверяли включением: настройка в бесплатной сборке доступна только для чтения, переменная окружения ее не поднимает. Документация вендора в этом месте неточна.
Он копирует данные к себе?
Нет. Metabase выполняет запросы в вашей базе и показывает результат. Своего хранилища у него нет, у контейнера приложения нет томов.
Нужно ли докупать диск или объектное хранилище?
При типовом использовании нет. Растет только история запросов - 745 байт на запрос, около 259 МБ в год при тысяче запросов в день.
Нужен ли платный тариф, чтобы включить ИИ?
Нет. Metabot работает в бесплатной версии на вашем ключе провайдера. Платными остаются лимиты токенов, доступы по группам и аналитика использования ИИ.
Есть ли русский интерфейс?
Да, полный - включая админку и тексты ошибок. Язык выбирается при первичной настройке, отдельных пакетов ставить не надо.
Что с обновлениями?
Меняется тег образа, контейнер перезапускается, схему база мигрирует сама. Перед этим стоит снять дамп Postgres - другого состояния нет.
Итог
Metabase решает конкретную задачу: дать людям без SQL спрашивать боевую базу и не копировать данные наружу. Ставится за восемь минут, живет на CPU2-RAM4-DISK50 за 500 руб/мес и укладывается в 1.23 ГиБ памяти в простое. Упирается процессор, а не память - расти надо ядрами. Бесплатной версии хватает команде, которой достаточно входа через Google или базовый LDAP. Как только служба безопасности просит SAML, права на строки или аудит, разговор переходит к 575 долларам в месяц, и своя установка от этого не спасает.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли неточность в разборе - напишите, поправим в течение дня.