場景:
有長時間對多個端口訪問的日志數據,每天對端口的訪問量是穩定的。如果某一天對某個端口的訪問量突然增加表示可能出現了問題。現在要通過splunk找到異常值。
思路:
統計每個端口每天的訪問量。統計其最大值,平均值,中位數。最大值和平均值比值大的,以及最大值和中位數比值大的就是可能異常的地方。通過一個交互折線圖來展示選定端口每天的訪問量。
1.統計每個端口每天的訪問量。
source="port.csv" |fillnull value=NULL|search port!=NULL port != 0 | convert timeformat="%Y-%m-%d" ctime(_time) AS date | stats count as date_count by date,port
關鍵點:
convert timeformat="%Y-%m-%d" ctime(_time) AS date:數據中時間戳字段為_time,舉例:2017-06-26T00:00:00.000+08:00 用convert將時間轉換為2017-06-26的日期格式。這樣同一天的數據都會有相同的date。
2.統計每個端口每天訪問量的最大值,平均值,中位數,以及比值。
source="port.csv" |fillnull value=NULL|search port!=NULL| convert timeformat="%Y-%m-%d" ctime(_time) AS date | stats count as date_count by date,port|stats median(date_count) as median_count max(date_count) as max_count avg(date_count) as avg_count by dport|eval avg_deviation=max_count/avg_count|eval median_deviation=max_count/median_count|sort -avg_deviation
3.獲取指定端口的每天訪問量
步驟2做表后,點擊編輯來源,打開儀表盤xml,在對應的<search></search>標簽下添加
<drilldown> <set token="select_port">$click.value$</set> </drilldown>
這樣,在點擊port后,就可以通過$select_port$來獲取到對應的port值了。
做折線圖:
source="port.csv" port="$select_port$"|convert timeformat="%Y-%m-%d" ctime(_time) AS date|stats count by date
標題設為:$select_port$端口每日訪問量
這樣當通過表格選擇端口后,就可以在折線圖上直觀看到訪問量變化。
效果: