elastalert部署和使用
一、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部署和使用的更多相关文章
- 监控告警之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环境 安装 ...
- helm部署Filebeat + ELK
helm部署Filebeat + ELK 系统架构图: 1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash 2) 多个Logstash节点并行(负载均衡,不作为集群),对 ...
- kubernetes之收集集群的events,监控集群行为
一.概述 线上部署的k8s已经扛过了双11的洗礼,期间先是通过对网络和监控的优化顺利度过了双11并且表现良好.先简单介绍一下我们kubernetes的使用方式: 物理机系统:Ubuntu-16.04( ...
- Kubernetes 日志:搭建 EFK 日志系统
Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...
- ELK7.11.2版本安装部署及ElastAlert告警相关配置
文档开篇,我还是要说一遍,虽然我在文档内容中也会说好多遍,但是希望大家不要嫌我墨迹: 请多看官方文档,请多看命令行报错信息,请多看日志信息,很多时候它们比百度.比必应.比谷歌有用: 请不要嫌麻烦,打开 ...
- Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警
服务端安装 Elasticsearch和Kibana(需要安装openjdk1.8以上) 安装方法:https://www.elastic.co以Ubuntu为例: wget -qO - https: ...
- elastalert基于微信公众号报警
环境部署 安装其它的必需包 yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel 1,下载. ...
- 基于Elastalert的安全告警剖析
https://www.freebuf.com/sectool/164591.html *本文作者:bigface,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. elastalert 是一 ...
- ElastAlert规则
elastalert 是一款基于elasticsearch的开源告警产品(官方说明文档).相信许多人都会使用ELK做日志收集系统,但是产生一个基于日志的“优秀”的安全告警确是一个难题.告警规则难编写, ...
- ELK基于ElastAlert实现日志的微信报警
文章转载自:https://mp.weixin.qq.com/s/W9b28CFBEmxBPz5bGd1-hw 教程pdf文件下载地址 https://files.cnblogs.com/files/ ...
随机推荐
- JAVA虚拟机-01-JAVA虚拟机家族简介
JAVA虚拟机家族简介 Classic VM JDK1.0发布,第一款商议的JAVA虚拟机.纯解释器方式来执行java代码的的JAVA虚拟机.如果要使用即时编译就需要外挂编译器.如果外挂了编译器,及时 ...
- 一篇文章带你弄懂Kerberos的设计思路
这篇文章将会带大家详细梳理和理解Kerberos的设计思路. Basic 为了减轻服务器的负担,我们需要设计一个专门的认证服务器AS,储存所有用户的口令,认证了用户身份之后再通知应用服务器 引入tic ...
- Portainer功能使用之开启远程访问
配置远程连接Docker服务 1.配置 说明:docker默认没有打开"2375"端口,需要先进行配置开启端口 命令 修改配置:vim /usr/lib/systemd/syste ...
- Consul调用no instances或Consul页面All service checks failing
1.问题体现 Consul中Consumer调用Provider会出现No instances available for XXX 这时打开Consul控制台页面: 可以看到这里出现All servi ...
- 视觉十四讲:第六讲_g2o图优化
g2o是一个基于图优化的库,图优化是把优化问题表现为一种图的方式.一个图由若干个顶点和边组成. 顶点表示优化变量,边表示误差项. g2o的使用步骤: 1.定义顶点和边的类型: 2.构建图: 3.选择优 ...
- .Net Core中使用NEST简单操作Elasticsearch
C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elas ...
- JZOJ 7377.欢乐豆
\(\text{Problem}\) 有一个有向完全图,所有的 \(u\) 到 \(v\) 的边权为 \(a_u\) 修改 \(m\) 此有向边边权,求最终图上两两点对的最短路之和 \(1\le n ...
- python破解zip或者rar压缩文件
转载博客园python大师:https://www.cnblogs.com/daniumiqi/p/12167764.html
- rin和快速迭代
链接:https://ac.nowcoder.com/acm/contest/3002/E rin最近喜欢上了数论. 然而数论实在太复杂了,她只能研究一些简单的问题. 这天,她在研究正整数因子个数的时 ...
- RocketMQ 5.0 vs 4.9.X 图解架构对比
本文作者:李伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云数据库开发工程师. 0 ...