2016-02-15 39 views
1

我使用InfluxData堆栈进行时间序列数据异常检测,使用InfluxDB和Kapacitor。Kapacitor采取错误的时间格式

我收集了一些开源samples,并设置用于检测异常以下蜱脚本:

batch 
    .query('select mean(value) from "nycTaxi"."default"."nycTaxi"') 
     .period(1h) 
     .every(2h) 
     .groupBy(time(1h)) 
.mapReduce(influxql.percentile('mean', 90.0)) 
    .eval(lambda: sigma("percentile")) 
     .as('sigma') 
     .keep('percentile', 'sigma') 
    .alert() 
     .warn(lambda: "sigma" > 2.0) 
     .log('/path/alerts.log') 
     .crit(lambda: "sigma" > 3.0) 
     .log('/path/alerts.log') 

获取警报类似如下:

{"id":"nycTaxi:nil", 
    "message":"nycTaxi:nil is WARNING", 
    "time":"2016-09-13T14:43:21.892057062Z", 
    "level":"WARNING", 
    "data":{ 
    "series":[ 
     { 
     "name":"nycTaxi", 
     "columns":[ 
      "time", 
      "percentile", 
      "sigma" 
     ], 
     "values":[ 
      [ 
      "2016-09-13T14:43:21.892057062Z", 
      1279, 
      2.002345963142575 
    ]]}]}} 

要记录我用这个线路上的数据kapacitor record batch -start 2014-07-01T00:00:00Z -stop 2015-02-31T00:00:00Z -name nyc

由于某种原因,Kapacitor将时间解释为2016年的日期,在DB中最早的日期是2015年-01-31。为什么会发生?

回答

1

我发布了一个issue in the Kapacitor repo,我的问题的解决方案是使用以下行重播数据kapacitor replay -id RECORDING_ID -name nyc -fast -rec-time。这里的关键是标志-rec-time解决了这个问题。

荣誉解决问题的Nathanielc

2

InfluxDb实时向数据类型供应Kapacitor(它并不真正意图通过所有的历史数据倒退,它是指作为实时分析/警报工具)。

您目前的查询基本上只是查看最近的数据(1小时),所以这就是为什么你在那里看到2016年。这是设计。如果您想检查历史数据中的异常情况,则必须编写一个小程序(例如,使用您选择的语言的InfluxD库),该程序将按小时逐个读取所有旧数据,并将其读取并从那里分析它。你也可以使用backfills

+0

但是看到日期说的是'2016-09-13',我们不在那个日期(并且因为未来而不可能在那个日期)。 –

+0

@MartinAparicioPons - 确实,这部分可能是一个错误。你可能想问influxdata github页面。你有什么最新的日期涌入?你使用哪种版本的influxdb和kapacitor?我知道他们改变了我认为influxdb v0.9.6发布时的时间戳格式。直到那时,时间戳才是unix样式的时间戳,之后它们变得很好,人们可读的ISO标准时间戳。所以也许这里有一个错误。 – pootzko

+0

你说得对,我正在回购一个问题。我正在使用InfluxData网页上提供的Influx和Kapacitor(0.10)的最新版本。 –