一、Elastalert简介

Elastalert是Yelp公司基于python开发的ELK日志告警插件,Elastalert通过查询Elasticsearch中的记录与定于的告警规则进行对比,判断是否满足告警条件。发生匹配时,将为该告警触发一个或多个告警动作。告警规则由Elastalert的rules定义,每个规则定义一个查询。

二、部署elastalert(10.8.240.74)

系统:centos7.5

elastalert:0.2.4

python:3.6.8

1 安装Python3和其他所需软件

yum install -y wget gcc openssl-devel epel-release git python3 python3-devel unzip telnet lrzsz

2 下载elastalert

1. 服务器下载
git clone https://github.com/Yelp/elastalert.git

会得到一个elastalert-master的文件夹。

如果服务器是内网,没有外网权限,可用有外网的服务器将elastalert 用git clone下载,然后传到内网服务器,然后:

--外网服务器下载

pip3 download -r requirements.txt -d /root/offlinePackages/ --trusted-host mirrors.cloud.aliyuncs.com

--将/root/offlinePackages/ 传到内网服务器,执行

cd  elastalert-master 
pip3 install --no-index --find-links=/root/2022-10-25-16-22/offlinePackages/ -r requirements.txt

 

3 安装依赖组件:

1. 进入elastalert-master

cd elastalert-master
pip3 install -r requirements.txt -i http://172.16.143.83:8081/repository/pipy-public/simple --trusted-host 172.16.143.83

这里有个需要注意的是:因为我下载的时候走代理,访问的是官网,而服务器用的是python3.6,所以下载的版本可能会超过python3.6的限制,所以如果发现类似如下报错:

zipp requires Python '>=3.7' but the running Python is 3.6.8

说明版本太新,需要回到requirements.txt文件中,将zipp的版本加上限制,不要让它下载太新的版本。

cat <<EOF>> requirements.txt

zipp==3.6.0

EOF

具体版本可以参考:
Successfully installed

PyJWT-2.4.0

PyStaticConfiguration-0.11.1

PyYAML-6.0

apscheduler-3.9.1

attrs-22.1.0

aws-requests-auth-0.4.3

backports.zoneinfo-0.2.1

blist-1.3.6

boto3-1.23.10

botocore-1.26.10

certifi-2022.9.24

cffi-1.15.1

charset-normalizer-2.0.12

configparser-5.2.0

croniter-1.3.7

dataclasses-0.8

defusedxml-0.7.1

docopt-0.6.2

elastic-transport-8.4.0

elasticsearch-8.4.3

envparse-0.2.0

exotel-0.1.5

idna-3.4

importlib-metadata-4.8.3

importlib-resources-5.4.0

jira-1.0.14

jmespath-0.10.0

jsonschema-4.0.0

mock-4.0.3

oauthlib-3.2.2

pbr-5.11.0

prison-0.2.1

py-zabbix-1.1.3

pycparser-2.21

pyrsistent-0.18.0

pysocks-1.7.1

python-dateutil-2.6.1

pytz-2022.5

pytz-deprecation-shim-0.1.0.post0

requests-2.27.1

requests-oauthlib-1.3.1

requests-toolbelt-0.10.1

s3transfer-0.5.2

six-1.16.0

stomp.py-8.0.1

texttable-1.6.4

twilio-6.0.0

typing-extensions-4.1.1

tzdata-2022.5

tzlocal-4.2

urllib3-1.26.12

zipp-3.6.0

最后安装依赖成功

2. 检查有没有setuptools和elasticsearch
pip3 list |grep setuptools
pip3 list |grep elasticsearch

3. 更换elasticsearch版本(可选)
pip3 list --format=columns |grep elasticsearch
pip3 uninstall elasticsearch
pip3 install "elasticsearch==7.0.0" -i http://172.16.143.83:8081/repository/pipy-public/simple --trusted-host 172.16.143.83

4 安装elastalert

1. 配置代理,不然请求不了需要安装的地址
[root@soFlu-laijx-test2 elastalert]# cat <<EOF >> setup.cfg
[easy_install]
index_url = http://172.16.143.83:8081/repository/pipy-public/simple
EOF

2. 安装
python3 setup.py install

3. 安装成功

安装成功后会有这个lib文件夹

5 修改配置

[root@iZzj5l9imjpzb7Z ~]# egrep -v '#|^$' config.yaml
rules_folder: rules
run_every:
minutes: 1
buffer_time:
minutes: 15
es_host: 10.8.240.73
es_port: 9200
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
alert_time_limit:
days: 2

6 测试创建index,验证elastalert安装是否正常

1. elastalert-create-index --config config.yaml

2. 返回如下说明安装正常

3. 查看elasticsearch的index,能看到刚刚新建的:
curl -XGET http:// 10.8.240.74:9200/_cat/indices |grep elastalert |sort -n

