* |
selecttime,buffer_cnt,log_cnt,buffer_rate,failed_cnt,first_play_cnt,fail_rate
from(selectdate_trunc('minute', time) as time,sum(buffer_cnt) as buffer_cnt,sum(log_cnt) as log_cnt,casewhenis_nan(sum(buffer_cnt)*1.0 / sum(log_cnt)) then0.0 elsesum(buffer_cnt)*1.0 / sum(log_cnt) end as buffer_rate,
sum(failed_cnt) as failed_cnt,
sum(first_play_cnt) as first_play_cnt , casewhenis_nan(sum(failed_cnt)*1.0 / sum(first_play_cnt)) then0.0 elsesum(failed_cnt)*1.0 / sum(first_play_cnt) end as fail_rate fromlog group bytime order bytime)limit 100000
3.2 各指標的時序環比圖
具體的SQL邏輯如下:
*?|
select time,log_cnt_cmp[1] as log_cnt_now,log_cnt_cmp[2] as log_cnt_old,case when is_nan(buffer_rate_cmp[1]) then 0.0 else buffer_rate_cmp[1] end as buf_rate_now,case when is_nan(buffer_rate_cmp[2]) then 0.0 else buffer_rate_cmp[2] end as buf_rate_old,case when is_nan(fail_rate_cmp[1]) then 0.0 else fail_rate_cmp[1] end as fail_rate_now,case when is_nan(fail_rate_cmp[2]) then 0.0 else fail_rate_cmp[2] end as fail_rate_old
from
(
select time, ts_compare(log_cnt, 86400) as log_cnt_cmp,ts_compare(buffer_rate, 86400) as buffer_rate_cmp,ts_compare(fail_rate, 86400) as fail_rate_cmp
from (
select date_trunc('minute', time - time % 120) as time, sum(buffer_cnt) as buffer_cnt, sum(log_cnt) as log_cnt, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate, sum(failed_cnt) as failed_cnt, sum(first_play_cnt) as first_play_cnt ,sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate
from log group by time order by time) group by time)
where time is not null limit 1000000
3.3 各指標動態可視化
具體的SQL邏輯如下:
* |
select time, case when is_nan(buffer_rate) then 0.0 else buffer_rate end as show_index,isp as index
from
(select date_trunc('minute', time) as time, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate,sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate,sum(log_cnt) as log_cnt,sum(failed_cnt) as failed_cnt,sum(first_play_cnt) as first_play_cnt,isp
from log group by time, isp order by time) limit 200000
3.4 異常集合的監控Dashboard頁面
?
異常監控項目的背后圖表SQL邏輯
* |
select res.name
from ( select ts_anomaly_filter(province, res[1], res[2], res[3], res[6], 100, 0) as res from ( select t1.province as province, array_transpose( ts_predicate_arma(t1.time, t1.show_index, 5, 1, 1) ) as res from ( selectprovince,time,case when is_nan(buffer_rate) then 0.0 else buffer_rate end as show_indexfrom (select province, time, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate, sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate, sum(log_cnt) as log_cnt, sum(failed_cnt) as failed_cnt, sum(first_play_cnt) as first_play_cntfrom log group by province, time) ) t1 inner join ( select DISTINCT province from ( select province, time, sum(log_cnt) as total from log group by province, time ) where total > 200 ) t2 on t1.province = t2.province group by t1.province ) ) limit 100000