一、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虚拟机-01-JAVA虚拟机家族简介

    JAVA虚拟机家族简介 Classic VM JDK1.0发布,第一款商议的JAVA虚拟机.纯解释器方式来执行java代码的的JAVA虚拟机.如果要使用即时编译就需要外挂编译器.如果外挂了编译器,及时 ...

  2. 一篇文章带你弄懂Kerberos的设计思路

    这篇文章将会带大家详细梳理和理解Kerberos的设计思路. Basic 为了减轻服务器的负担,我们需要设计一个专门的认证服务器AS,储存所有用户的口令,认证了用户身份之后再通知应用服务器 引入tic ...

  3. Portainer功能使用之开启远程访问

    配置远程连接Docker服务 1.配置 说明:docker默认没有打开"2375"端口,需要先进行配置开启端口 命令 修改配置:vim /usr/lib/systemd/syste ...

  4. Consul调用no instances或Consul页面All service checks failing

    1.问题体现 Consul中Consumer调用Provider会出现No instances available for XXX 这时打开Consul控制台页面: 可以看到这里出现All servi ...

  5. 视觉十四讲:第六讲_g2o图优化

    g2o是一个基于图优化的库,图优化是把优化问题表现为一种图的方式.一个图由若干个顶点和边组成. 顶点表示优化变量,边表示误差项. g2o的使用步骤: 1.定义顶点和边的类型: 2.构建图: 3.选择优 ...

  6. .Net Core中使用NEST简单操作Elasticsearch

    C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elas ...

  7. JZOJ 7377.欢乐豆

    \(\text{Problem}\) 有一个有向完全图,所有的 \(u\) 到 \(v\) 的边权为 \(a_u\) 修改 \(m\) 此有向边边权,求最终图上两两点对的最短路之和 \(1\le n ...

  8. python破解zip或者rar压缩文件

    转载博客园python大师:https://www.cnblogs.com/daniumiqi/p/12167764.html

  9. rin和快速迭代

    链接:https://ac.nowcoder.com/acm/contest/3002/E rin最近喜欢上了数论. 然而数论实在太复杂了,她只能研究一些简单的问题. 这天,她在研究正整数因子个数的时 ...

  10. RocketMQ 5.0 vs 4.9.X 图解架构对比

    本文作者:李伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云数据库开发工程师. 0 ...