Интеграция Deephaven и Prometheus, часть 3: объединение данных временных рядов
Джейк Малфорд
Объединение ваших данных в режиме реального времени в единый источник достоверности — в данном случае в одну таблицу, которой вы можете управлять, — упрощает и повышает эффективность анализа.
В предыдущих двух частях нашей серии статей о Prometheus мы обсуждали, как получать данные как из Prometheus REST API, так и из веб-перехватчиков предупреждений Prometheus. Теперь у нас есть два постоянных потока данных: один, который отслеживает наши показатели, и другой, который сообщает нам, когда оповещения были запущены и разрешены.
В этом посте мы объединим эти потоки данных в единую таблицу, что позволит нам отслеживать наши метрики с оповещениями, которые запущены и разрешены.
Присоединение данных о времени
На данный момент наше приложение Prometheus создает два источника данных в реальном времени. Для дальнейшего анализа мы хотим объединить эти таблицы.
Deephaven поддерживает несколько операций соединения; в общем, таблицы объединяются через ряд столбцов, используемых в качестве ключей для сопоставления строк из двух таблиц. Prometheus REST API и вебхуки предупреждений Prometheus имеют три общих поля: задание, экземпляр и временная метка. Используя одни и те же имена столбцов для отслеживания этих таблиц, две таблицы можно легко соединить.
Данные задания и экземпляра Prometheus легко объединяются. Это просто строки, которые исходят от того, какие задания Prometheus отслеживает и в каких местах, поэтому мы знаем, что они всегда будут перекрываться в двух таблицах.
Тем не менее, временные метки должны быть подготовлены соответствующим образом. Если мы извлекаем данные с определенной периодичностью, мы не можем гарантировать, что наши оповещения будут срабатывать или разрешаться в то же время, что и извлекаемые, а это означает, что между нашими таблицами нет гарантированного перекрытия.
Язык запросов Deephaven предоставляет методы для группировки времени на основе временных интервалов. lowerBin позволяет вам привязать временную метку к ячейке, а upperBin позволяет вам привязать временную метку к ячейке. Например, если у нас есть метка времени 2020-01-01T00:35:01.5
и интервал T1S
(1 секунда), lowerBin
преобразует это время в 2020-01-01T00:35:01
, а upperBin
преобразует это время в 2020-01-01T00:35:02
.
Мы можем использовать любой из этих методов бина, чтобы округлить наши временные метки из Prometheus, чтобы соединить их вместе. В этом примере кода показано, как уменьшить временные метки до полсекунды.
nanos_bin = 500000000 # We want to floor our Prometheus timestamps to half a second prometheus_alerts_floored = prometheus_alerts.update( "PrometheusDateTimeFloored = lowerBin(PrometheusDateTime, nanos_bin)" ).dropColumns("PrometheusDateTime") prometheus_metrics_floored = prometheus_metrics.update( "PrometheusDateTimeFloored = lowerBin(PrometheusDateTime, nanos_bin)" ).dropColumns("PrometheusDateTime") prometheus_alerts_metrics = prometheus_alerts_floored.join(prometheus_metrics_floored, "PrometheusDateTimeFloored, Job, Instance")
Теперь у нас есть одна таблица, содержащая данные из обеих наших тиковых таблиц! Отсюда вы можете манипулировать и анализировать эти данные в пользовательском интерфейсе Deephaven — например, динамически отображать ваши данные или фильтровать интересующие значения.
Образец приложения
Пример приложения Prometheus alerts metrics демонстрирует, как объединить две таблицы, содержащие данные о времени срабатывания, и сохранить их в Deephaven.
Этот проект доступен для запуска кем угодно, поэтому не стесняйтесь запускать его локально и изменять правила предупреждений, таблицы данных или любую другую конфигурацию, чтобы увидеть различные вещи, которые вы можете выполнить с помощью Deephaven!