作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ELK(logstash、ES、Kibana)堆栈进行日志分析,并使用 Riemann 进行警报。我有日志,其中用户是 logstash 解析的字段之一,我将事件从 riemann 输出插件发送给 riemann。
Logstash解析日志,user是字段之一。例如:解析的日志
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
Logstash:
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 "abc@gmail.com")
))))))))
我是 Riemann 和 clojure 的新手。感谢您的帮助。
最佳答案
email
返回一个流。因此,要使其正常工作,您必须将其用作流,将其作为参数传递给另一个流,或者使用 call-rescue
直接向其发送事件。此外,旨在从多个来源(例如您的警报目的地)接收事件的流应该创建一次,并存储在一个变量中以供重复使用。
第一种方法,仅使用抽象流:
(let [alert (email "abc@gmail.com")]
(streams
(where (service "logins")
(by :unique_user
(moving-time-window 3600
(smap folds/count
(where (> metric 3) alert)))))))
第二种方法,使用call-rescue
:
(let [alert (email "abc@gmail.com")]
(streams
(where (service "logins")
(by :unique_user
(moving-time-window 3600
(fn [events]
(when (> (count events) 3)
(call-rescue (last events) alert))))))))
关于clojure - 提醒黎曼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488715/
我是一名优秀的程序员,十分优秀!