Skip to content

Instantly share code, notes, and snippets.

View regel's full-sized avatar

Sebastien Leger regel

View GitHub Profile
@regel
regel / model-orders-weather.json
Created December 18, 2018 22:30
Demand forecast tutorial, model including weather predictors
{
"type": "timeseries",
"name": "orders-weather",
"default_datasource": "influx",
"max_evals": 50,
"bucket_interval": "1h",
"span": "auto",
"offset": 30,
"interval": "24h",
@regel
regel / model-orders.json
Created December 18, 2018 22:28
Demand forecast tutorial, model orders
{
"type": "timeseries",
"name": "orders",
"default_datasource": "influx",
"max_evals": 50,
"bucket_interval": "24h",
"span": "auto",
"offset": 30,
"interval": 60,
@regel
regel / influxQL query orders-2
Created December 18, 2018 22:25
influxQL demand forecast tutorial
select temp, clouds from weather where time >='2015-06-30T00:00:00Z' limit 5
name: weather
time temp clouds
---- ---- ------
1435622400000000000 18.33000000000004 0
1435626000000000000 17.760000000000048 0
1435629600000000000 16.439999999999998 0
1435633200000000000 15.840000000000032 0
1435636800000000000 15.340000000000032 0
@regel
regel / influxQL query orders-1
Created December 18, 2018 22:24
influxQL query demand forecast tutorial
select * from orders where time >='2015-06-30T00:00:00Z' limit 5
name: orders
time count
---- -----
1435622400000000000 388
1435626000000000000 384
1435629600000000000 375
1435633200000000000 371
1435636800000000000 368
@regel
regel / pagerduty-example.tick
Last active February 16, 2019 07:53
TICKscript example triggering alerts on PagerDuty
var model = 'telegraf_metrics_count_value_10s'
var from_measurement = 'loudml'
var out_db = 'telegraf'
var retention_policy = 'autogen'
var out_measurement = 'predicted'
@regel
regel / pagerduty-ml.tick
Created December 9, 2018 21:16
TICK script section triggering alerts to PagerDuty
var pos = data
|changeDetect('is_anomaly')
|alert()
.warn(lambda: "is_anomaly" == TRUE)
.crit(lambda: "is_anomaly" == TRUE AND "score" > 90.0)
.message('{{if ne .Level "OK" }} Hey, unexpected situation detected score={{ index .Fields "score" | printf "%0.3f" }} {{else}} Back to normal {{end}}')
.pagerDuty2()
@regel
regel / kapacitor-pagerduty.conf
Last active December 9, 2018 21:08
kapacitor.conf section for PagerDuty integration
data_dir = "/var/lib/kapacitor"
[pagerduty2]
enabled = true
routing-key = ""
url = "https://events.pagerduty.com/v2/enqueue"
global = false
[logging]
# Destination for logs
@regel
regel / section-4.tick
Created December 5, 2018 18:04
TICK-1 section 4
var neg = data
|stateCount(lambda: "is_anomaly" == FALSE)
|alert()
.info(lambda: "state_count" == 1)
.message('{{ .Time }}: situation back to normal model={{ index .Fields "model" }} state=finished score={{ index .Fields "score" | printf "%0.3f" }}.')
.slack()
@regel
regel / section-3.tick
Created December 5, 2018 18:03
TICK-1 section 3
var pos = data
// the next node counts abnormal data points
|stateCount(lambda: "is_anomaly" == TRUE)
|alert()
// Warn after 1 point
.warn(lambda: "state_count" >= 1)
// Critical after 5 points and abnormal higher than 90 / 100
.crit(lambda: "state_count" >= 5 AND "score" > 90.0)
.message('{{ .Time }}: Hey, unexpected situation detected by model={{ index .Fields "model" }} state=ongoing score={{ index .Fields "score" | printf "%0.3f" }}.')
.slack()
@regel
regel / section-2.tick
Last active February 16, 2019 07:58
TICK-1 section 2
var data = stream
// this from node selects all input data received in the given measurement
|from()
.measurement(from_measurement)
.where(lambda: "model" == model)
// this eval node remembers the model name
|eval(lambda: model)
.as('model')
.keep()
// the next five lines save the data to the target database into a new measurement