• Kibana 方式
    • Watcher 插件安装
    • Watcher 插件配置
    • 创建报警任务

    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