Hi everyone,
I am building a TICK stack to monitor logs and metrics that come from a network device where I have telegraf running and collecting syslog logs.
From there, I want to build an alert (using a tickscript) when there is an authentication event on the device and MAC address reported on the syslog message is not a “known” one. Alerts go into a telegram bot. Apologies in advanced I am pretty new TICK stack (this is my fourth tickscript) so getting up to speed with it. Sanitized script looks like the following:
var period = 1m var every = 1m // Dataframe var data = batch |query('''SELECT message FROM "telegraf"."autogen"."syslog" WHERE message =~ / authenticated/ ''') .period(period) .every(every) .groupBy('host') |last('message') .as('last_message') |log() // Thresholds var alert = data |eval(lambda: if( strContains("last_message", 'MAC_ADDRESS_IN_HERE'), 'true', 'false' )) .as('mac_present') |alert() .id('{{ index .Tags "host"}}') .message('{{ .ID }} : Successful authentication unknown Mac ') .crit(lambda: "mac_present" == 'false') .telegram() .chatId('CHAT_ID_IN_HERE') |log()
I cant make it work the lambda with the strContains in it (cant really tell what last_message contains at that point). Also on a separate note (less important to that one), cant see how to append the whole message syslog string into the .message.
Thanks for your help.
Kapacitor Version 1.5.5
Chronograf Version: 1.8.4