Cube js что это

Обновлено: 04.07.2024

Интеграции для Cube.js


Интеграция Cube.js и ClickHouse для создания отчетов и панелей управления

Создайте приборную панель

Мы узнали, как использовать Cube.js и Recharts для построения единой диаграммы, и теперь мы можем приступить к созданию всей информационной панели. Вы можете найти несколько рекомендаций по разработке макетов информационных панелей. Обычно наиболее важные и высокоуровневые индикаторы помещаются вверху в виде диаграмм с одним значением (иногда называемыхKPI), А затем перечислите соответствующие детали этих индикаторов.

Ниже приведен снимок экрана окончательной панели инструментов с ключевыми показателями эффективности вверху, а также гистограммами и линейными графиками внизу.

\"\"

Во-первых, давайте реорганизуем диаграмму и извлечем общий код на компоненты многократного использования. Создайте файл src / Chart.js со следующим содержимым:

Затем давайте воспользуемся этим компонентом для создания панели мониторинга. Замените src / App.js следующим:

Этого достаточно, чтобы создать первую панель инструментов, а затем вы можете опробовать ее в CodeSanbox ниже.

Frontend

We’ll build our frontend and dashboard with React, using the Cube.js React client. But you can use any framework or just vanilla JavaScript to build a frontend with Cube.js. This tutorial shows you how to build a dashboard in pure JavaScript.

We’ll set everything up using Create React App, which is officially supported by the React team. It packages all the dependencies for React app and makes it easy to get started with a new project. Run the following commands in your terminal:

Now we can start the app:

The last line starts a server on port 3000 and opens your web browser at localhost:3000.

We’ll build our UI with Reactstrap, which is a React wrapper for Bootstrap 4. Install Reactstrap and Bootstrap from NPM. Reactstrap does not include Bootstrap CSS, so this needs to be installed separately:

Import Bootstrap CSS in the src/index.js file before importing ./index.css :

Now we are ready to use the Reactstrap components.

The next step is to install Cube.js client to fetch the data from the server and our visualization library to display it. For this tutorial, we’re going to use Recharts. Cube.js is visualization agnostic, meaning you can use any library you want. We’ll also use moment and numeral to nicely format dates and numbers.

Finally, we’re done with dependencies, so let’s go ahead and create our first chart. Replace the contents of src/App.js with the following:

You can check out this example in the CodeSandbox below.

Let’s look deeper at how we load data and draw the chart.

First, we’re initializing the Cube.js API client:

Next, we are using the QueryRenderer Cube.js React component to load Orders data.

QueryRenderer performs an API request to the Cube.js API and uses the render props technique to let you render the result however you want to. We’ve already covered the query format above, but in case you want to refresh—here is the query format full reference.

The render parameter of QueryRenderer is a function of the type () => React.Node . The output of this function will be rendered by the QueryRenderer . A resultSet is an object containing data obtained from the query. If this object is not defined, it means that the data is still being fetched.

resultSet provides multiple methods for data manipulation, but in our case, we need just the chartPivot method, which returns data in a format expected by Recharts.

We’ll plot the Orders data as a bar chart inside a responsive container.

Собираем дэшборд с помощью Cube.js

Чтобы собрать дэшборд, мы используем аналитический фреймворк Cube.js. У него довольно много функций, но нас интересуют две: возможность автоматически использовать фильтры по партициям и пре-агрегации данных. Он использует схему данных data schema, написанную на Javascript, чтобы сгененрировать SQL и исполнить запрос к базе данных. От нас требуется лишь указать, как использовать фильтр по партициям в схеме данных.

Создадим новое приложение Cube.js. Так как мы уже используем AWS-стэк, логично использовать Lambda для деплоя. Вы можете использовать express-шаблон для генерации, если планируете хостить Cube.js бэкенд в Heroku или Docker. В документации описаны другие способы хостинга.

Для настройки доступа к базе данных в cube.js используются переменные окружения. Генератор создаст файл .env, в котором вы можете указать ваши ключи для Athena.

Теперь нам потребуется схема данных, в которой мы укажем, как именно хранятся наши логи. Там же можно указать, как считать метрики для дэшбордов.

В директории schema , создайте файл Logs.js . Вот пример модели данных для nginx:

