Elastic:使用 ElastAlert 发送 Slack 通知

90 篇文章 73 订阅

ElastAlert 是一个简单的框架,用于从 Elasticsearch 中的数据中发出异常,尖峰或其他感兴趣模式的警报。我们可以在地址 ElastAlert - Easy & Flexible Alerting With Elasticsearch — ElastAlert 0.0.1 documentation 找到它的使用说明。在今天的教程中,我将一步一步地介绍如何搭配环境,并从 Elasticsearch 发送通知给 Slack。

为了说明问题的方便,我的环境如下:

在我的环境中,我使用 Mac 电脑运行 Elasticsearch 及 Kibana,而在另外一个虚拟机上运行我们的 Filebeat。Filebeat 把 Ubuntu 机器里的 syslog 传入到 Elasticsearch 中供分析,同时 ElastAlert 周期性地从 Elasticsearch 中获取数据,并依据制定的规则来发送通知。

准备工作

创建 Slack 账号

我们首先需要创建一个自己的 Slack 账号,并具有自己的管理员权限。你可以参考链接 “Configuring Slack Account” 来配置自己的 Slack 账号,并生成一个相应的一个 Webhook URL。这个 URL 将会在 Elasticsearch 里进行使用。

我们先把上面创建的 webhook url 记下来供下面的配置使用。

安装 Elasticsearch

我们可以按照 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 介绍的那样安装好我们的 Elasticsearch。不过由于我们需要使 Elasticsearch 被另外一个虚拟机所见,在这里我们需要对 Elasticsearch 进行配置。首先使用一个编辑器打开在 config 目录下的 elasticsearch.yml 配置文件。我们需要修改 network.host 的 IP 地址。在你的 Mac 及 Linux 机器上,我们可以使用:

$ ifconfig

来查看到我们的机器的 IP 地址。针对我的情况,我的机器的 IP 地址是:10.211.55.2。

我们也必须在 elasticsearch.yml 的最后加上 discovery.type: single-node,表明我们是单个 node。

等修改完我们的 IP 地址后,我们保存 elasticsearch.yml 文件。然后重新运行我们的 elasticsearch。我们可以在一个浏览器中输入刚才输入的IP地址并加上端口号9200。这样可以查看一下我们的 elasticsearch 是否已经正常运行了。

安装 Kibana

我们可以按照 “如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana” 中介绍的那样来安装我们的 Kibana。由于我们的 Elasticsearch 的 IP 地址已经改变,所以我们必须修改我们的 Kibana 的配置文件。我们使用自己喜欢的编辑器打开在 config 目录下的 kibana.yml 文件,并找到 server.host。把它的值修改为自己的电脑的 IP 地址。针对我的情况是:

同时找到elasticsearch.hosts,并把自己的IP地址输入进去:

保存我们的 kibana.yml 文件,并运行我们的 Kibana。同时在浏览器的地址中输入自己的 IP 地址及 5601 端口:

如果配置成功的话,我们就可以看到上面的画面。

安装 Ubuntu 虚拟机

这个不在我的这个教程之内。在网上我们可以找到许多的教程教我们如何安装 Ubuntu 虚拟机。

安装 Filebeat

我们想在 Ubuntu 机器上安装我们的 filebeat 来手机 system log 信息。我们首先打开我们的 Kibana。点击左上角的 Kibana 图标:

点击 “Add log data” 按钮:

然后点击 “System logs

由于 Ubuntu 是 debian 系统,我们选择 DEB。安装上面的步骤一步一步地进行安装。在配置 filebeat.yml 时,我们需要把我们的 IP 地址输入到相应的地方:

output.elasticsearch:
  hosts: ["http://10.211.55.2:9200"]
  username: "elastic"
  password: "123456"
setup.kibana:
  host: "10.211.55.2:5601"

上面是我的配置情况。你可以根据自己的实际的 IP 地址进行配置。当我们成功地启动 filebeat 服务后,我们可以通过如下的命令来检查我们的服务是否已经成功运行:

sudo systemctl status filebeat

安装 ElastAlert

我们可以参考链接 Running ElastAlert for the First Time — ElastAlert 0.0.1 documentation 来安装我们的 ElastAlert。在这里我们使用 python3 来运行 ElastAlert。首先我们需要在 Ubuntu 上安装 python3

我们安装如下的步骤进行安装:

1) 下载 elastalert 源码:

git clone https://github.com/Yelp/elastalert.git

2)安装模块:

我们进入到上面下载项目的根目录中,并打入如下的命令:

sudo pip3 install "setuptools>=11.3"
sudo python3 setup.py install
sudo pip3 install -U PyYAML

