一 前言
ELK安装部署此文不多赘述,可以查看:
linux系统的安全日志为/var/log/secure,记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录。
登陆成功日志样例:
Nov 7 00:57:50 localhost sshd[22514]: Accepted password for root from 192.168.28.1 port 18415 ssh2
Nov 7 00:57:50 localhost sshd[22514]: pam_unix(sshd:session): session opened for user root by (uid=0)
登陆失败日志样例:
Nov 7 00:59:12 localhost sshd[22602]: Failed password for root from 192.168.28.1 port 18443 ssh2
Nov 7 00:59:14 localhost sshd[22602]: error: Received disconnect from 192.168.28.1 port 18443:0: [preauth]```
二 实战
正则不错:
grok正则:
.*sshd\[\d+\]: %{WORD:status} .* %{USER:username} from.*%{IP:clientip}.*
日志样例:
Mar 1 15:01:26 flexcc-1531 sshd[21794]: Failed password for root from 10.69.10.156 port 60122 ssh2
# 过滤后
{
"clientip": "10.69.10.156",
"status": "Failed",
"username": "root"
}
# 完整的logstash配置文件
input {
file {
path => "/var/log/secure"
}
}
filter {
grok {
match => { "message" => ".*sshd\[\d+\]: %{WORD:status} .* %{USER:username} from.*%{IP:clientip}.*"
}
}
}
output { if ([status] == "Accepted" or [status] == "Failed") {
elasticsearch {
hosts => ["http://192.168.28.151:9200"] # ES 地址
index => "secure-%{+YYYY.MM.dd}" # 索引名字
user => "elastic" # ES接入用户
password => "elastic" # ES接入密码
}
stdout {
codec => rubydebug
}
}
}
# alertmanager 配置文件详解 -- 暂时没心情搞 alertmanager 报警(貌似用ESalert更加方便一些 )
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.org' #用于邮件通知的P发件人
route: #每个输入警报进入根路由
receiver: 'team-X-mails' #根路由不得包含任何匹配项,因为它是所有警报的入口点
group_by: ['alertname', 'cluster'] #将传入警报分组的标签。例如,将有个针对cluster = A和alertname = LatencyHigh的警报进入批处理成一个组
group_wait: 30s #当传入的警报创建了一组新的警报时,请至少等待多少秒发送初始通知
group_interval: 5m #发送第一个通知时,请等待多少分钟发送一批已开始为该组触发的新警报
repeat_interval: 3h #如果警报已成功发送,请等待多少小时以重新发送警报
routes: #子路由,父路由的所有属性都会被子路由继承
- match_re: #此路由在警报标签上执行正则表达式匹配,以捕获与服务列表相关的警报
service: ^(foo1|foo2|baz)$
receiver: team-X-mails
routes: #服务有严重警报,任何警报子路径不匹配,即通过父路由配置直接发送给收件人
- match:
severity: critical
receiver: team-X-pager
routes: #此路由处理来自数据库服务的所有警报
- match:
severity: critical
receiver: team-Y-pager
- match:
service: database
receiver: team-DB-pager #还可以按受影响的数据库对警报进行分组
group_by: [alertname, cluster, database]
routes:
- match:
owner: team-X
receiver: team-X-pager
#如果另一个警报正在触发,则禁止规则允许将一组警报静音,如果同一警报已经严重,我们将使用此选项禁用任何警告级别的通知
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
#如果警报名称相同,则应用抑制,如果源警报和目标警报中均缺少“equal”中列出的所有标签名称,则将应用禁止规则!
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'team-X+alerts@example.org, team-Y+alerts@example.org'
- name: 'team-X-pager'
email_configs:
- to: 'team-X+alerts-critical@example.org'
pagerduty_configs:
- routing_key: <team-X-key>
es日志告警插件 python3开发- ElastAlert :
推荐阅读1:ELK基于ElastAlert实现日志的微信报警 - 哈喽哈喽111111 - 博客园
# 启动命令样例
python -m elastalert.elastalert --verbose --config /app/elastalert/config.yaml --rule /app/elastalert/example_rules/sms-applog.yaml
规则阅读2:ElastAlert配置和告警规则各种用法 - 哈喽哈喽111111 - 博客园
Prometheus告警插件 - alertmanager : Alertmanager 安装与使用 - 肖祥 - 博客园

https://blog.csdn.net/yuezhilangniao/article/details/112691680
2697

被折叠的 条评论
为什么被折叠?



