场景:
有长时间对多个端口访问的日志数据,每天对端口的访问量是稳定的。如果某一天对某个端口的访问量突然增加表示可能出现了问题。现在要通过splunk找到异常值。
思路:
统计每个端口每天的访问量。统计其最大值,平均值,中位数。最大值和平均值比值大的,以及最大值和中位数比值大的就是可能异常的地方。通过一个交互折线图来展示选定端口每天的访问量。
1.统计每个端口每天的访问量。
source="port.csv" |fillnull value=NULL|search port!=NULL port != | 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$端口每日访问量
这样当通过表格选择端口后,就可以在折线图上直观看到访问量变化。
效果: