Elastalert告警插件实现日志告警

安装elastalert插件
elastalert插件直接每隔xxx时间去es检索一遍,触发条件,就会通过告警媒介来发送告警通知,此处介绍邮件形式(也可dingding,但是需要单独装钉钉的插件)

系统: Ubtun20.04.6

环境: python3.8

需求:

elk收集的日志,对nginx日志进行监控告警

实现思路:

nginx日志状态码告警这个需求可以通过找一台机器,安装并配置elastalert插件 每过xxx时间去指定的es服务器拉取匹配的索引信息来 判断状态码的值, 不符合条件就触发告警媒介(如邮件,钉钉)来发送告警。这种不需要过多复杂判断的需求,直接通过中间件本身即可实现。
———————————————————————————————————————————————————

环境准备

python虚拟环境执行:

1.安装

pip3 install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.创建

virtualenv /opt/logs-env

3.启动

cd /opt/logs-env
source ./bin/activate

注意: (看到主机前面有(logs-env) 代表现在是在虚拟环境下进行的了)
deactivate --关闭退出虚拟环境

———————————————————————————————————————————————————

安装Elastalert

1.下载包

cd /opt/ && wget https://github.com/Yelp/elastalert/archive/refs/heads/master.zip
unzip elastalert-master.zip

2.更新pip

python3 -m pip install --upgrade pip

3.设置pip永久全局国内源

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

4.安装elastalert

cd /opt/elastalert-master
pip3 install setuptools-rust
python3 setup.py install

注: 如果中途出现安装模块慢或者网络超时的情况,根据提示的插件或模块名使用pip3 install xxxx来手动安装下。最终出现Finished processing dependencies for elastalert==0.2.4即为安装完成。

5.修改elastalert配置文件

cd /opt/elastalert-master 
cp config.yaml.example config.yaml

修改完成后配置内容:

#告警规则目录(相对elastalert目录,事先创建好jkyy目录)
rules_folder: example_rules/jkyy

#ElastAlert多久向ES发送一次请求来根据规则文件去查一次(可为seconds,minutes,hours,days,weeks)
run_every:
  minutes: 1

#当查询开始一直到结束,最大的缓存时间(默认15)
buffer_time:
  minutes: 15

#es节点地址,端口(如果es配置了登录认证需要把用户密码也写上)
es_host: 192.168.3.233
es_port: 9200
es_username: xxxxx
es_password: xxxxx

#ElastAlert插件用来存储告警信息操作来创建的索引名
writeback_index: elastalert_status
writeback_alias: elastalert_alerts

#如果告警发送失败,则会在下面时间范围内尝试重新发送
alert_time_limit:
  days: 2

向es创建索引elastalert-create-index

6.告警规则文件配置

关于nginx状态码告警

vim /opt/elastalert-master/example_rules/jkyy/nginx_code.yaml

例如: nginx状态码大于等于400时,发送告警,告警内容为指定内容。(不指定alert_text内容默认为发送全部字段)

es_host: 192.168.3.233
es_port: 9200
es_username: xxxxxx
es_password: xxxxxx
name: test elk rules
type: frequency
index: nginx-logs-*
num_events: 1
timeframe:
  seconds: 5
realert:
  minutes: 0
filter:
- query_string:
      query: "response_code: >=404" #kibana上能查询出来,直接放在这里就行,具体其他写法可以参考官网。
#邮箱配置
smtp_host: smtp.163.com
smtp_port: 465
smtp_ssl: True
smtp_auth_file: /opt/smtp_auth_file.yaml
email_reply_to: x@163.com
from_addr: x@163.com
alert:
- "email"
email:
- "x@163.com"
alert_subject: "nginx 日志告警 500-509"
alert_text: "
客户端IP: {}\n
状 态 码: {}\n
"
alert_text_type: alert_text_only
alert_text_args:
- client_ip
- response_code
#- client_ip,response_code为logstash处理后切分出来的key,可在kibana查询日志的时候看到。

7.邮件账户文件配置

#邮箱用户名
user: xxx@163.com
##不是邮箱密码,是设置的SMTP密码
password: xxxx

8.写入一条测试数据

10.10.11.1 - - [19/Apr/2023:16:33:12 +0800] "GET / HTTP/1.1" 409 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 - 0.001  192.168.1.132:8005 900 0.000

9.启动配置

调试模式启动:

elastalert --config /opt/elastalert-master/config.yaml --rule nginx_code.yaml --verbose

后台启动:

elastalert --config /opt/elastalert-master/config.yaml --rule /opt/elastalert-master/example_rules/jkyy/nginx_code.yaml &

9.收到告警


有时可能中间件本身处理不了复杂的逻辑判断来实现需求,就需要我们自己用在远程写服务或者脚本来实现了,这时就可以elastalert告警规则文件中使用http post方式来把符合条件的日志信息发送到远程的脚本/服务中去处理,在脚本中来实现逻辑判断,邮件发送告警。

例:
vim /opt/elastalert-master/example_rules/jkyy/frequency.yaml

es_host: 192.168.1.201
es_port: 9200
es_username: log_elasticalert
es_password: xxxx

name: JKYY-API-PROJECT logs monitor
type: frequency
index: filebeat-*
num_events: 1
timeframe:
   seconds: 5
realert:
 minutes: 0
filter:
- query:
   query_string:
           query: "message: \"API-PROJECT\""
alert: post
http_post_url: "http://127.0.0.1:9099/biz_alert"
http_post_headers:
   type: API-PROJECT

直接日志发送给远程服务/脚本来处理 ,http_post_headers可以写一个请求头,服务端也会根据这个header来更好区分来源
————————————————————————————————————————————————
其他方案: Lostash端处理:
将从kafka或者Filebeat中拿到的日志去做格式化处理的时候,过滤阶段该怎么处理怎么处理,或者不做处理都行,只需要在输出阶段写入到es(常规流程)后,判断一下message中是否含有xxx字符,如果有就直接发送到远端API接口去处理,以下是配置:

output {
    elasticsearch {
        hosts => ["http://xxxxx:9200","http://xxxxx:9200","http://xxxxx:9200"]
        index => "nginx-logs-%{+YYYY.MM.dd}"
        document_type => "%{[@metadata][type]}"
        user => "logstash_server"
        password => "xxxxx"
    }
# stdout { codec => rubydebug }
    if [message] =~ /API-QPS/ {  
        http {
          http_method => "post"
          url => "http://xxxx:9099/biz_alert"
          #format => "message"
          message => '%{message}'
          headers => ["type", "API-QPS"]
          retry_failed => true
          automatic_retries => 2
        } 
    }
    if [message] =~ /API-PROJECT/ {
        http {
          http_method => "post"
          url => "http://xxxx:9099/biz_alert"
          #format => "message"
          message => '%{message}'
          headers => ["type", "API-PROJECT"]
          retry_failed => true
          automatic_retries => 2
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容