在今天的练习中,我将展示如何使用最新的 Elastic Stack 8.2 来生成一个 Alert,也就是一个警报。
创建一个 webhook alert - Elastic Stack 8.2
创建一个 webhook alert - Elastic Stack 8.2_哔哩哔哩_bilibili
安装
安装 Elastic Stack
如果你还没有安装好自己的 Elasticsearch 及 Kibana,那么请参考如下的文章来安装好自己的 Elasticsearch 及 Kibana:
- 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch
- Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana
特别需要指出的是,你需要按照 Elastic Stack 8.x 的部分来进行安装。如果你是使用 macOS,你可以参考文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单” 即可。
等我们安装好 Elasticsearch 和 Kibana 后。我们接着导航到 Kibana 的如下界面:
当我们点击 Rules and Connectors 时,我们可以看到它需要让我们做一些额外的配置:
上面显示,我们需要添加如上所示的一个 key。我们在 Kibana 的安装目录打入如下的命令:
./bin/kibana-encryption-keys generate
我们把上面生成的三个 key 拷贝到 config/kibana.yml 文件中去。再次重新启动 Kibana。然后再导航到刚才的 Rules and Connectors 位置:
现在我们没有看到之前的那个提醒额外安装的步骤。我们可以直接创建 rule 了。
安装 webhook
我们首先创建一个比较简单的 Webserver。我们在自己喜欢的目录中,创建如下的一个文件:
webserver.cr
1. require "http/server"
2. require "colorize"
4. cyan = Colorize.with.cyan
5. light_cyan = Colorize.with.light_cyan
6. color = cyan
8. server = HTTP::Server.new do |context|
9. req = context.request
10. color = color == cyan ? light_cyan : cyan
11. color.surround(STDOUT) do
12. req.to_io STDOUT
13. end
14. STDOUT.print "\n\n" if req.body
15. end
17. server.listen 8888
这是一个非常简单的 Webserver。我们在 macOS 下做如下的安装来进行安装。
- 在链接 The MacPorts Project -- Download & Installation 依据自己的 macOS 的版本安装相应的 MacPorts
- 然后根据如下的命令来安装 crystal:
sudo port install crystal
- 按照链接安装 cargo
curl https://sh.rustup.rs -sSf | sh
- 根据链接安装 bore
cargo install bore-cli
然后,我们在两个 terminal 中做如下的运行:
我们先使用 crystal 来启动 webserver:
crystal webserver.cr
然后再在右边的 terminal 中访问这个 webserver。在左边,我们可以看到相应的输出。
为了能使得我们的 webserver 能被外网所访问,我们可以使用 bore 来实现。尽管在我们的这个练习中并不需要,因为我们所有的运行在本地局域网中完成的。我们在另外一个 terminal 中运行如下的命令:
bore local 8888 --to bore.pub
在运行完 bore 之后,我们可以看到一个输出的外网地址。我们再在另外一个 terminal 中访问外网的地址。在 webserver 中,我们可以看到另外一个响应。这说明我们的 bore 的运行是成功的。
至此,我们的 webhook 已经安装完毕。
创建 webhook alert
我们接下来创建一个 webhook 的 connector:
从上面的界面中,我们可以看出来目前免费的 alert 只有 Index 及 Server log。Webhook alert 是一个收费的功能。我们必须启动试用功能:
这样我们就启动了白金版的试用功能。我们再次回到之前的界面:
这次,我们选择 Webhook:
我们再次回到之前的 terminal 中进行查看:
上面显示我们的测试是成功的。
我们接下来创建一个 rule:
在上面的列表中,我们可以看到许多的 rule。在本次的练习中,我们将创建一个 Index threshold rule。根据它的描述:
也就是说聚合的值满足一个阈值就会发送报警。具体可以详细阅读官方文档。
接下来,我们来创建一个索引:
1. PUT webhook
2. {
3. "mappings": {
4. "properties": {
5. "@timestamp": {
6. "type": "date"
7. },
8. "hits": {
9. "type": "long"
10. }
11. }
12. }
13. }
为了方便插入时间戳,我们也创建如下的一个 ingest pipeline:
1. PUT _ingest/pipeline/add-timestamp
2. {
3. "processors": [
4. {
5. "set": {
6. "field": "@timestamp",
7. "value": "{{_ingest.timestamp}}"
8. }
9. }
10. ]
11. }
我们可以通过如下的方式来写入一个文档:
1. PUT webhook/_doc/1?pipeline=add-timestamp
2. {
3. "hits": 500
4. }
我们可以通过如下的方式来检查我们些人的文档:
GET webhook/_search?filter_path=**.hits
1. {
2. "hits" : {
3. "hits" : [
4. {
5. "_index" : "webhook",
6. "_id" : "1",
7. "_score" : 1.0,
8. "_source" : {
9. "hits" : 500,
10. "@timestamp" : "2022-05-07T07:10:17.516110Z"
11. }
12. }
13. ]
14. }
15. }
我们可以看到有一个时间戳和 hits 字段。
接下来,我们再次回到之前的 rule 创建界面:
当满足条件时,我们发送如下格式的通知信息:
1. Threshold is met!
3. Value: {{context.value}}
5. Message: {{context.message}}
点击上面的 Save 按钮:
我们可以看到当前的 rule 的状态是 enabled,而它的上一个 response 是 Pending。然后变为:
我们接下来回到 Kibana 的 Dev Tools 中打入如下的命令:
1. PUT webhook/_doc/1?pipeline=add-timestamp
2. {
3. "hits": 6500
4. }
过一小会儿,我们再查看 rule 的界面:
这是因为我们设置的是在过去的10秒钟的时间里,聚合 hits 字段的值超过 5000 就报警。这是在上面的界面中设置的。我们再来查看一下 webserver 的界面:
我们再接下来发送如下的一个信息:
1. PUT webhook/_doc/1?pipeline=add-timestamp
2. {
3. "hits": 500
4. }
这次,我们的 hits 值为 500。我们再看看:
好了。今天的展示就到这里。我们可以看到从0创建一个 alert。希望对大家有所帮助!