根据 Elasticsearch 的版本,你可能需要手动安装正确版本的 elasticsearch-py。

Elasticsearch 5.0+:

sudo pip3 install "elasticsearch>=5.0.0"

Elasticsearch 2.X:

sudo pip3 install "elasticsearch<3.0.0"

这样我们的安装工作就完成了。

配置 ElastAlert

配置文件

我们可以在 ElastAlert 源码文件的根目录下找到一个叫做 config.yaml.example 的文件:

我们可以把这个文件修改为 config.yaml 文件:

mv config.yaml.example config.yaml

我们使用我们喜欢的编辑器打开这个文件,并修改这个文件:

我们可以根据自己的 IP 地址来进行修改。如果我们对 Elasticsearch 做了安全设置,我们同时也需要填写用户名及密码:

做完上面的修改后,我们保存 config.yaml 文件。

配置 Elasticsearch

ElastAlert 将有关其查询和警报的信息和元数据保存回 Elasticsearch。 这对于审核和调试很有用,它使 ElastAlert 可以重新启动并完全从中断处恢复。 ElastAlert 不需要运行,但强烈建议使用。

首先,我们需要通过运行 elastalert-create-index 并按照说明为 ElastAlert 创建要写入的索引。我们进入到 ElastAlert 的源码根目录,并打入如下的命令:

elastalert-create-index

创建 rule

每个规则都定义要执行的查询,触发匹配的参数以及每个匹配要触发的警报列表。 我们将使用 example_rules/example_frequency.yaml 作为模板。我们删除其中一些不需要的项目,最终的文件是这样的:

example_frequency.yaml

# Alert when the rate of events exceeds a threshold

# Elasticsearch host
es_host: 10.211.55.2

# Elasticsearch port
es_port: 9200

# (OptionaL) Connect with SSL to Elasticsearch
#use_ssl: True

# (Optional) basic-auth username and password for Elasticsearch
es_username: "elastic"
es_password: "123456"

# (Required)
# Rule name, must be unique
name: Slack demo

# (Required)
# Type of alert.
# the frequency rule type alerts when num_events events occur with timeframe time
type: frequency

# (Required)
# Index to search, wildcard supported
index: filebeat-*

# (Required, frequency specific)
# Alert when this many documents matching the query occur within a timeframe
num_events: 3

# (Required, frequency specific)
# num_events must occur within this amount of time to trigger an alert
timeframe:
  hours: 1

# (Required)
# A list of Elasticsearch filters used for find events
# These filters are joined with AND and nested in a filtered query
# For more info: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
- term:
    process.name: "JUSTME"

# (Required)
# The alert is use when a match is found
alert:
- "slack"

# (required, email specific)
# a list of email addresses to send alerts to
slack:
slack_webhook_url: Your_Webhook_Url
slack_username_override: "liuxg"

在上面请修改 es_host 为自己的 IP 地址,同时也需要把自己的 webhook url 写入到 slack_webhook_url 中去。在上面我们使用 index 为 filebeat-* 作为查询的索引,同时我们使用一个 filter。它检查 process.name 是否为 JUSTME 字符串。如果是,并且在1个小时(timeframe)里出现3次(num_events),那么将触发通知。

测试 rule

运行 elastalert-test-rule 工具将测试你的配置文件是否成功加载并在过去的24小时内以调试模式运行它:

elastalert-test-rule example_rules/example_frequency.yaml

运行 ElastAlert

我们使用 Python 来直接运行 Elastalert:

python3 -m elastalert.elastalert --verbose --rule example_frequency.yaml 

这样我们的 Elastalert 已经被成功运行起来了。我们在这个时候可以打开我们的 Kibana 来监视 filebeat-* 索引,如果在一个小时内有三次 process.name 信息有 JUSTME 字样,那么我们就会在我们的 Slack 里收到一个通知。

我们在 Ubuntu 中打开另外的一个 terminal,并输入如下的命令:

sudo logger -t JUSTME this is message 1
sudo logger -t JUSTME this is message 2
sudo logger -t JUSTME this is message 3

那么我们可以打开 Kibana 查看这些消息:

那么这个时候,在我们的 Slack 中,我们可以看到如下的消息:

我们收到了我们所需要的通知信息。我们也可以把通知写入到我们的邮件中去。这个由你们自己来实践了。在 Elastalert 的官方网站上,我们可以看到很多的通知类型。详细地址为Rule Types and Configuration Options — ElastAlert 0.0.1 documentation

如果你想了解如何向邮件发送一个通知的话,请阅读我的另外一篇文章 “Elastic:使用 ElastAlert 发送邮件通知”。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值