用于高CPU使用率的弹性搜索中的观察者

时间:2017-05-17 16:25:22

标签: elasticsearch metricbeat elasticsearch-x-pack

我想设置观察者发送邮件,如果在最后X分钟内使用CPU超过N%。

第一次弹性搜索每分钟通过metricbeat从远程服务器获取数据。然后我想通过使用该数据通知管理员关闭远程服务器上的高CPU使用率。

我设置邮件,如果内存使用率很高,我完成了部分,但问题是CPU使用率,是4核处理器。我不写aggs功能和条件。我尝试使用github中的代码,但我无法更改函数以使用metricbeat。

1 个答案:

答案 0 :(得分:1)

这对我有用。只要主机在一分钟内通知5次点击(> 95%CPU),它就会发送邮件:

{
  "trigger": {
    "schedule": {
      "interval": "1m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "metricbeat-*"
        ],
        "types": [],
        "body": {
          "query": {
            "bool": {
              "filter": [
                {
                  "range": {
                    "@timestamp": {
                      "gte": "now-{{ctx.metadata.window_period}}"
                    }
                  }
                },
                {
                  "range": {
                    "system.process.cpu.total.pct": {
                      "gte": "{{ctx.metadata.threshold}}"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "gte": 5
      }
    }
  },
  "actions": {
    "email_me": {
      "throttle_period_in_millis": 300000,
      "email": {
        "profile": "standard",
        "attachments": {
          "datalles.json": {
            "data": {
              "format": "json"
            }
          }
        },
        "from": "xxxx@gmail.com",
        "to": [
          "yyyy@gmail.com"
        ],
        "subject": " CPU overhead",
        "body": {
          "html": "The following hosts are running over {{ctx.metadata.threshold}}% CPU: <br><br>{{#ctx.payload.hits.hits}} <b>{{_source.beat.hostname}}</b> ({{_source.system.process.cpu.total.pct}}%) <br> {{/ctx.payload.hits.hits}}"
        }
      }
    }
  },
  "metadata": {
    "window_period": "1m",
    "threshold": 0.95
  }
}