Kibana 方式
Kibana 本身不支持邮件报警,我们可以通过 Elasticsearch 的 Watcher 方法来实现
Watcher 是 Elasticsearch 官方提供的一个插件,可以根据数据的更改提供警报和通知
Watcher 插件安装
在 ElasticSearch 安装目录下执行,
bin/plugin -i elasticsearch/license/latest
bin/plugin -i elasticsearch/watcher/latest
Watcher 插件配置
为了实现报警,我们至少需要设置报警邮件服务器、登陆用户名、密码等信息,
我们打开 config/elasticsearch.yml
,添加如下内容
watcher.input.search.dynamic_indices.time_zone: '+08:00'
watcher.actions.email.service.account:
outlook_account:
profile: outlook
smtp:
auth: true
starttls.enable: true
host: <hostname>
port: <port>
user: <username>
password: <password>
watcher.actions.email.html.sanitization:
allow: _tables
替换 <hostname>
等信息,完成配置
创建报警任务
我们将要按照如下逻辑进行报警
- 每60秒,向当天的 rasp-yyyy.MM.dd 索引发起一次条件为最近60秒创建的报警 的查询请求
- 对查询结果做hits总数大于0的判断,即60秒内是否有新增的报警记录写入ES
- 如果为真,则 admin@domain 邮箱发送一个标题为 Rasp Alarm,内容为 最近10条报警详情 的邮件
为了创建这个报警任务,我们需要执行如下命令,
# curl -XPUT http://127.0.0.1:9200/_watcher/watch/attack_event -d'
{
"trigger": {
"schedule": {
"interval": "60s"
}
},
"input": {
"search": {
"request": {
"indices": [
"<rasp-{now/d}>"
],
"body": {
"query": {
"filtered": {
"filter": {
"range": {
"@timestamp": {
"from": "now-60s"
}
}
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"email_admin": {
"email": {
"to": "admin@domain",
"subject": "Rasp Alarm",
"priority": "high",
"body": {
"html": "<html><body><table><thead><tr><th>攻击时间</th><th> 攻击来源</th></tr></thead><tbody>{{#ctx.payload.hits.hits}}<tr><td>{{_source.attack_time}}</td><td> {{_source.source}}</td></tr>{{/ctx.payload.hits.hits}}</tbody></table></body></html>"
}
}
}
}
}'
原文: https://rasp.baidu.com/doc/setup/alarm/elasticsearch/main.html