Здесь мы используем переменную FILTER_PARAMS, чтобы сгенерировать SQL запрос с фильтром по партициям.

Мы также задаем метрики и параметры, которые хотим отобразить на дэшборде, и указываем пре-агрегации. Cube.js создаст дополнительные таблицы с пре-агрегированными данными и будет автоматически обновлять данные по мере поступления. Это позволяет не только ускорить запросы, но и снизить стоимость использования Athena.

Добавим эту информацию в файл схемы данных:

Мы указываем в этой модели, что необходимо пре-агрегировать данные для всех используемых метрик, и использовать партицирование по месяцам. Партицирование пре-агрегаций может значительно ускорить сбор и обновление данных.

Теперь мы можем собрать дэшборд!

Бэкенд Cube.js предоставляет REST API и набор клиентских библиотек для популярных фронтенд-фреймворков. Мы воспользуемся React-версией клиента для сборки дэшборда. Cube.js предоставляет лишь данные, так что нам потребуется библиотека для визуализаций — мне нравится recharts, но вы можете использовать любую.

Установим Cube.js клиент и библиотеку React-компонет через NPM:

Импортим компонетны cubejs и QueryRenderer , чтобы выгрузить данные, и собираем дэшборд:

Building a Dashboard

We learned how to build a single chart with Cube.js and Recharts, and we are now ready to start building the whole dashboard. There are some best practices regarding designing the layout of the dashboard. The common practice is to put the most important and high-level metrics on the top as single value charts, sometimes called KPIs, and then list the relevant breakdowns of those metrics.

Here is the screenshot of our final dashboard with KPIs on top followed by bar and line charts.

First, let’s refactor our chart and extract the common code into a reusable <Chart /> component. Create an src/Chart.js file the following content:

Next, let’s use this component to create the dashboard. Replace the content of src/App.js with the following:

That is enough to build our first dashboard. Give it a try in the CodeSanbox below.

Cube.js


Cube.js — это фреймворк с открытым исходным кодом для создания аналитических веб-приложений. Он в основном используется для создания внутренних инструментов бизнес-аналитики или для добавления аналитики, ориентированной на клиента, в существующее приложение.

Особенности Cube.js

  • Он предоставляет строительные блоки для добавления аналитических функций в любое приложение, которое вы создаете.
  • Cube.js предназначен для работы с крупномасштабными наборами данных и реализует различные методы оптимизации.
  • Облачное решение избавляет от необходимости строить аналитику.
  • Поддерживает инфраструктуру и механизм запросов.
  • Предоставляет API-клиенты и SDK, а также обширную документацию, чтобы вы могли сосредоточиться на создании удобного пользовательского интерфейса.

Архитектура

Большинство современных веб-приложений действуют какОдностраничное приложениеПостроенный, передняя часть отделена от задней. следоватьМикросервисная архитектура, Серверная часть обычно делится на несколько служб.

Как правило, серверная часть Cube.js работает как служба, управляющая подключением к базе данных, включая очереди запросов, кеширование и предварительную агрегацию. В то же время API предоставляется интерфейсным приложениям для создания информационных панелей и других функций анализа.

\"\"

внешний интерфейс

Через клиент React Cube.js вы можете использовать React для создания интерфейсов и панелей мониторинга. Вы также можете использовать любой фреймворк или просто обычный JavaScript для создания внешнего интерфейса Cube.js,Из этого туториала Вы узнаете, как создать приборную панель на чистом JavaScript.. Мы будем использовать приложение Create React, официально поддерживаемое командой React, для настройки всего, которое объединяет все зависимости приложения React и может легко начать использовать новые проекты. Выполните в терминале следующую команду:

Мы будем использовать Reactstrap для создания нашего пользовательского интерфейса, который является оболочкой React для Bootstrap 4. Используйте NPM для установки Reactstrap и Bootstrap. Reactstrap не включает Bootstrap CSS, поэтому его нужно устанавливать отдельно:

Перед импортом ./index.css импортируйте CSS Bootstrap в файл src / index.js:

Теперь мы готовы использовать компоненты Reactstrap.

Следующим шагом является установка клиента Cube.js, чтобы данные можно было получать с сервера и библиотеки визуализации и отображать. В этом уроке мы будем использовать Recharts. Cube.js не зависит от визуализации, что означает, что можно использовать любую необходимую библиотеку. Мы также будем использовать момент и число для удобного форматирования дат и чисел.

