1

我正在使用 InfluxData 堆栈进行时间序列数据中的异常检测,使用 InfluxDB 和 Kapacitor。

我收集了一些开源样本并设置了以下刻度脚本来检测异常:

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 年的日期,而数据库中最早的日期是 2015-01-31。为什么会这样?

4

2 回答 2

2

InfluxDb 为 Kapacitor 提供实时数据它并不是真的打算回溯所有的历史数据,它是作为实时分析/警报工具)。

您当前的查询基本上只查看最新数据(1h),这就是您在那里看到 2016 的原因。这是设计使然。如果您想检查历史数据中的异常情况,您将不得不编写一个小程序(例如,使用 InfluxDb 库作为您选择的语言),它将每小时检查所有旧数据,获取它并从那里分析它。您也可以为此使用回填。

于 2016-02-16T13:22:07.637 回答
1

在 Kapacitor 存储库中发布了一个问题,我的问题的解决方案是使用以下行来重放数据kapacitor replay -id RECORDING_ID -name nyc -fast -rec-time-rec-time这里的关键是解决问题的标志。

感谢Nathanielc解决了这个问题。

于 2016-02-18T12:48:49.790 回答