【splunk】按时间统计并找到异常值

场景:

有长时间对多个端口访问的日志数据,每天对端口的访问量是稳定的。如果某一天对某个端口的访问量突然增加表示可能出现了问题。现在要通过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$端口每日访问量

这样当通过表格选择端口后,就可以在折线图上直观看到访问量变化。

效果:

原文地址:https://www.cnblogs.com/dplearning/p/7083620.html