Таким образом мы получаем зависимости. Затем продолжаем создавать нашу первую диаграмму, заменяя содержимое src / App.js следующим:

Может быть в следующихCodeSandboxПосмотреть этот пример в.

\"\"

Затем позвольте нам глубже понять, как загружать данные и рисовать диаграммы.

Сначала мы инициализируем клиент API Cube.js:

Здесь мы используем две переменные среды REACT_APP_CUBEJS_TOKEN и REACT_APP_API_URL. Если переменная среды начинается с REACT_APP_, приложение Create React автоматически загрузит ее из файла .env. Серверная часть Cube.js распечатает эти токены API во время запуска.

\"\"

Создайте файл .env с правильными учетными данными.

Затем мы используем компонент React QueryRenderer Cube.js для загрузки данных заказов.

QueryRenderer выполняет запросы API к бэкэнду Cube.js и использует их по мере необходимости.render propsТехнология рендеринга результата. Мы уже ввели формат запроса выше и хотим получить последний формат, вотПолный справочник по формату запроса.

Параметр визуализации QueryRenderer представляет собой несколько типов функций () = \ u0026gt; React.Node. Вывод этой функции будет предоставлен QueryRenderer. ResultSet - это объект данных, полученный в результате запроса. Если этот объект не определен, это означает, что данные все еще извлекаются.

ResultSet предоставляет множество методов манипулирования данными, но в нашем примере необходим только метод chartPivot, который возвращает данные в формате, ожидаемом Recharts.

Мы рисуем данные заказа в виде гистограммы в адаптивном контейнере.

Cube.js: полное руководство по платформе панели мониторинга с открытым исходным кодом

Cube.jsЭто платформа с открытым исходным кодом для создания аналитических веб-приложений, которая в основном используется для создания внутренних инструментов бизнес-аналитики или добавления ориентированного на клиента анализа в существующие приложения. В большинстве случаев первым шагом в создании такого приложения является анализ информационной панели. Обычно все начинается с «добавления аналитической панели к панели управления», а затем, как это часто бывает при разработке программного обеспечения, все становится сложнее.

Когда вы начинаете использовать Cube.js, вы хотите создать инструмент, который сначала будет простым, но легко расширяемым с точки зрения функциональности, сложности и объема данных. Cube.js закладывает прочную основу для будущих систем анализа, будь то автономное приложение или встроенное в существующую систему анализа.

Это руководство можно рассматривать как «Cube.js 101», в котором представлены основные этапы проектирования первой панели мониторинга от базы данных до визуализации.
Живая демонстрация окончательной дашборда доступна по адресуВотполучить. Полный исходный код находится вНа GitHub.

Следующий шаг

Выше приведена панель инструментов, на которой мы построили простую проверку концепции с помощью Cube.js. допустимыйВотПосмотретьЖивая демонстрация. GitHub имеетПолный исходный код。

Чтобы узнать больше о внутреннем развертывании Cube.js, вы можете обратиться кРазверните документы.Кроме того, здесь можно найти по разным темамБольше руководств。

Интеллектуальная рекомендация

Начало работы с jdbc

Что такое jdbc? (понимание) использоватьjavaОтправка кода (программы)sqlТехника предложенияjdbcтехнологии! нота: Без jdbcРаньше javaРазработчикам необходимо поддерживать драйверы для разных баз .


Windows устанавливает nodejs с помощью nvm


Пример унарной линейной регрессии (нативная реализация, реализация sklearn)

Справочник статей 0. Подготовка необработанных данных 0,1 данные 0.2 Графический дисплей 1. Нативная реализация Python 1.1 Путеводитель 1.2 Рассчитать среднеквадратичную ошибку 1.3 Градиентный спуск 1.

Рассчитайте геометрию простого многоугольного ядра (будь то звездный многоугольник)

Что такое звездный полигон? На самом деле, есть точка A внутри многоугольника, и соединение между любой точки многоугольника находится внутри полигона, который называется звездоолигон, который называе.


[Коллекционное издание] Длинная статья, объясняющая регулярные выражения Python

оглавление Во-первых, обычная функция Два, повторный вызов модуля Три, жадный режим В-четвертых, группировка V. Модификаторы регулярных выражений Шесть, режим регулярного выражения VII. Общие регулярн.

Cube.js, the Open Source Dashboard Framework: Ultimate Guide

Cube.js is an open source framework for building analytical web applications. It is primarily used to build internal business intelligence tools or to add customer-facing analytics to an existing application. In a majority of cases, the first step of building such an application is an analytics dashboard. It usually starts with—“let’s add an analytics dashboard to our admin panel.” Then, as it always happens in software development, things get more complicated, much more complicated.

When we started working on Cube.js, we wanted to build a tool, which is simple to start but scales easily in features, complexity, and data volume. Cube.js puts down a solid foundation for your future analytical system, whether it is a standalone application or embedded into the existing one.

You can think about this tutorial as “Cube.js 101.” I’ll walk you through the basic steps of designing the first dashboard from the database to visualizations.

Собираем логи Nginx

По умолчанию, логи Nginx выглядят как-то так:

S3 для хранения

Чтобы хранить логи, мы будем использовать S3. Это позволяет хранить и анализировать логи в одном месте, так как Athena может работать с данными в S3 напрямую. Дальше в статье я расскажу, как правильно складывать и процессить логи, но для начала нам нужен чистый бакет в S3, в котором ничего больше храниться не будет. Стоит заранее подумать, в каком регионе вы создадите бакет, потому что Athena доступна не во всех регионах.

Создаем схему в консоли Athena

Создадим таблицу в Athena для логов. Она нужна и для записи, и для чтения, если вы планируете использовать Kinesis Firehose. Открываете консоль Athena и создаете таблицу:

Создаем Kinesis Firehose Stream

Kinesis Firehose запишет данные, полученные от Nginx, в S3 в выбранном формате, разбив по директориям в формате ГГГГ/ММ/ДД/ЧЧ. Это пригодится при чтении данных. Можно, конечно, писать напрямую в S3 из fluentd, но в этом случае придется писать JSON, а это неэффективно из-за большого размера файлов. К тому же, при использовании PrestoDB или Athena, JSON — самый медленный формат данных. Так что открываем консоль Kinesis Firehose, нажимаем "Create delivery stream", выбираем "direct PUT" в поле "delivery":

Kinesis Firehose Console 1

В следующей вкладке выбираем "Record format conversion" — "Enabled" и выбираем "Apache ORC" как формат для записи. Согласно исследованиям некоторого Owen O'Malley, это оптимальный формат для PrestoDB и Athena. В качестве схемы указываем таблицу, которую мы создали выше. Обратите внимание, что S3 location в kinesis можно указать любой, из таблицы используется только схема. Но если вы укажете другой S3 location, то прочитать из этой таблицы эти записи не получится.

Kinesis Firehose Console 2

Выбираем S3 для хранения и бакет, который мы создали раньше. Aws Glue Crawler, про который я расскажу чуть позже, не умеет работать с префиксами в S3 бакете, так что его важно оставить пустым.

Kinesis Firehose Console 3

Остальные опции можно изменять в зависимости от вашей нагрузки, я обычно использую дефолтные. Обратите внимание, что сжатие S3 недоступно, но ORC использует собственное сжатие по умолчанию.

Fluentd

Теперь, когда у нас настроено хранение и получение логов, надо настроить отправку. Мы будем использовать Fluentd, потому что я люблю Ruby, но вы можете использовать Logstash или отправлять логи в kinesis напрямую. Fluentd сервер можно запустить несколькими способами, я расскажу про docker, потому что это просто и удобно.

Для начала, нам нужен файл конфигурации fluent.conf. Создайте его и добавьте source:

type forward
port 24224
bind 0.0.0.0

Теперь можно запустить Fluentd сервер. Если вам нужна более продвинутая конфигурация, на Docker Hub есть подробный гайд, в том числе и о том, как собрать свой образ.

Эта конфигурация использует путь /fluentd/log для кэширования логов перед отправкой. Можно обойтись без этого, но тогда при перезапуске можно потерять все закэшированное непосильным трудом. Порт тоже можно использовать любой, 24224 — это дефолтный порт Fluentd.

Если вы запускаете Nginx иначе, вы можете использовать лог-файлы, в Fluentd есть file tail plugin.

