我们很高兴宣布一个新的警报框架,该框架可作为 Kibana 7.7 版本的一部分,在 SIEM,Uptime,APM 和 Metrics 应用程序中提供一流的警报体验。
警报是整个 Elastic Stack 的基本用例,这就是为什么我们将其纳入 Kibana 的核心体验。 无论你是监视应用程序事务还是跟踪暴力登录尝试,我们的目标都是提供量身定制的体验,使您能够在正常的任务流程中构建强大的警报。 新的警报框架是从头开始构建的,旨在提供不只是便捷的界面。 我们知道,不仅需要通知人,这就是为什么我们还合并了触发预定义动作的功能的原因,该动作可以执行任何操作,从发送电子邮件到在 Slack 和 PagerDuty 等平台上使用全新的第三方集成。
在今天的文章中,我们将介绍如何使用 Elastic 7.7 发布所提供的新的警报界面来创建一个警报。
谈到 Alerts,很多开发者可能会联想到 Watchers。这两种方式都是为满足一定的条件的事件发送通知,但是两种有不同之处。首先,Watchers 是在 Elasticsearch 中运行的,而 Alerts 是在 Kibana 中运行的。目前 Watcher 在某种程度上提供了更为强大的功能,比如如它的 query 可以是任何形式的 DSL 查询,而 Alerts 则会有一些限制。根据目前的趋势来说,未来 Alerts 将全面代替 Watchers。在实现上:
- 一个 Watcher 的创建有五个过程:trigger,input,condition,transfor 及 actions
- 一个 Alert 是由三个部分组成的: schedule,trigger 及 action
- actions 依赖于 Connectors
安装
首先,我们必须需要安装最新的 Elastic Stack 7.7 发布版的软件来进行安装。
Elasticsearch 安装
请参阅我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 在自己的电脑上安装最新的 Elasticsearch 7.7 发布版。为了能够使得发送警报,我们必须在 config/elasticsearch.yml 中添加如下的配置:
xpack.security.authc.api_key.enabled: true
Kibana 安装
请参阅我之前的文章 “如何在 Linux,MacOS 及 Windows 上安装Elastic栈中的 Kibana” 在自己的电脑上进行安装最新的 Kibana 7.7 发布版。
Mertricbeat 安装
我们启动安装好的 Kibana,并进入页面:
点击 Add metric data:
点击 System metrics:
根据我们的不同的平台分别进行安装 Metricbeat。
等我们安装好 Metricbeat 后,我们可以在 Kibana 的 Discover 看到导入的 Metricbeat 的数据:
设置阈值警报
警报使您可以根据数据更改采取措施。 它是基于以下原则设计的:如果您可以在 Elasticsearch 中查询某些内容,则可以对其发出警报。 只需定义查询,条件,时间表,要采取的措施,然后警报将完成其余工作。定制触发器将自动化工作流程付诸实践。
在今天的练习中,我们将利用 Metricbeat 的数据来进行侦测。如果我们电脑的内存使用超过80%,那么我们将发送一个警报。在 Metricbeat 中,有一个叫做 system.memory.used.pct 的字段。它表示已用内存的百分比。
我们可以有两种途径来创建警报,针对我们的 Metricbeat:
方法一:直接在 Metrics 应用中创建:
当我们第一次创建 alert 时,我们会看到如下的画面:
它显示我们需要为 xpack.encryptedSavedObjects.encryptionKey 设置一个值。点击上面的 Learn how:上面显示我们需要在 kibana.yml 中设置xpack.encryptedSavedObjects.encryptionKey。点击 Learn how 链接,我们可以了解更多关于这个 encryptionKey 的用法。我们参照链接中的介绍,把这个值设为 ‘fhjskloppd678ehkdfdlliverpoolfcr’,并重新启动 Kibana:
xpack.encryptedSavedObjects.encryptionKey: 'fhjskloppd678ehkdfdlliverpoolfcr'
我们也可以使用另外一种方法来生这个字符串:
./bin/kibana-encryption-keys generate
上面的命令将会生产类似如下的值:
xpack.encryptedSavedObjects.encryptionKey: e5f830cbcd95ba22ea66208ab4762b07
xpack.reporting.encryptionKey: 1cda1e5de20caa940612f5d8e64adf27
xpack.security.encryptionKey: b2646de0c08932077387511b9f0500a5
方法二:是直接从 Alerts and Actions 中来创建:
无论从那种方法来创建,它们的界面都是一样的。在7.7 的发布版中,我们可以在 Metrics, SIEM, Uptime 及 APM 中创建警报。
创建一个 Log 类型的警报
我们点击上面的 Create alert 按钮 或菜单:
在上面,我们选择每分钟检查一次,并且每一分钟通知一次。我们选择 Metric threshold:
从上面可以看出来,目前免费的警报通知只有两个选择:Index 及 Server log。我们选择 Server log
点击上面的 Create a connector:
我们提供任何一个喜欢的 Connector 名字。在上面我选择了 Log。这个 Log connector 可以为以后其它的 Server log 所使用。 点击 Save 按钮:
在上面,我们可以点击在 message 右边的那个小图标查看我们可以在 message 输入框中可以使用的一些变量。点击 Save 按钮:
这样我们警报就设置好了。我们可以点击 Edit 进行编辑,或点击右边的三个点来进行删除。或 mute 的动作。
这个时候,我们可以查看一下 Kibana 运行的 console,不出意外,我们可以看到如下的输出:
它说明,我们的警报设置是成功的。
创建一个 Index 类型的警报
我们接着创建一个 Index 类型的警报。这次,我们不是在 Metricbeat 应用中创建的,我们可以在 Management 中开始。
和上面的大部分步骤是一样的,只是我们在 Action 中需要选择 Index:
数据将写入到 my_index 索引。 点击 Save 按钮
请注意上面的数据结构是一个 JSON 的对象。这个一定要注意。我们输入一下的内容:
{
"actual": "{{context.valueOf.condition0}}",
"threshold": 0.8
}
关于 context.metricOf.condition0,我们可以参阅之前的 Server Log 里介绍的那样。点击 Save 按钮:
我们可以查看 my_index :
GET my_index/_search
我们可以看到事件都被写入到 my_index 索引中了。