我想设置一个提醒,以便在发生尖峰时通知我。我的数据结构如下:
#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的人都会对此事有很大帮助。感谢。
答案 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