Observability: 使用Elasticsearch,Kibana,Heartbeat 监控网站并使用 Slack 发出警报

news/2024/5/14 2:09:18/文章来源:https://elasticstack.blog.csdn.net/article/details/106315917

在之前的文章 “使用Heartbeat进行Uptime监控” 中,我介绍了使用 Uptime 来监控一个网站的运行情况。在之后的很多文章中我也介绍了如何使用 Elastic Alerts 来发送一个警报。如果你想了解更多,请参阅文章“Elastic: 创建一个 Elastic 邮件警报 - 7.7 发行版”。在今天的教程中,我将会把这两个用例串起来。使用 Elastic Stack 所提供的 Heartbeat 来监控一个网站的运行。当网站宕机的时候,它将自动发送一个警报到 Slack。

 

安装

Elasticsearch

我们可参考我之前的文章 “如何在Linux,MacOS及Windows上进行安装Elasticsearch” 来安装我们的 Elasticsearch。我们可以不需要修改任何的配置文件,并在本机上运行。

Kibana

我们可以参考我之前的文章 “如何在Linux,MacOS及Windows上安装Elastic栈中的Kibana” 来进行我们的安装。

为了能够实现对网站的的监控,我们必须使用 Start a 30-day trial 授权以便对 Slack 发送通知:

 

例子网站

我们可以找到任何一个我们喜欢的网站进行监视。为了方便,我们使用一个最为简单的 nodejs 的网站:

git clone https://github.com/liu-xiao-guo/samplenodejs

我们使用上面的命令进行下载,并使用如下的命令进行运行:

cd samplenodejs
npm install
npm start

如果顺利的话,我们可以在浏览器中输入地址 localhost:3000 地址:

如果我们能够看到上面的输出,则表明我们的 nodejs 的网站已经成功地运行起来。接下来,我们将使用 Heartbeat 来监视这个网站的运行情况。

创建 Slack 账号

我们首先需要创建一个自己的 Slack 账号,并具有自己的管理员权限:

你可以参考链接 “Configuring Slack Account”来配置自己的Slack账号,并生成一个相应的一个Webhook URL。这个URL将会在Elasticsearch里进行使用。

在上面我们可以搜索 webhook:

点击上面的 Add:

点击 Add to Slack:

选择一个喜欢的 channel:

点击 Add Incoming Webhooks integration:

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

Heartbeat

运行我们的 Elasticsearch 及 Kibana。打开 Kibana 界面:

点击上面的 Configure Heartbeat 链接:

根据自己电脑的平台,我们选择相应的指令来进行安装 Heartbeat 并进行相应的配置。如果你想了解更多,请参阅我之前的文章“使用Heartbeat进行Uptime监控”。

根据我的情况,我选择 MacOS 来进行:

curl -L -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-7.7.0-darwin-x86_64.tar.gz
tar xzvf heartbeat-7.7.0-darwin-x86_64.tar.gz
cd heartbeat-7.7.0-darwin-x86_64/

在 heartbeat 的目录中我们可以看到如下的文件:

$ pwd
/Users/liuxg/elastic7/heartbeat-7.7.0-darwin-x86_64
liuxg:heartbeat-7.7.0-darwin-x86_64 liuxg$ ls
LICENSE.txt             fields.yml              heartbeat.yml
NOTICE.txt              heartbeat               kibana
README.md               heartbeat.reference.yml monitors.d

在上面,我们可以看到 heartbeat.yml 文件。这个是我们的配置文件。我们接着需要对 Heartbeat 进行相应的配置:

output.elasticsearch:hosts: ["<es_url>"]username: "elastic"password: "<password>"
setup.kibana:host: "<kibana_url>"

在上面,我们对 Elasticsearch 及 Kibana 进行配置。我们把 Elasticsearch 及 Kibana 的地址写入到 heartbeat.yml 的配置文件中。如果你配置了安全,你需要把 usename 及 password 进行输入。

我们首先看到如下的部分:

heartbeat.config.monitors:# Directory + glob pattern to search for configuration filespath: ${path.config}/monitors.d/*.yml# If enabled, heartbeat will periodically check the config.monitors path for changesreload.enabled: false# How often to check for changesreload.period: 5s

