Графана/Поток времени: как визуализировать количество определенных событий с течением времени

#grafana #amazon-timestream

#графана #amazon-поток времени

Вопрос:

Я новичок в Grafana и Timestream и хочу продемонстрировать их пригодность для моих нужд.

Моя цель-визуализировать ряд определенных событий в журналах.

У меня есть поле, представляющее идентификатор сеанса (cmcd_sid ) и некоторый индикатор — cmcd_bs:

 cmcd_sid cmcd_bs lt;other fieldsgt;  "78b459fc-9fab-4286-8840-8f1420f528da" -  "78b459fc-9fab-4286-8840-8f1420f528da" -  "78b459fc-9fab-4286-8840-8f1420f528da" true  

Итак, мне нужно получить и визуализировать количество сеансов (cmcd_sid), в которых более 1% cmcd_bs=true

 WITH total_requests AS (  SELECT cast (count(*) as double) as CNT_TOTAL, cmcd_sid as SID_TOTAL FROM $__database.$__table  WHERE cmcd_sid is not NULL  AND time gt; ago(3h)  GROUP BY cmcd_sid ), bs_requests AS (  SELECT cast (count(*) as double) as CNT_BS, cmcd_sid as SID_BS FROM $__database.$__table  WHERE cmcd_bs is not NULL  AND time gt; ago(3h)  GROUP BY cmcd_sid ) SELECT count(DISTINCT SID_BS), SID_BS FROM total_requests, bs_requests WHERE SID_TOTAL = SID_BS  AND CNT_BS / CNT_TOTAL * 100 gt; 1 GROUP BY SID_B  

Я написал запрос, который дал мне эти сеансы, но когда я пытаюсь визуализировать его в Графане, он выдает «Данные не имеют поля времени».

В идеале я хочу иметь график, показывающий, сколько у меня таких сеансов за определенный период времени, но не уверен, как я могу включить поле времени в запрос?

Ответ №1:

1. Тип визуализации

График временных рядов в Графане ожидает поле времени, вы можете выбрать другие типы визуализации в правом верхнем углу панели редактирования. Общее количество сеансов с более чем 1% cmcd_bs = true , по-видимому, составляет одно-единственное число. Если это так, вы можете выбрать, например, тип графика «Статистика» или «Показатель». введите описание изображения здесь

2. Запрос временного потока

Обратите внимание, что:

  • Окончательная группировка по в вашем запросе не влияет, так как 2 CTE уже сгруппированы по этому столбцу.
  • Вы можете объединить 2 CTE в один, так как они группируются по одному и тому же ключу.
  • cmcd_bs is not NULL не эквивалентно cmcd_bs = true Поэтому вы можете переписать свой запрос:
 WITH  session_stats AS (  SELECT   cmcd_sid,   SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate  FROM $__database.$__table  WHERE   cmcd_sid IS NOT NULL  AND time gt; ago(3h)  GROUP BY cmcd_sid  ) SELECT  COUNT(*) AS high_true_bs_rate_session_count FROM session_stats WHERE true_bs_rate gt; 0.01  

3. Фильтр времени

В вашем запросе есть фильтр с фиксированным временем time gt; ago(3h) . Поэтому значение не изменится, если вы измените период в Графане (вы можете выбрать период времени в правом верхнем углу главной панели мониторинга). Чтобы считать записи только в течение периода времени, определенного в Grafana, вам необходимо перейти $__timeFilter к вашему запросу:

 WITH  session_stats AS (  SELECT   cmcd_sid,   SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate  FROM $__database.$__table  WHERE   cmcd_sid IS NOT NULL  AND $__timeFilter  GROUP BY cmcd_sid  ) SELECT  COUNT(*) AS high_true_bs_rate_session_count FROM session_stats WHERE true_bs_rate gt; 0.01  
  1. Визуализации временных рядов

Если вам нужно не одно значение, а скорее эволюция этого ежедневного (или еженедельного, ежемесячного,…) подсчета с течением времени. Вы можете сгруппировать данные по нужному периоду вместо объединения по всему набору данных:

 WITH  session_stats AS (  SELECT   cmcd_sid,   MIN(time) AS session_start_time,  SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate  FROM $__database.$__table  WHERE   cmcd_sid IS NOT NULL  GROUP BY cmcd_sid  HAVING   MIN(time) gt;= from_milliseconds(${__from})   AND MIN(time) lt; from_milliseconds(${__to})  ) SELECT  DATE_TRUNC('day', session_start_time) AS day,  COUNT(*) AS high_true_bs_rate_session_count FROM session_stats WHERE true_bs_rate gt; 0.01 GROUP BY DATE_TRUNC('day', session_start_time)  

Примечание: сеансы могут быть усечены, $__timeFilter и количество cmcd_bs = true будет смещено для этих сеансов, поэтому фильтр времени выполняется после первой группы по. Это также должно относиться к другим запросам.