1. 环境准备

  • Python 3.9
  • pip 21.1.2
  • CentOS 7.x: python3-pip python36 python3-devel python3-libs python3-setuptools libffi-devel openssl-devel

(以上是官网要求的环境,官网地址:https://elastalert2.readthedocs.io/en/latest/

查看版本:
image.png
由于centos7自带python2.7.5 所以我这里替换了软连接
image.png

2. 开始安装

  1. #clone 项目地址
  2. git clone https://github.com/jertel/elastalert2.git
  3. #安装模块
  4. pip install "setuptools>=11.3"
  5. python setup.py install
  6. #es版本5+执行的命令
  7. pip install "elasticsearch>=5.0.0"

执行的时候你可能会遇到一些报错,无非就是缺少相关依赖,google or baidu 一下 很快就能解决。

3. 配置文件详解

elastalert 主要有两个重要的配置文件:全局配置和告警规则配置
全局配置文件:

cp config.yaml.example config.yaml
vim config.yaml

# 告警规则的文件夹路径
rules_folder: example_rules

# 每1分钟检测一次
run_every:
  minutes: 1

# 拉取15分钟的日志
buffer_time:
  minutes: 15

# 这里是es的地址和端口,以及账号密码的配置(如果有)
es_host: 127.0.0.1
es_port: 9200
es_username: elastic
es_password: changeme

# elastalert索引的名称
writeback_index: elastalert_status

# 失败重试的时间限制
alert_time_limit:
  days: 2

告警规则配置:

vim ./example_rules/example_frequency.yaml
# Elasticsearch host
es_host: 127.0.0.1

# Elasticsearch port
es_port: 9200

# (Optional) basic-auth username and password for Elasticsearch
es_username: elastic
es_password: changeme

# 规则名称
name: Example frequency rule

# 告警规则类型,官方提供了多种告警类型详情参考:
# https://elastalert2.readthedocs.io/en/latest/ruletypes.html#rule-types
type: frequency

# 指定es索引
index: nginx-*

# 超过5次
num_events: 5

# 5分钟内
timeframe:
  minutes: 5

# 过滤规则,详情参考官网地址:
# https://elastalert2.readthedocs.io/en/latest/recipes/writing_filters.html
filter:
- query:
    query_string: 
       query: "message: GET"

# 发送告警的邮箱配置
smtp_host: smtp.163.com
smtp_port: 25
#存放邮箱账号密码的文件,密码为三方登录密码
smtp_auth_file: /home/elk-filebeat-kafka/docker-elk-master/elastalert2/smtp_auth.yaml  
email_reply_to: 182****6991@163.com
from_addr: 182****6991@163.com
alert:
- "email"
email:
- "182****6991@163.com"

4. 开始使用

# 创建elastalert的es索引
elastalert-create-index

# 执行命令
python -m elastalert.elastalert --verbose --rule example_frequency.yaml

我们的例子中的规则是5分钟内索引为nginx-*日志,出现5次以上message包含GET字段就触发告警,
如图为邮件收到的告警信息:
image.png