三、部署elasticsearch(具体过程略)(10.8.240.73)

修改系统文件:

vim /etc/sysctl.conf
fs.file-max=655360
vm.max_map_count = 655360
sysctl -p

下载
Useradd es
Su - es
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.2.tar.gz
tar -zxvf elasticsearch-6.8.2.tar.gz

修改配置
[es@iZzj5l9imjpzb7Z ~]$ cat elasticsearch-6.8.2/config/elasticsearch.yml |egrep -v '#|^$'
cluster.name: my-application
node.name: node-1
path.data: /home/es/elasticsearch-6.8.2/data
path.logs: /home/es/elasticsearch-6.8.2/logs
network.host: 0.0.0.0
http.port: 9200

启动
./elasticsearch-6.8.2/bin/elasticsearch –d

四、部署kibana(具体过程略)(10.8.240.73)

启动:
/root/kibana-6.8.23-linux-x86_64/bin/kibana >> /root/kibana-6.8.23-linux-x86_64/kibana.log &

五、部署nginx(具体过程略)(10.8.240.73)

systemctl start nginx

六、部署logstash(具体过程略)(10.8.240.73)

下载,解压安装包

修改配置文件

启动
/usr/local/logstash-6.8.23/bin/logstash -f /usr/local/logstash-6.8.23/config/mynginx.conf >> /usr/local/logstash-6.8.23/logs/mynginx.log 2>&1 &

七、配置告警

前提条件:

Logstash能够采集到nginx日志,并传输到elasticsearch。
通过kibana管理—索引模式—创建索引后,在Discover中检索验证日志是否在elasticsearch。

1. 配置rules/system.yaml
(这里的rules,必须和config.yaml文件中rules_folder: rules字段对应)
mkdir rules/
cat rules/system.yaml (配置一分钟内有10次检索到包含ERROR的内容则告警)

# ---------------- es配置 ----------------------
es_host: 10.8.240.73
es_port: 9200 # es的端口
#es_username: elastic # es的用户名
#es_password: 111qqq # es的密码 # ---------------- # --------------- 报警基础信息配置 ------------------
name: Nginx_404 # 报警邮件的标题
type: frequency # 类型:频率
index: mynginx*,10.8.240.73-mynginx* # 监控的索引,多个使用逗号隔开
num_events: 10 # 时间内触发的次数
timeframe:
minutes: 1 # 时间,和上边的参数关联,1分钟内有1次会报警 # --------------------- # ---------------- 报警过滤条件 -------------------
# For more info: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
- query:
query_string:
query: "message: *404*"
alert_text: "nginx日志异常测试" # 会在报警内容中显示
smtp_host: EXCHANGE.*****.com # smtp的地址
smtp_port: 25 # 端口
smtp_auth_file: /root/elastalert-master/smtp_auth_file.yaml # 用户密码的文件
email_reply_to: 111@*****.com # 发送邮件的邮箱
from_addr: 111@*****.com
alert:
- "email" # 报警类型
email: # 收件人地址
- "laijx@*****.com" # -------------- 重复告警 ---------------
realert:
minutes: 1 # 1分钟内相同告警不会重复发送 #exponential_realert:
# minutes: 10 #指数型增长最大值 # 指数级扩大 realert 时间,中间如果有报警,
# 则按照5->10->20->40->60不断增大报警时间直到最大时间,
# 如果之后报警减少,则会慢慢恢复原始realert时间
# -------------------------------------------- # ------------ 聚合相同告警 ------------------
#aggregation_key: name
#聚合报警的内容,只展示 name 与 message
#summary_table_fields:
# - name
# - _index
# - message
# -------------------------- # ------------------------告警内容格式化
# 注意这些格式化的信息,都是从es中拿过来的 alert_subject: "Error {0}"
alert_subject_args:
- name # 该name 为本代码上面定义的name
- host
alert_text_type: alert_text_only
alert_text: |
Nginx 404 一分钟超过10次! > datetime: {0}
> Host: {1}
> index: {3} > Message: {2}
> log_file: {4}
> num_hits: {5}
> num_matches: {6} alert_text_args:
- "@timestamp"
- host
- message
- _index
- path
- num_hits
- num_matches # alert_text: "system日志异常测试" # 会在报警内容中显示,非格式化内容
# ----------------------

2. 配置smtp_auth_file.yaml邮件密码文件

cat smtp_auth_file.yaml

user: "111@*****.com"
password: '*****.'

3. 启动
Cat <<EOF>> /etc/hosts
172.16.102.90 EXCHANGE.*****.com
EOF

> nohup.out && nohup python3 -m elastalert.elastalert --verbose --config config.yaml &

4. 观察日志
tail nohup.out -f

5. 触发告警
手动请求http://10.8.240.73/ERROR.htm,模拟ERROR。

6. 观察邮件

7. 修改规则自动加载
修改一些告警阈值会自动重载:
num_events: 2 # 时间内触发的次数
timeframe:
minutes: 1 # 时间,和上边的参数关联,1分钟内有1次会报警

但是如果修改了告警规则的name,需要重启,不然会报错:

先到这吧,后续应该还要再熟悉更多规则的配置和告警。

参考链接:

https://github.com/Yelp/elastalert

https://www.jianshu.com/p/e6281cf72e95/

https://www.cnblogs.com/gered/p/15400623.html

elastalert部署和使用的更多相关文章

  1. 监控告警之elastalert部署及配置全解

    一.安装elastalert 1.环境 CentOS:7.4 Python:3.6.9 pip:19.3 elastalert:0.2.1 elk:7.3.2 2.配置Python3.6.9环境 安装 ...

  2. helm部署Filebeat + ELK

    helm部署Filebeat + ELK 系统架构图: 1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash 2) 多个Logstash节点并行(负载均衡,不作为集群),对 ...

  3. kubernetes之收集集群的events,监控集群行为

    一.概述 线上部署的k8s已经扛过了双11的洗礼,期间先是通过对网络和监控的优化顺利度过了双11并且表现良好.先简单介绍一下我们kubernetes的使用方式: 物理机系统:Ubuntu-16.04( ...

  4. Kubernetes 日志:搭建 EFK 日志系统

    Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...

  5. ELK7.11.2版本安装部署及ElastAlert告警相关配置

    文档开篇,我还是要说一遍,虽然我在文档内容中也会说好多遍,但是希望大家不要嫌我墨迹: 请多看官方文档,请多看命令行报错信息,请多看日志信息,很多时候它们比百度.比必应.比谷歌有用: 请不要嫌麻烦,打开 ...

  6. Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警

    服务端安装 Elasticsearch和Kibana(需要安装openjdk1.8以上) 安装方法:https://www.elastic.co以Ubuntu为例: wget -qO - https: ...

  7. elastalert基于微信公众号报警

    环境部署 安装其它的必需包 yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel   1,下载. ...

  8. 基于Elastalert的安全告警剖析

    https://www.freebuf.com/sectool/164591.html *本文作者:bigface,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. elastalert 是一 ...

  9. ElastAlert规则

    elastalert 是一款基于elasticsearch的开源告警产品(官方说明文档).相信许多人都会使用ELK做日志收集系统,但是产生一个基于日志的“优秀”的安全告警确是一个难题.告警规则难编写, ...

  10. ELK基于ElastAlert实现日志的微信报警

    文章转载自:https://mp.weixin.qq.com/s/W9b28CFBEmxBPz5bGd1-hw 教程pdf文件下载地址 https://files.cnblogs.com/files/ ...

随机推荐

  1. JAVA虚拟机21---JAVA内存模型

    1.Amdahl定律和摩尔定律 并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器. Amdahl定律通过系统中并行化与串行化的 ...

  2. 合肥光源储存环束流三维参数测量系统相关PV

    合肥光源纵向震荡数据源相关PV 合肥光源纵向震荡数据源相关PV的增补 在上两文中公布了一些PV,依然有效. 本来发过了,那篇里的PV有些命名的不太好,比如PositionX.PositionY等,感觉 ...

  3. tomcat7 与 tomcat8 加载 jar包的顺序

    本文为博主原创,转载请注明出处: 最近在进行服务的环境升级,将 服务的tomcat7升级到 tomcat8:当把 tomcat 升级到 tomcat8 的时候,进行服务启动异常,报 jar 包冲突的 ...

  4. Median String

    You are given two strings ss and tt, both consisting of exactly kk lowercase Latin letters, ss is le ...

  5. @Transactional千万不要这样用!!踩坑了你都可能发现不了!!!

    前阵子接手了一段同事之前的代码,里面用到了@Transactional注解,了解Spring的小伙伴肯定知道,@Transactional是Spring提供的一种控制事务管理的快捷手段.但是我这段程序 ...

  6. 「Python实用秘技13」Python中临时文件的妙用

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第12 ...

  7. Java项目常用的异常处理

    一.常见异常形式 1.空指针异常(java.lang.nullpointerexception)发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等.还有一种情况是当该对象为空时你并没有 ...

  8. java-tocsv

    1.依赖 <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artif ...

  9. DOM06~

    Window 对象 BOM (浏览器对象模型) 定时器-延时函数 js 执行机制 location 对象 navigator 对象 history 对象 BOM BOM (Browser Object ...

  10. httpRunner使用汇总

    接口测试框架Python:Requests.HttpRunner 文章目录 环境准备 录制接口 生成用例 运行用例 设置变量 提取响应字段 hook机制 用例分层 用例参数化 报告 性能locust ...