如何将脚本合并到尖峰弹簧

时间:2016-11-28 23:51:21

标签: elasticsearch elastic-stack elastalert

我想设置一个提醒,以便在发生尖峰时通知我。我的数据结构如下:

#include <iostream>
using namespace std;
class A{
public: 
      void K()
       {
          cout<<"1";
       };
};
class B{
public: typedef A T;
      void K()
      {
          cout<<"2";
      };
};
class C{
public:
      void K()
      {
          cout<<"3";
      };
};
class D{
    public:
    void K()
    {
        cout<<"4";
    };
};
template <class D=A> class E{
public: typedef D T;
    void K()
    {
       cout<<"5";
    };
};
template <> class E<A>{
public:typedef C T;
    void K()
    {
        cout<<"6";
    };
};
template <>class E<C>{
public:typedef B T;
     void K()
     {
       cout<<"7";
     };
};
template <class W, class V=E<W> >
class F{
typedef typename V::T R;
public:
     void K()
     {
         V().K();
         W().K();
         R().K();
    };
};
  int main(){
  E<>().K();
  F<A>().K();
  F<C>().K();
  return 0;
}

我想设置一个尖峰警报,如果无效请求比率超过20分钟时间,则会向我发送电子邮件,但以下规则yaml不会给我任何打击。

"_source": {
          "@timestamp": 2016-11-23T18:30:45.233Z,
          "invalid_request": 400,
          "total_request": 40000
        }

我知道我的电子邮件发送工作正常,因为如果我只是提出一个简单的查询(例如当total_request大于0时的触发器),它会发送电子邮件,但似乎我输入的脚本没有像我预期的那样工作。任何熟悉elastalarm的人都会对此事有很大帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我还没有尝试过这个,但我认为你的ES过滤器是错误的,Elastalert不支持script_fields(据我所知)。即使这样,您也无法在script_fields过滤器中引用range(ES不支持)。

但您可以尝试使用script query。移除script_fields部分,然后将filter部分替换为:

filter:
- script:
    script:
      inline: doc['invalid_request'].value / doc['total_request'].value > threshold
      params:
        threshold: 0