ElastAlert是一個簡單的框架,用於從Elasticsearch中的數據中發出異常,尖峰或其他感興趣模式的警報。我們可以在地址https://elastalert.readthedocs.io/en/latest/elastalert.html找到它的使用說明。在今天的教程中,我將一步一步地介紹如何搭配環境,並從Elasticsearch發送通知給Slack。
為了說明問題的方便,我的環境如下:
在我的環境中,我使用iMac電腦運行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。
等修改完我們的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
我們可以參考鏈接https://elastalert.readthedocs.io/en/latest/running_elastalert.html來安裝我們的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的官方網站上,我們可以看到很多的通知類型。詳細地址為https://elastalert.readthedocs.io/en/latest/ruletypes.html
————————————————
版權聲明:本文為CSDN博主「Elastic 中國社區官方博客」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/UbuntuTouch/article/details/103820572