influxdata / kapacitor

Open source framework for processing, monitoring, and alerting on time series data
MIT License
2.31k stars 492 forks source link

Unable to use logical operator (OR) on lambda whereFilter #2224

Open david-alvez opened 5 years ago

david-alvez commented 5 years ago

Hi there,

I've a working deadman alert generated through the wizard, but when I add another server to the alert it stop working.

Working ... var whereFilter = lambda: ("host" == 'dev-mongodb-n1' ) ... Not Working ... var whereFilter = lambda: ("host" == 'dev-mongodb-n1' OR "host" == 'dev-mongodb-n2') ...

Is it possible to use wildcards instead ?

Thanks in advance!

Full Code var db = 'telegraf'

var rp = 'autogen'

var measurement = 'procstat'

var groupBy = []

var whereFilter = lambda: ("host" == 'dev-mongodb-slave-2')

var period = 1m

var name = 'mongod-process-is-not-running'

var idVar = name

var message = 'TEST! DEV {{.Level}}: {{.ID}} from {{.Time}}'

var idTag = 'alertID'

var levelTag = 'level'

var messageField = 'message'

var durationField = 'duration'

var outputDB = 'chronograf'

var outputRP = 'autogen'

var outputMeasurement = 'alerts'

var triggerType = 'deadman'

var threshold = 0.0

var data = stream |from() .database(db) .retentionPolicy(rp) .measurement(measurement) .groupBy(groupBy) .where(whereFilter)

var trigger = data |deadman(threshold, period) .stateChangesOnly() .message(message) .id(idVar) .idTag(idTag) .levelTag(levelTag) .messageField(messageField) .durationField(durationField) .opsGenie2() .teams() .recipients()

trigger |eval(lambda: "emitted") .as('value') .keep('value', messageField, durationField) |eval(lambda: float("value")) .as('value') .keep() |influxDBOut() .create() .database(outputDB) .retentionPolicy(outputRP) .measurement(outputMeasurement) .tag('alertName', name) .tag('triggerType', triggerType)

trigger |httpOut('output')

bogski87 commented 5 years ago

Hi,

Try adding the tag "host" to your group by clause. You could also regex the server name if they're all following a similar name.

var whereFilter = lambda: ("host" =~ /^dev-mongodb-/)

Does that help?