Для устойчивого развития бизнеса важно иметь актуальную информацию об операционных метриках и их динамике и иметь инструменты для агрегирования необходимых сведений из существующих источников данных (баз данных, аналитических систем, систем финансового учета и обратной связи от пользователей). Наряду с коммерческими системами анализа бизнес-показателей (PowerBI, Tableau, Datalens) для аналитиков доступны несколько open sourсe решений, которые ориентированы на извлечение и преобразование данных из различных источников (Extract-Transform-Load или ETL) и визуализацию данных в виде гистограмм, диаграмм, таблиц, графиков и в других представлениях. В этой статье мы рассмотрим пример использования Open Source решения Metabase и Singer для получения данных из внешнего источника.
Metabase как система бизнес аналитики (BI) позволяет решить несколько важных вопросов и при этом в свободном варианте не требует финансовых вложений. Metabase может быть собран из исходных текстов (github), в которые могут быть внесены дополнения (например, новые типы визуализаций, дополнительные драйверы для подключения внешних систем, интеграции для отправки уведомлений при превышении пороговых значений или обнаружении изменений в данных). Также metabase может быть интегрирован в другие приложения (целиком или отдельными диаграммами или дэшбордами). Кроме этого, для metabase есть официально поддерживаемый docker-контейнер, который может использоваться для быстрого запуска и обновления приложения.
Metabase поддерживает выполнение запросов к базам данных с использованием SQL (поддерживаются как реляционные СУБД, такие как MySQL, PostgreSQL, DB2, Firebird, Oracle, Vertica, так и NoSQL базы данных MongoDB, Neo4j, а также CSV/XML-источники данных), также может быть разработан собственный драйвер. Metabase автоматически отслеживает обновление схемы данных или содержания результатов запроса (по умолчанию каждый час) и актуализирует диаграммы и дэшборды. Также есть возможность использования API Metabase для унифицированного доступа к источникам данных и результатом обработки данных, а также для извлечения данных из внешних систем через внешнюю реализацию ETL. Для визуализации данных может использоваться более двух десятков вариантов представления и конструктор запросов, который опирается на автоматически извлеченную или определенную вручную модель данных. Диаграммы могут объединяться в дашборды, при этом в пределах одного дашборда диаграмма может быть добавлена несколько раз (например, с разными временными периодами).
Рассмотрим процесс создания дашборда для бизнес-метрик, полученных из внешней системы, для этого нам будет необходимо запустить экземпляр контейнера metabase (для анализа и визуализации данных), postgresql для промежуточного хранения данных и также будет использоваться pipeline в singer с target-postgres (для вывода данных) и tap-rest-api для извлечения данных из внешней системы. Сначала настроим передачу данных в postgresql (бизнес-метрики извлекаются из сторонней системы через REST), для этого создадим файл конфигурации для tap и опишем в нем аргументы, которые определены в спецификации по умолчанию для tap-rest-api.
pip install tap-rest-api singer-target-postgres
Создадим файл конфигурации:
{
"url":"адрес_сервиса",
"record_list_level": "features[*]",
"timestamp_key": "properties.time",
"schema": "metrics",
"items_per_page": 100,
"offset_start": 1,
"auth_method": "no_auth"
}
Запустим сервер базы данных:
docker run -itd -p 5432:5432 -e POSTGRES_PASSWORD=password -e POSTGRES_DB=metrics -e PGDATA=/var/lib/postgresql/data/pgdata -v /tmp/data:/var/lib/postgresql/data postgres
sudo apt install libpq-dev # brew install postgresql (for macos)
Создадим файл конфигурации для postgres:
{
"postgres_host": "localhost",
"postgres_port": 5432,
"postgres_database": "metrics",
"postgres_username": "postgres",
"postgres_password": "password",
"postgres_schema": "metrics"
}
И выполним перенос данных в postgres:
tap-rest-api --config rest.json | target-postgres --config postgres.json
По умолчанию схема данных переносится из исходного json. Теперь запустим metabase и настроим подключение к источнику данных:
docker run -d -v ~/my-metabase-db:/metabase.db --name metabase -e MB_DB_FILE=/metabase.db --net host metabase/metabase
Теперь выполним первоначальную настройку через браузер (http://localhost:3000), создадим первого пользователя и подключение к базе данных:
Создадим новый запрос, для этого можно использовать один из вариантов:
New -> SQL query - создать на основе SQL-запроса (в запросе могут использоваться переменные {{ var }} для подстановки при применении диаграммы в дэшборде).
New -> Question - создать запрос визуально на основе таблиц (фильтрация, обобщение, группировка)
После создания набора данных нужно определить формат визуализации (таблица, график, точечная диаграмма, гистограмма, круговая диаграмма, воронка, отображение поверх карты). Далее созданная диаграмма может быть добавлена в Dashboard (New -> Dashboard). Также на визуализацию могут быть добавлены оповещения (Alerts) которые настраиваются по превышению или понижению значения по сравнению с указанным уровнем. Уведомления могут быть отправлены через почту, Slack или любой другой способ, реализованный в подключенных интеграциях.
Наиболее типичными бизнес-метриками, которые могут быть агрегированы из внешних систем могут быть коэффициенты конверсии (например, переход лидов в клиенты), стоимость привлечения нового клиента (Cost of Customer Acquisition) и стоимость лида (CPL), прибыль за период, чистая выручка, лояльность и удержание клиентов (Customer loyalty and retention), метрики удовлетворенности клиентов (например, Net Promoter Score - NPS), измерения ежедневных клиентов или сетевого трафика, а также метрики производительности команды, счастья сотрудников и другие.
Цепочка преобразований REST -> PostgreSQL -> Metabase позволяет получить данные для визуализации бизнес-метрик, полученных из внешней учетной системы. С добавлением отслеживания изменений значения с течением времени также можно настроить оповещение о достижении KPI или о снижении значения ниже критических значений. В качестве источника метрик можно использовать облачные системы (например, Jira, Kustomer, Mailshake, SurveyMonkey, UserVoice, HelpScout, Google Analytics, Zendesk Support), метрики использования приложения (из Google Play и AppStore), произвольные REST-сервисы, а также операционные метрики функционирования оборудования и сервисов, которые извлекаются с использованием collectd и отправляются в базу данных, например с использованием pg-collectd.
В заключение приглашаю всех на бесплатный урок, где посмотрим, как можно работать с классическими REST и SOAP, попробуем заменить их на gRPC и GraphQL. А также на занятии разберем несколько кейсов и решим, в каком из них какую технологию лучше применить. Регистрация на бесплатный урок доступна по ссылке.
namee
Ох. пробовал я metabase. Красиво. просто. понятно. но.
Чуть шаг влево и дикие сложности с построением графика.
шкала X - только дата.
Чуть большие данные и дикие лаги / недогрузки
Ушли на drupal + самописные модули. Просто. Понятно Доступно. Управляемо.