Kibana:创建一个 webhook alert – Elastic Stack 8.2

2022年6月12日   |   by mebius

在今天的练习中,我将展示如何使用最新的 Elastic Stack 8.2 来生成一个 Alert,也就是一个警报。

Kibana 中的警报由规则(rule)定义。 规则确定警报背后的逻辑(条件)、检查条件的时间间隔(schedule)以及检测逻辑返回任何结果数据时要执行的响应操作。规则返回的成功匹配/检测存储为信号或警报(取决于你使用的解决方案)。 分析师可以在其工作流程中处理优先级或分类的警报列表(基于严重性或重要性)。

下图说明了警报背后的核心概念:

%title插图%num

规则定义如下:

  • 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:

特别需要指出的是,你需要按照 Elastic Stack 8.x 的部分来进行安装。如果你是使用 macOS,你可以参考文章 “Elastic Stack 8.0 安装 – 保护你的 Elastic Stack 现在比以往任何时候都简单” 即可。

等我们安装好 Elasticsearch 和 Kibana 后。我们接着导航到 Kibana 的如下界面:

%title插图%num

%title插图%num

当我们点击 Rules and Connectors 时,我们可以看到它需要让我们做一些额外的配置:

%title插图%num

上面显示,我们需要添加如上所示的一个 key。我们在 Kibana 的安装目录打入如下的命令:

./bin/kibana-encryption-keys generate

%title插图%num

我们把上面生成的三个 key 拷贝到 config/kibana.yml 文件中去。再次重新启动 Kibana。然后再导航到刚才的Rules and Connectors 位置:

%title插图%num

现在我们没有看到之前的那个提醒额外安装的步骤。我们可以直接创建 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 下做如下的安装来进行安装。

sudo port install crystal
curl https://sh.rustup.rs -sSf | sh
cargo install bore-cli

然后,我们在两个 terminal 中做如下的运行:

%title插图%num

我们先使用 crystal 来启动 webserver:

crystal webserver.cr

然后再在右边的 terminal 中访问这个 webserver。在左边,我们可以看到相应的输出。

为了能使得我们的 webserver 能被外网所访问,我们可以使用 bore 来实现。尽管在我们的这个练习中并不需要,因为我们所有的运行在本地局域网中完成的。我们在另外一个 terminal 中运行如下的命令:

bore local 8888 --to bore.pub

%title插图%num

在运行完 bore 之后,我们可以看到一个输出的外网地址。我们再在另外一个 terminal 中访问外网的地址。在 webserver 中,我们可以看到另外一个响应。这说明我们的 bore 的运行是成功的。

至此,我们的 webhook 已经安装完毕。

创建 webhook alert

我们接下来创建一个 webhook 的 connector:

%title插图%num

%title插图%num

从上面的界面中,我们可以看出来目前免费的 alert 只有 Index 及 Server log。Webhook alert 是一个收费的功能。我们必须启动试用功能:

%title插图%num

%title插图%num

%title插图%num

%title插图%num

这样我们就启动了白金版的试用功能。我们再次回到之前的界面:

%title插图%num

这次,我们选择 Webhook:

%title插图%num

%title插图%num

%title插图%num

我们再次回到之前的 terminal 中进行查看:

%title插图%num

上面显示我们的测试是成功的。

%title插图%num

我们接下来创建一个 rule:

%title插图%num

在上面的列表中,我们可以看到许多的 rule。在本次的练习中,我们将创建一个 Index threshold rule。根据它的描述:

%title插图%num

也就是说聚合的值满足一个阈值就会发送报警。具体可以详细阅读官方文档。

接下来,我们来创建一个索引:

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 创建界面:

%title插图%num

%title插图%num

当满足条件时,我tgcode们发送如下格式的通知信息:

Threshold is met!

Value: {{context.value}}

Message: {{context.message}}

点击上面的 Save 按钮:

%title插图%num

我们可以看到当前的 rule 的状态是 enabled,而它的上一个 response 是 Pending。然后变为:

%title插图%num

我们接下来回到 Kibana 的 Dev Tools 中打入如下的命令:

PUT webhook/_doc/1?pipeline=add-timestamp
{
  "hits": 6500
}

或者使用如下的命令:

POST webhook/_doc?pipeline=add-timestamp
{
  "hits": 6500
}

过一小会儿,我们再查看 rule 的界面:

%title插图%num

这是因为我们设置的是在过去的10秒钟的时间里,聚合 hits 字段的值超过 5000 就报警。这是在上面的界面中设置的。我们再来查看一下 webserver 的界面:

%title插图%num

我们再接下来发送如下的一个信息:

PUT webhook/_doc/1?pipeline=add-timestamp
{
  "hits": 500
}

这次,我们的 hits 值为 500。我们再看看:

%title插图%num

好了。今天的展示就到这里。我们可以看到从0创建一个 alert。希望对大家有所帮助!

文章来源于互联网:Kibana:创建一个 webhook alert – Elastic Stack 8.2

相关推荐: Elasticsearch:字段太多, 在 Elasticsearch 中防止映射爆炸的 3 种方法

当一个系统具有三样东西时,它就被称为“可观察的”:日志、指标和跟踪。 虽然指标和跟踪具有可预测的数据结构,但日志(尤其是应用程序日志)通常是非结构化数据,需要收集和解析才能真正有用。 因此,控制日志可以说是实现可观察性最难的部分。如果你想了解如何把一个数据进行…

Tags: , , , , , ,