Я использую стек ELK (logstash, ES, Kibana) для анализа журнала и Riemann для оповещения. У меня есть журналы, в которых пользователи являются одним из полей, проанализированных logstash, и я отправляю события в riemann из плагина вывода riemann.
Logstash анализирует журналы, и пользователь является одним из полей. Например: журналы проанализированы
Timestamp user command-name
2014-06-07... root sh ./scripts/abc.sh
2014-06-08... sid sh ./scripts/xyz.sh
2014-06-08... abc sh ./scripts/xyz.sh
2014-06-09... root sh ./scripts/xyz.sh
Логсташ:
riemann {
riemann_event => {
"service" => "logins"
"unique_user" => "%{user}"
}
}
Таким образом, значения пользователей будут такими: root, sid, abc, root, sid, def и т. д....
Поэтому я разделяю поток по пользователю, т.е. по одному потоку для каждого уникального пользователя. Теперь я хочу предупредить, когда количество уникальных пользователей превысит 3. Я написал следующее, но это не достигает моей цели.
Риман:
(streams
(where (service "logins")
(by :unique_user
(moving-time-window 3600
(smap (fn [events]
(let
[users (count events)]
(if (> users 3)
(email "[email protected]")
))))))))
Я новичок в Riemann и clojure. Любая помощь приветствуется.