本文為您提供日志數據分析的一些案例。
5分鐘錯誤率超過40%時觸發報警
統計每分鐘的500錯誤率,當最近5分鐘錯誤率超過40%時觸發報警。
status:500 | select __topic__, max_by(error_count,window_time)/1.0/sum(error_count) as error_ratio, sum(error_count) as total_error from (
select __topic__, count(*) as error_count , __time__ - __time__ % 300 as window_time from log group by __topic__, window_time
)
group by __topic__ having max_by(error_count,window_time)/1.0/sum(error_count) > 0.4 and sum(error_count) > 500 order by total_error desc limit 100
統計流量并設置告警
統計每分鐘的流量,當最近的流量出現暴跌時,觸發報警。 由于在最近的一分鐘內,統計的數據不是一個完整分鐘的,所以需要除以greatest(max(__time__) - min(__time__),1)
進行歸一化,統計每個分鐘內的流量均值。
* | SELECT SUM(inflow) / greatest(max(__time__) - min(__time__),1) as inflow_per_minute, date_trunc('minute',__time__) as minute group by minute
計算不同數據區間的平均延時
按照數據區間分桶,在每個桶內計算平均延時。
* | select avg(latency) as latency , case when originSize < 5000 then 's1' when originSize < 20000 then 's2' when originSize < 500000 then 's3' when originSize < 100000000 then 's4' else 's5' end as os group by os
返回不同結果的百分比
返回不同部門的count結果,及其所占百分比。該query結合了子查詢、窗口函數。其中sum(c) over()
表示計算所有行的和。
* | select department, c*1.0/ sum(c) over () from(select count(1) as c, department from log group by department)
統計滿足條件的個數
在URL路徑中,我們需要根據URL不同的特征來計數,這種情況可以使用CASE WHEN語法,但還有個更簡單的語法是count_if。
* | select count_if(uri like '%login') as login_num, count_if(uri like '%register') as register_num, date_format(date_trunc('minute', __time__), '%m-%d %H:%i') as time group by time order by time limit 100
文檔內容是否對您有幫助?