在上面,我们可以看到 path: ${path.config}/monitors.d/*.yml,它意味着在 heartbeat 安装的目录下的 monitors.d 文件目录下的所有yml 文件将作为配置文件进行网站或服务的监控。
我们把如下的部分:

heartbeat.monitors:
- type: http# List or urls to queryurls: ["http://localhost:9200"]# Configure task scheduleschedule: '@every 10s'# Total test connection and data exchange timeout#timeout: 16s

进行注释,因为我们想把监控的而部分移到 monitors.d 子目录下进行。这样这个部分变为:

heartbeat.monitors:
#- type: http# List or urls to query#urls: ["http://localhost:9200"]# Configure task schedule#schedule: '@every 10s'# Total test connection and data exchange timeout#timeout: 16s

我们保存好 heartbeat.yml 文件。然后,我们进入 monitors.d 文件目录:

$ cd monitors.d/
liuxg:monitors.d liuxg$ pwd
/Users/liuxg/elastic7/heartbeat-7.7.0-darwin-x86_64/monitors.d
liuxg:monitors.d liuxg$ ls
sample.http.yml.disabled sample.icmp.yml.disabled sample.tcp.yml.disabled

我们看见上面的几个例子的 yml 文件都是被 disabled。我们把上面的 sample.http.disabled 文件复制为 uptime.http.yml 文件:

cp sample.http.yml.disabled uptime.http.yml

我们然后使用我们喜欢的编辑器来对这个文件进行编辑:

uptime.http.yml

# These files contain a list of monitor configurations identical
# to the heartbeat.monitors section in heartbeat.yml
# The .example extension on this file must be removed for it to
# be loaded.- type: http # monitor type `http`. Connect via HTTP an optionally verify response# Monitor name used for job name and document type#name: http# Enable/Disable monitor#enabled: true# Configure task scheduleschedule: '@every 10s' # every 5 seconds from start of beat# Configure URLs to pinghosts: ["http://localhost:3000"]# Configure IP protocol types to ping on if hostnames are configured.# Ping all resolvable IPs if `mode` is `all`, or only one IP if `mode` is `any`.ipv4: trueipv6: truemode: any# Optional HTTP proxy url.#proxy_url: ''# Total test connection and data exchange timeout#timeout: 16s# Optional Authentication Credentials#username: ''#password: ''# TLS/SSL connection settings for use with HTTPS endpoint. If not configured# system defaults will be used.#ssl:# Certificate Authorities#certificate_authorities: ['']# Required TLS protocols#supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]# Request settings:#check.request:# Configure HTTP method to use. Only 'HEAD', 'GET' and 'POST' methods are allowed.method: "GET"# Dictionary of additional HTTP headers to send:#headers:# Optional request body content#body:# Expected response settingscheck.response:# Expected status code. If not configured or set to 0 any status code not# being 404 is accepted.status: 200# Required response headers.#headers:# Required response contents.#body:# Parses the body as JSON, then checks against the given condition expression#json:#- description: Explanation of what the check does#  condition:#    equals:#      myField: expectedValue# The tags of the monitors are included in their own field with each# transaction published. Tags make it easy to group servers by different# logical properties.#tags: ["service-X", "web-tier"]# Optional fields that you can specify to add additional information to the# monitor output. Fields can be scalar values, arrays, dictionaries, or any nested# combination of these.#fields:#  env: staging# If this option is set to true, the custom fields are stored as top-level# fields in the output document instead of being grouped under a fields# sub-dictionary. Default is false.#fields_under_root: false

在上面,我们使用 HTTP GET 来检查返回的 response 代码是否为 200 作为一个判断标准。如果是 200,则表示网站运行正常。我们可以通过如下的 curl 指令来获得这个 response 代码:

$ curl -I localhost:3000
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 170
ETag: W/"aa-z+ebXSEdArbZ+EXlN/WQjf6HV8c"
Date: Sun, 24 May 2020 12:33:55 GMT
Connection: keep-alive

我们可以使用如下的指令来检查我们的配置是否成功:

./heartbeat test config -e

接下来按照 Kibana 中的命令,我需要在 heartbeat 安装目录下执行如下的命令:

./heartbeat setup
./heartbeat -e
$ ./heartbeat setup
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.Index setup finished.

我们接下来运行 heartbeat:

./heartbeat -e

我们打开 Kibana:

上面显示我们的网站 localhost:3000 的运行情况。目前显示是正常运行的。没有任何的错。在 samplenodjs 的 console 中我们可以看到如下的输出:

在这个时候如果我们停止运行 samplenodejs 应用,那么我可以看到:

显然在上面显示了网站的运行情况。网站目前是 Down 的状态,表明我们的网站已经挂了。在接下来的练习中,我们将使用 Elastic 7.7 版本中所提供的功能来进行警报通知。为了下面的测试,我们重新运行起来我们的 nodejs 网站。

 

发送 Slack 警报

在这节里,我们将介绍如何使用 Elastic 提供的警报功能发送一个警报。打开 Kibaba:

点击 Create alert:

点击 Slack:

点击 Create a connector:

点击上面的 Save 按钮:

点击上面的 Save 按钮:

这样我们就创建了我们的 Uptime Alert。我们可以到 Alerts and Actions 里进行查看:

上面显示我们的 nodejs_monitor 已经被创建好了。接下来,我们开始来做测试。我们把 samplenodejs 应用关掉。然后,我们也在 Kibanan 中的 Uptime 中可以看到:

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

它显示我们的 Uptime 应用已经发送网站挂掉的消息。这说明我们的警报是成功的。我们稍等一会,我们会看到更多的信息:

这是因为在过去15分钟内有5次及以上的 Down 信息,它就会一直发送这个通知信息。如果这个时候,我们再把 nodejs 的应用运行起来。我们待会就看不到这个通知信息了。

上面我们展示了使用 heartbeat 监视一个网站的运行,如果我们想监视更多的网站的运行,那么我们可以修改 uptime.http.yml 文件:

如上所示,上面的 hosts 是一个数值。我们可以添加更多的网站地址到这个数组中,从而使得我们的监控可以多达数个网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_751269.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Observability:网站 User Experience 监控

用户体验&#xff08;User Experience&#xff09;提供了一种量化和分析 Web 应用程序感知性能的方法。 与测试环境不同&#xff0c;用户体验数据反映了真实的用户体验。 通过按 URL&#xff0c;操作系统&#xff0c;浏览器和位置查看数据来进一步细化 - 所有这些都会影响你的应…

Enterprise:如何通过搜索提高网站参与度

你网站上的搜索体验通常是访问者满意度的关键驱动因素。 即使在设计良好、组织良好的网站上&#xff0c;访问者也经常通过搜索来找到他们需要的确切产品、服务、内容和信息。 事实上&#xff0c;许多访问者会立即进入搜索框。 他们返回的搜索结果的质量&#xff0c;以及他们可以…

Elasticsearch:使用 Elasticsearch 提高网站搜索查询的相关性

当你希望向用户提供满足其要求的相关数据时&#xff0c;相关性至关重要。这是任何企业的关键功能。吸引受众的一个好的营销策略是通过向他们提供他们正在搜索的内容来满足客户的需求。 糟糕的搜索可能会导致你平台上的流量明显减少。这是因为用户已经接受过培训&#xff0c;可…

高度定制的WSS网站-DCC文档管理系统

1个月前我提及过新的Share Point Portal2003定制开发项目&#xff0c;现在项目基本上七七八八了&#xff0e;该有的都有了&#xff0c;主要的功能如下&#xff1a; 1&#xff0e;控制到目录层级而不是文档库层次&#xff0c;并且基于群组进行授权管理&#xff1b; 2&#xff0e…

大型互联网网站架构心得[转]

我们知道&#xff0c;对于一个大型网站来说&#xff0c;可伸缩性是非常重要的&#xff0c;怎么样在纵向和横向有良好的可伸缩性&#xff0c;就需要在做架构设计的时候考虑到一个分的原则&#xff0c;我想在多个方面说一下怎么分&#xff1a;首先是横向的分&#xff1a;1. 大的网…

机器学习(七)-基于KNN分类的约会网站配对改进算法

基于KNN分类的约会网站配对改进算法1 项目介绍2 准备数据:从文本文件中解析数据3 分析数据:使用 Matplotlib 创建散点图4 准备数据:归一化数值4 实施 kNN 算法5 测试算法:作为完整程序验证分类器6 使用算法:构建完整可用的预测系统完整代码1 项目介绍 某APP用户一直使用在线约…

推荐一个类似于国内知乎国外网站-Quora

好像是在知乎上随意浏览时中看到Quora这个社区的&#xff0c;模糊的记得知主当时给的评价是Quora上有很多大咖&#xff0c;职业遍布各个领域&#xff0c;对一些问题的看法比较新颖&#xff0c;还可以这么说&#xff0c;足不出户就可以感受到贴切的英语环境。抱着好奇的心里就登…

分享45个海量免费电子书下载网站

随着网络和信息技术的快速发展&#xff0c;电子书越来越流行。以Amazon Kindle为代表的电子书阅读器的出现改变了人们传统的阅读方式&#xff0c;如同iPod改变人们听音乐一样。如今&#xff0c;很多网上书店也推出了电子书商品&#xff0c;相比传统的纸质书&#xff0c;电子书便…

使用Trie树实现网站对用户输入的敏感词打码

使用Trie树实现网站对用户输入的敏感词打码 什么是Trie树&#xff1f; Trie树&#xff0c;又称单词查找树&#xff0c;Trie树&#xff0c;是一种树形结构&#xff0c;是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&…

从HTML到XHTML--使用Web标准建设网站 《转》

转自http://ysearchblog.cn/2006/08/htmlxhtmlweb_1.html 从HTML到XHTML--使用Web标准建设网站(一) 作者&#xff1a;张克军 用户体验部 小编按&#xff1a;最近看到搜索日志上有不少朋友对雅虎的网页设计模式感兴趣&#xff0c;我们的设计师张克军也不禁手痒&#xff0c;和大家…

Three.js_环境的搭建_搭建本地官方网站

Three.js – JavaScript 3D Library 去官网下载 Three.js引擎的包 下载 VSCode 代码编辑器 Download Visual Studio Code - Mac, Linux, Windows 安装好后导入 下载好的 three.js 的引擎包 安装本地官网 VSCode里右键"在集成终端中打开" 输入 指令 npm install …

QuickWAP 2005让WAP网站拥有更好的兼容性

QuickWAP 2005让WAP网站拥有更好的兼容性 很多利用WML或ASPWML编写的WAP程序是必须利用手机或手机模拟器去浏览的&#xff0c;即使有些站点做了适配&#xff0c;也不过是利用调转指令将用户引导到其它网页而已。另一种兼容性的方法如双模网站&#xff0c;即一套站点同时做WAP和…

简体中文化的 Slax-ChineseOptimized

上次说到安装Slax后不直接支持中文&#xff0c;也有几个Linux喜爱者&#xff02;辩驳&#xff02;了下&#xff0c;说我没有去细致的研究&#xff0c;确实&#xff0c;像我这样在MS平台上用的比较多的一下子也没有那么多时间去研究&#xff0c;所以只有先直接拿来用了 Slax-Chi…

ASP.NET MVC3书店--第十节 为网站导航与局部设计做最后的修改(转)

http://blog.sina.com.cn/s/blog_6ad539a90100rc4n.html现在我们已经完成了这个网站中的主要功能。但我们还需要为整个网站的导航&#xff0c;首页与书籍列表页面做一点最终的修改。 10.1 创建购物摘要分部视图 首先&#xff0c;我们想要在整个网站中显示用户购物车中的书籍…

11个超炫的视差滚动网站欣赏

目前这种视差滚动效果被越来越多的国内外网站所应用&#xff0c;成为网页设计的热点趋势。 通过一个很长的网页页面&#xff0c;其中利用一些令人惊叹的插图 和图形&#xff0c;并使用视差滚动&#xff08;Parallax Scrolling&#xff09;效果&#xff0c;让多层背景以不同的速…

Avast!:小型网站最易遭受的3种黑客攻击

avast是捷克研发的杀毒软件&#xff0c;从网站上找到一篇avast关于网站安全的文章&#xff0c;觉得颇有意思&#xff0c;因此想到翻译过来与大家共享。有不对之处还望大家批评指正。 一个拥有上万访问者的小型网站管理员发来一份信&#xff0c;向我描述了他的遭遇&#xff0c;我…

Photoshop 爱好者应该收藏的42个网站

Photoshop 是 Adobe 公司旗下最为出名的图像处理软件之一&#xff0c;集图像扫描、编辑修改、图像制作、广告创意&#xff0c;图像输入与输出于一体的图形图像处理软件。今天&#xff0c;本文与大家分享42个非常有用的 Photoshop 设计教程和素材资源网站&#xff0c;希望能帮助…

DNN快速入门教程3 - 如何创建DotNetNuke网站

这个入门系列已经停了很长时间了&#xff0c;没有完成的原因是我有太多的东西想写但是自己又没有一个明确的主线。经过最近blog&#xff0c;和QQ群的反馈我突然意识到&#xff0c;这个入门系列就是要帮助大家从零开始完成一个自己的DNN5网站&#xff0c;不需要太过深入&#xf…

(转)SharePoint 2010的网站主题

从SharePoint 2003开始&#xff0c;主题就作为一种自定义SharePoint外观的重要选项。SharePoint 2003和2007中的包括一系列开箱即用的主题&#xff0c;可以被网站所有者通过SharePoint UI应用到SharePoint网站。网页设计师和开发人员可以创建包含自定义图片及CSS文件的自定义主…

自己动手搞定支付宝手机Wap网站支付接口 FOR ECShop

支付宝WAP网站版本的支付接口网上整合的比较少&#xff0c;看到很多网站在卖&#xff0c;顿觉无语。 主要是得自己查看支付宝官方提供的SDK中的开发文档。 支付宝sdk下载地址&#xff1a;https://doc.open.alipay.com/doc2/detail?treeId60&articleId103564&docType1 …