Kibana:创建一个 webhook alert – Elastic Stack 8.2
2022年6月12日 | by mebius
在今天的练习中,我将展示如何使用最新的 Elastic Stack 8.2 来生成一个 Alert,也就是一个警报。
Kibana 中的警报由规则(rule)定义。 规则确定警报背后的逻辑(条件)、检查条件的时间间隔(schedule)以及检测逻辑返回任何结果数据时要执行的响应操作。规则返回的成功匹配/检测存储为信号或警报(取决于你使用的解决方案)。 分析师可以在其工作流程中处理优先级或分类的警报列表(基于严重性或重要性)。
下图说明了警报背后的核心概念:
规则定义如下:
- Schedue: 每两分钟
- Data views:hosts*
- Condition: avg(dist_util) > 70%
- Actions:
- 向 SRE (Site Reliability Engineer)团队发送一封电子邮件,其中包含指示主机上的磁盘已使用 70% 的警报。
- 对云提供商运行 API 调用以创建额外的计算实例以添加到环境中。
创建一个 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上安装 Eltgcodeastic 栈中的 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.tgcodecr
require "http/server"
require "colorize"
cyan = Colorize.with.cyan
light_cyan = Colorize.with.light_cyan
color = cyan
server = HTTP::Server.new do |context|
req = context.request
color = color == cyan ? light_cyan : cyan
color.surround(STDOUT) do
req.to_io STDOUT
end
STDOUT.print "nn" if req.body
end
server.listen 8888
这是一个非常简单的 Webserver。我们在 macOS 下做如下的安装来进行安装。
- 在链接The MacPorts Project — Download & Installation依据自己的 macOS 的版本安装相应的 MacPorts
- 然后根据如下的命令来安装 crystal:
sudo port install crystal
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。根据它的描述:
也就是说聚合的值满足一个阈值就会发送报警。具体可以详细阅读官方文档。
接下来,我们来创建一个索引:
PUT webhook
{
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"hits": {
"type": "long"
}
}
}
}
为了方便插入时间戳,我们也创建如下的一个 ingest pipeline:
PUT _ingest/pipeline/add-timestamp
{
"processors": [
{
"set": {
"field": "@timestamp",
"value": "{{_ingest.timestamp}}"
}
}
]
}
我们可以通过如下的方式来写入一个文档:
PUT webhook/_doc/1?pipeline=add-timestamp
{
"hits": 500
}
我们可以通过如下的方式来检查我们些人的文档:
GET webhook/_search?filter_path=**.hits
{
"hits" : {
"hits" : [
{
"_index" : "webhook",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"hits" : 500,
"@timestamp" : "2022-05-07T07:10:17.516110Z"
}
}
]
}
}
我们可以看到有一个时间戳和 hits 字段。
接下来,我们再次回到之前的 rule 创建界面:
当满足条件时,我tgcode们发送如下格式的通知信息:
Threshold is met!
Value: {{context.value}}
Message: {{context.message}}
点击上面的 Save 按钮:
我们可以看到当前的 rule 的状态是 enabled,而它的上一个 response 是 Pending。然后变为:
我们接下来回到 Kibana 的 Dev Tools 中打入如下的命令:
PUT webhook/_doc/1?pipeline=add-timestamp
{
"hits": 6500
}
或者使用如下的命令:
POST webhook/_doc?pipeline=add-timestamp
{
"hits": 6500
}
过一小会儿,我们再查看 rule 的界面:
这是因为我们设置的是在过去的10秒钟的时间里,聚合 hits 字段的值超过 5000 就报警。这是在上面的界面中设置的。我们再来查看一下 webserver 的界面:
我们再接下来发送如下的一个信息:
PUT webhook/_doc/1?pipeline=add-timestamp
{
"hits": 500
}
这次,我们的 hits 值为 500。我们再看看:
好了。今天的展示就到这里。我们可以看到从0创建一个 alert。希望对大家有所帮助!
文章来源于互联网:Kibana:创建一个 webhook alert – Elastic Stack 8.2
相关推荐: Elasticsearch:字段太多, 在 Elasticsearch 中防止映射爆炸的 3 种方法
当一个系统具有三样东西时,它就被称为“可观察的”:日志、指标和跟踪。 虽然指标和跟踪具有可预测的数据结构,但日志(尤其是应用程序日志)通常是非结构化数据,需要收集和解析才能真正有用。 因此,控制日志可以说是实现可观察性最难的部分。如果你想了解如何把一个数据进行…