Добавим в конфигурацию Fluent парсинг логов, настроенный выше:

И отправку логов в Kinesis, используя kinesis firehose plugin:

задняя часть

Анализ начинается с генерируемых данных и находится в базе данных. Если у пользователя уже есть база данных, подходящая для приложения, ее обычно можно использовать непосредственно для анализа. Современные популярные базы данных, такие как Postgres или MySQL, могут выполнять простой анализ. Под простым термином здесь понимаются данные, содержащие менее 1 миллиарда строк.

Кроме того, MongoDB тоже возможна, но вам нужно добавить MongoDB Connector для BI. Он позволяет выполнять код SQL поверх данных MongoDB. Он бесплатный и может быть загружен прямо с веб-сайта MongoDB. Следует отметить, что по соображениям производительности не рекомендуется запускать аналитические запросы непосредственно в производственной базе данных. Поэтому, хотя Cube.js может значительно снизить рабочую нагрузку на базу данных, все же рекомендуется подключиться к копии.

В общем, если вы используете Postgres или MySQL, вам нужно только создать копию. Если вы используете MongoDB, загрузите MongoDB Connector for BI и создайте копию.

Если у вас нет данных для создания панели инструментов, вы можете загрузить набор данных Postgres для электронной коммерции в примере.

Когда в базе данных есть данные, вы можете начать создание серверной службы Cube.js. Выполните в терминале следующую команду:

Приведенная выше команда устанавливает интерфейс командной строки Cube.js и создает новую службу, настроенную для работы с базой данных Postgres.

Cube.js использует переменные среды для конфигурации, а переменные среды начинаются с CUBEJS_. Для настройки подключения к базе данных необходимо указать тип и имя базы данных. В папке проекта Cube.js замените следующее содержимое .env:

Аналоги и альтернативы для Cube.js

Cube.js - похожие решения и продукты


AppMaster.io

AppMaster.io — это no-code платформа для создания и публикации мобильных и веб-приложений, подходящих для любой операционной системы


IdeaV (aka Интеграл)

IdeaV (aka Интеграл) — это конструктор для создания веб-приложений «всё-в-одном»


Modus BI

Modus BI — платформа для бизнес-аналитики, позволяющая собирать и визуализировать данные из различных источников, формировать отчетность и создавать прогнозы для принятия эффективных управленческих решений и мониторинга наиболее важной информации для бизнеса

Flask

Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2


Django

Джанго — бесплатный и свободный фреймворк для веб-приложений, написанный на Python


Qlik Sense

Qlik Sense – это приложение для самостоятельной визуализации, исследования и мониторинга данных


Tableau

Система интерактивной бизнес аналитики (BI)


Framer X

Framer X - это программа для создания прототипов, в которой прототип создается сразу в коде, на языке CoffeeScript, который компилируется в JavaScript


Adalo

Adalo - это платформа для создания мобильных и веб-приложений, которые можно публиковать в App Store, Google Play или как Progressive Web App


Yandex DataLens

Сервис визуализации и анализа данных. Настраивайте аналитические дашборды с диаграммами, таблицами и другими вариантами визуализации над различными источниками


Датамастер

ДАТАМАСТЕР - это сервис для создания своего веб-приложения без навыков программирования


Redash

Подключайтесь и запрашивайте источники данных, создавайте информационные панели для визуализации данных и делитесь ими со своей компанией


Rust Язык программирования

Rust — это язык программирования, разрабатываемый в компании Mozilla, который обладает большим количеством интересных функциональных свойств и возможностей, среди которых особенно выделяются средства обеспечения безопасности программного кода


Laminas

Laminas (ранее Zend Framework) — свободный фреймворк на PHP для разработки веб-приложений


Node.js

Node JS платформа для серверной разработки основанная на движке V8 JavaScript

Схема данных Cube.js

Следующим шагом будет созданиеСхема данных Cube.js. Cube.js использует схему данных для генерации кода SQL, который будет выполняться в базе данных. Схема данных не заменяет SQL, она направлена ​​на то, чтобы сделать SQL повторно используемым и придать ему структуру, сохранив при этом все его функции. Основными элементами схемы данных являются меры и измерения.
,
Мера называется количественными данными, такими как объем продаж, уникальные посещения, прибыль и т. Д.

