gpt4 book ai didi

clojure - 提醒黎曼?

转载 作者:行者123 更新时间:2023-12-01 16:12:57 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com