首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黎曼的ALerting?

黎曼的ALerting?
EN

Stack Overflow用户
提问于 2014-06-30 11:05:27
回答 1查看 861关注 0票数 3

我使用ELK (logstash,ES,Kibana)栈进行日志分析,使用Riemann进行警报。我有日志,用户是由logstash解析的字段之一,我从riemann输出插件将事件发送给riemann。

Logstash解析日志和用户是字段之一。原木解析

代码语言:javascript
复制
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:

代码语言:javascript
复制
riemann {
    riemann_event => {
        "service"     => "logins"
        "unique_user" => "%{user}"
    }
}

因此用户的值将是: root、sid、abc、root、sid、def等等。

因此,我按用户分割流,即为每个唯一用户分配一个流。现在,当唯一的用户数超过3时,我想提醒您。我写了以下内容,但这是而不是实现了我的目标。

Riemann:

代码语言:javascript
复制
(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")       
     ))))))))

我是黎曼和克洛尔的新手。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2017-01-16 20:39:38

email返回一个流。因此,要使其工作,必须将其作为流使用,将其作为参数传递给另一个流,或者使用call-rescue直接向其发送事件。此外,用于接收来自多个源的事件的流(例如您的警报目的地)应该创建一次,并存储在一个变量中以供重用。

第一种方法,只使用抽象流:

代码语言:javascript
复制
(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

代码语言:javascript
复制
(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))))))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24488715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档