Измерение называется данными классификации, такими как статус, пол, название продукта или единица времени (например, день, неделя, месяц).

Обычно файл схемы находится в папке схемы. Ниже приведены примеры архитектур, которые можно использовать для описания пользовательских данных.

Теперь с помощью приведенной выше схемы вы можете отправлять запросы о пользовательских данных в серверную часть Cube.js. Запросы Cube.js - это чистые объекты JavaScript. Обычно он имеет одну или несколько мер, измерений и timeDimensions.

Cube.js сгенерирует требуемый SQL на основе схемы, выполнит его и отправит результат обратно.

Мы можем создать немного более сложный запрос и добавить timeDimensions, чтобы увидеть, как соотношение разных городов менялось каждый месяц в прошлом году. Для этого вам необходимо добавить измерение времени signedUp, сгруппировать по месяцам и включить только прошлогоднюю регистрацию.

Cube.js также может сгенерировать простую схему на основе таблицы базы данных, и ему необходимо создать необходимую схему для панели мониторинга и запустить сервер для разработки.

Отзывы

Плюсы и минусы продукта

Отзывов пока нет.

Разработчик открытой платформы для создания сервисов аналитики Cube Dev с основателями из России привлёк $6,2 млн

Стартап планирует потратить деньги за запуск коммерческой версии сервиса.


Аналитика логов Nginx с помощью Amazon Athena и Cube.js

Обычно для мониторинга и анализа работы Nginx используют коммерческие продукты или готовые open-source альтернативы, такие как Prometheus + Grafana. Это хороший вариант […]

Athena

Если вы все правильно настроили, то через некоторое время (по-умолчанию Kinesis записывает полученные данные раз в 10 минут) вы должны увидеть файлы логов в S3. В меню "monitoring" Kinesis Firehose можно увидеть, сколько данных записано в S3, а так же ошибки. Не забудьте дать доступ на запись в бакет S3 для роли Kinesis. Если Kinesis что-то не смог распарсить, он сложит ошибки в том же бакете.

Теперь можно посмотреть данные в Athena. Давайте найдем свежие запросы, на которые мы отдали ошибки:

Сканирование всех записей на каждый запрос

Теперь наши логи обработаны и сложены в S3 в ORC, сжаты и готовы к анализу. Kinesis Firehose даже разложил их по директориям на каждый час. Однако, пока таблица не партицирована, Athena будет загружать данные за все время на каждый запрос, за редким исключением. Это большая проблема по двум причинам:

  • Объем данных постоянно растет, замедляя запросы;
  • Счет за Athena выставляется в зависимости от объема просканированных данных, с минимумом 10 МБ за каждый запрос.

Настраиваем Amazon Glue Crawler

Amazon Glue Crawler сканирует все данные в S3 бакете и создает таблицы с партициями. Создайте Glue Crawler из консоли AWS Glue и добавьте бакет, в котором вы храните данные. Вы можете использовать один краулер для нескольких бакетов, в этом случае он создаст таблицы в указанной базе данных с названиями, совпадающими с названиями бакетов. Если вы планируете постоянно использовать эти данные, не забудьте настроить расписание запуска Crawler в соответствии с вашими потребностями. Мы используем один Crawler для всех таблиц, который запускается каждый час.

Партицированные таблицы

После первого запуска краулера в базе данных, указанной в настройках, должны появиться таблицы для каждого просканированного бакета. Откройте консоль Athena и найдите таблицу с логами Nginx. Давайте попробуем что-нибудь прочитать:

Этот запрос выберет все записи, полученные с 6 до 7 утра 8 апреля 2019 года. Но насколько это эффективнее, чем просто читать из не-партицированной таблицы? Давайте узнаем и выберем те же записи, отфильтровав их по таймстемпу:

Запрос без партиций

3.59 секунды и 244.34 мегабайт данных на датасете, в котором всего неделя логов. Попробуем фильтр по партициям:

Запрос с фильтром по партициям

Чуть быстрее, но самое важное — всего 1.23 мегабайта данных! Это было бы гораздо дешевле, если бы не минимальные 10 мегабайт за запрос в прайсинге. Но все равно гораздо лучше, а на больших датасетах разница будет куда более впечатляющей.

Cube.js Data Schema

