Kibana 方式

Kibana 本身不支持邮件报警,我们可以通过 Elasticsearch 的 Watcher 方法来实现

Watcher 是 Elasticsearch 官方提供的一个插件,可以根据数据的更改提供警报和通知

Watcher 插件安装

在 ElasticSearch 安装目录下执行,

  1. bin/plugin -i elasticsearch/license/latest
  2. bin/plugin -i elasticsearch/watcher/latest

Watcher 插件配置

为了实现报警,我们至少需要设置报警邮件服务器、登陆用户名、密码等信息,

我们打开 config/elasticsearch.yml,添加如下内容

  1. watcher.input.search.dynamic_indices.time_zone: '+08:00'
  2. watcher.actions.email.service.account:
  3. outlook_account:
  4. profile: outlook
  5. smtp:
  6. auth: true
  7. starttls.enable: true
  8. host: <hostname>
  9. port: <port>
  10. user: <username>
  11. password: <password>
  12. watcher.actions.email.html.sanitization:
  13. allow: _tables

替换 <hostname> 等信息,完成配置

创建报警任务

我们将要按照如下逻辑进行报警

  • 每60秒,向当天的 rasp-yyyy.MM.dd 索引发起一次条件为最近60秒创建的报警 的查询请求
  • 对查询结果做hits总数大于0的判断,即60秒内是否有新增的报警记录写入ES
  • 如果为真,则 admin@domain 邮箱发送一个标题为 Rasp Alarm,内容为 最近10条报警详情 的邮件

为了创建这个报警任务,我们需要执行如下命令,

  1. # curl -XPUT http://127.0.0.1:9200/_watcher/watch/attack_event -d'
  2. {
  3. "trigger": {
  4. "schedule": {
  5. "interval": "60s"
  6. }
  7. },
  8. "input": {
  9. "search": {
  10. "request": {
  11. "indices": [
  12. "<rasp-{now/d}>"
  13. ],
  14. "body": {
  15. "query": {
  16. "filtered": {
  17. "filter": {
  18. "range": {
  19. "@timestamp": {
  20. "from": "now-60s"
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
  29. },
  30. "condition": {
  31. "compare": {
  32. "ctx.payload.hits.total": {
  33. "gt": 0
  34. }
  35. }
  36. },
  37. "actions": {
  38. "email_admin": {
  39. "email": {
  40. "to": "admin@domain",
  41. "subject": "Rasp Alarm",
  42. "priority": "high",
  43. "body": {
  44. "html": "<html><body><table><thead><tr><th>攻击时间</th><th>&nbsp;攻击来源</th></tr></thead><tbody>{{#ctx.payload.hits.hits}}<tr><td>{{_source.attack_time}}</td><td>&nbsp;{{_source.source}}</td></tr>{{/ctx.payload.hits.hits}}</tbody></table></body></html>"
  45. }
  46. }
  47. }
  48. }
  49. }'

原文: https://rasp.baidu.com/doc/setup/alarm/elasticsearch/main.html