elastalert的学习

简介

Elastalert是用python2写的一个报警框架(目前支持python2.6和2.7,不支持3.x),用于警报Elasticsearch数据中的异常。

工作原理

它的工作原理是将Elasticsearch与规则类型和警报类型的组件相结合,定期查询Elasticsearch并将数据传递给规则类型,该类型确定何时找到匹配项。当匹配发生是,它将赋予一个或多个警报,这些警报根据匹配采取行动。

#安装

git clone https://github.com/Yelp/elastalert.git

进入elastalert的目录,执行

pip install -r requirements.txt
python setup.py install

#在elasticsearch中创建elastalert的日志索引

elastalert-create-index

根据自己的情况,填入elasticsearch的相关信息,不知道的直接回车默认即可。

Elastalert将有关其查询及其警报的信息和与数据保存回elasticsearch。它允许elastalert重新启动并从中断的位置恢复。


#创建配置文件,在elastalert 目录里边有一个config.yaml.example 文件,我们通过copy 一份之后修改成自己需要的配置。

cp config.yaml.example config.yaml

vi config.yaml


#rules 的定义

cd example_rules/
cp example_frequency.yaml my_rule.yaml
vi my_rule.yaml


#测试我们写的rule

elastalert-test-rule my_rule.yaml

#运行命令

python -m elastale.elastalert --verbos --rule example_rules/my_rule.yaml

将elastalert配置为系统服务的方式后台运行

#在etc 下创建程序工作目录
mkdir -p /etc/elastalert/rules
#进入工作目录复制刚刚创建好的配置文件
cd /etc/elastalert/
cp /home/actiontec/ELK/elastalert/config.yaml config.yaml

cp /home/actiontec/ELK/elastalert/smtp_auth_file.yaml smtp_auth_file.yaml
#进入rules 目录复制rule 文件及smtp 认证文件
cp /home/actiontec/ELK/elastalert/example_rules/my_rule.yaml my_rule.yaml

#接下来我们需要修改配置文件中涉及到相应配置文件目录了,
修改 config.yaml 中
rules_folder:/etc/elastalert/rules
修改my_rules.yaml 中
smtp_auth_file: /etc/elastalert/smtp_auth_file.yaml

#接下来就是创建systemd服务了
cd /etc/systemd/system/
vi elastalertd.service

[Unit]
Description=elastalertd
After=elasticsearch.service

[Service]
Type=simple
User=actiontec
Group=actiontec
Restart=on-failure
WorkingDirectory=/home/actiontec/ELK/elastalert
ExecStart=/usr/local/bin/elastalert --config /etc/elastalert/config.yaml --rule /etc/elastalert/rules/my_rule.yaml
[Install]
WantedBy=multi-user.target

#开启服务开机自启动

systemctl enable elastalertd

#启动服务,check 服务启动状态

systemctl start elastalertd

systemctl status elastalertd

安装之后会自带三个命令

elastalert-create-index:ElastAlert会把执行记录存放到一个ES 索引中,该命令就是用来 创建这个索引的,默认情况下,索引名叫elastalert_status。其中有4个 _type,都有 自己的@timestamp字段,所以同样也可以用kibana,来查看这个索引的日志记录情况。

elastalert-rule-from-kibana:从Kibana3已保存的仪表盘中读取Filtering设置,帮助生成config.yaml里的配置。不过注意,它只会读取filtering,不包括queries。

elastalert-test-rule:测试自定义配置中的rule设置。

配置

query部分

除了有关 ES 服务器的配置以外,主要包括:

  • run_every 配置,用来设置定时向 ES 发请求,默认 5 分钟。

  • buffer_time 配置,用来设置请求里时间字段的范围,默认 45 分钟。

  • rules_folder 配置,用来加载下一阶段的 rule 设置,默认是 example_rules

rule 部分

rule 设置各自独立以文件方式存储在rules_folder设置的目录里。其中可以定义下面这些参数:

  • name配置,每个 rule 需要有自己独立的 name,一旦重复,进程将无法启动。

  • type配置,选择某一种数据验证方式。

  • index配置,从某类索引里读取数据,目前已经支持Ymd格式,需要先设置use_strftime_index: true,然后匹配索引,配置形如:index: logstash-es-test-%Y.%m.%d,表示匹配logstash-es-test名称开头,以年月日作为索引后缀的index。

  • Filter 配置,设置向 ES 请求的过滤条件。

  • Timeframe 配置,累积触发报警的时长。

  • alert配置,设置触发报警时执行哪些报警手段。

不同的 type 还有自己独特的配置选项。目前 ElastAlert 有以下几种自带 ruletype:

  • any: 只要有匹配就报警;

  • blacklist:compare_key字段的内容匹配上blacklist数组里任意内容;

  • whitelist:compare_key字段的内容一个都没能匹配上whitelist数组里内容;

  • change: 在相同query_key条件下,compare_key字段的内容,在timeframe范围内发送变化;

  • frequency: 在相同query_key条件下,timeframe范围内有num_events个被过滤出来的异常;

  • spike: 在相同 query_key条件下,前后两个timeframe范围内数据量相差比例超过 spike_height。其中可以通过spike_type设置具体涨跌方向是updownboth。还可以通过threshold_ref设置要求上一个周期数据量的下限,threshold_cur 设置要求当前周期数据量的下限,如果数据量不到下限,也不触发;

  • flatlinetimeframe 范围内,数据量小于 threshold 阈值;

  • new_termfields 字段新出现之前 terms_window_size(默认 30 天) 范围内最多的 terms_size(默认 50) 个结果以外的数据;

  • cardinality: 在相同 query_key 条件下,timeframe 范围内 cardinality_field 的值超过 max_cardinality 或者低于 min_cardinality

alert部分

alert配置是一个数组,目前支持 command, email,jira,opsgenie,sns,hipchat,slack 等方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值