The next step is to create a Cube.js data schema. Cube.js uses the data schema to generate an SQL code, which will be executed in your database. The data schema is not a replacement for SQL. It is designed to make SQL reusable and give it a structure while preserving all of its power. Basic elements of the data schema are measures and dimensions .

Measure is referred to as quantitative data, such as the number of units sold, number of unique visits, profit, and so on.

Dimension is referred to as categorical data, such as state, gender, product name, or units of time (e.g., day, week, month).

Conventionally, schema files are located in the schema folder. Here is an example of the schema, which can be used to describe users’ data.

Now, with the above schema in place, we can send queries to the Cube.js API about users’ data. Cube.js queries are plain javascript objects. Usually it has one or more measures , dimensions , and timeDimensions .

If we want to answer the question “Where are our users based?” we can send the following query to the Cube.js:

Cube.js will generate the required SQL based on the schema, execute it, and send the result back.

Let’s create a slightly more complicated query. We can add a timeDimensions to see how the ratio of different cities has been changing every month during the last year. To do this, we will add a signedUp time dimension, group it by monthly, and filter only last year’s signups.

Cube.js can generate simple schemas based on your database’s tables.

To do that, you can open localhost:4000 in your browser. You will see Developer Playground, a companion tool that will help you develop your Cube.js app.

Please navigate to the Schema tab, select the public schema, and click "Generate Schema". Great! You can inspect generated schemas and send test queries on the Build tab of Developer Playground.

Аналитика логов Nginx с помощью Amazon Athena и Cube.js

Обычно для мониторинга и анализа работы Nginx используют коммерческие продукты или готовые open-source альтернативы, такие как Prometheus + Grafana. Это хороший вариант для мониторинга или real-time аналитики, но не слишком удобный для исторического анализа. На любом популярном ресурсе объем данных из логов nginx быстро растет, и для анализа большого объема данных логично использовать что-то более специализированное.

В этой статье я расскажу, как можно использовать Athena для анализа логов, взяв для примера Nginx, и покажу, как из этих данных собрать аналитический дэшборд, используя open-source фреймворк cube.js. Вот полная архитектура решения:

Архитектура

Для сбора информации мы используем Fluentd, для процессинга — AWS Kinesis Data Firehose и AWS Glue, для хранения — AWS S3. С помощью этой связки можно хранить не только логи nginx, но и другие эвенты, а также логи других сервисов. Вы можете заменить некоторые части на аналогичные для вашего стэка, например, можно писать логи в kinesis напрямик из nginx, минуя fluentd, или использовать logstash для этого.

Architecture

The majority of modern web applications are built as a single-page application, where the frontend is separated from the API. The API is also usually split into multiple services, following a microservice architecture.

Cube.js embraces this approach. Conventionally you run Cube.js API as a service. It manages the connection to your database, including queries queue, caching, pre-aggregation, and more. It also exposes an API for your frontend app to build dashboards and other analytics features.

Analytics starts with the data and data resides in a database. That is the first thing we need to have in place. You most likely already have a database for your application and usually, it is just fine to use for analytics. Modern popular databases such as Postgres or MySQL are well suited for a simple analytical workload. By simple, I mean a data volume with less than 1 billion rows.

MongoDB is fine as well, the only thing you’ll need to add is MongoDB Connector for BI. It allows executing SQL code on top of your MongoDB data. It is free and can be easily downloaded from the MongoDB website. One more thing to keep in mind is replication. It is considered a bad practice to run analytics queries against your production database mostly because of the performance issues. Cube.js can dramatically reduce the amount of a database’s workload, but still, I’d recommend connecting to the replica.

To summarize— If you use Postgres or MySQL, just create a replica and we’re good to go. If you use MongoDB—download MongoDB Connector for BI and create a replica.

If you don’t have any data for the dashboard, you can use a publicly available cloud-based Postgres dataset with e-commerce data.

First, make sure you have Docker installed on your machine. You can also get started using Node.js.

Second, create new a folder for your Cube.js app and navigate to it:

The last step is to run Cube.js:

Next Steps

We’ve built a simple proof of concept dashboard with Cube.js. You can check the live demo here. The full source code is available on GitHub.

To learn more about Cube.js API deployment, you can refer to the deployment documentation.

And join our Slack! It is a great place to get help and stay up to date with new releases.

Читайте также: