Uptime-Elastic Stack 实战手册

Uptime-Elastic Stack 实战手册

· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》

· 加入创作人行列,一起交流碰撞,参与技术圈年度盛事吧

创作人:程序员历小冰
审稿人:朱荣鑫

现在互联网架构随着用户的增加,而越来越复杂,可能要有成千上万个不同的组件和不同的实例,对这些组件可用性的监控是提供高可用服务的关键之一,Elastic 为此推出了 Uptime App。

Elasticsearch 使用 Heartbeat 进行组件的监控。

Heartbeat 也就是我们通常所说的心跳,通过 Hearteat 我们可以判断一个网络组件,当前是否存活,是否可以对外正常提供服务。

Heartbeat 是一个轻量级的数据收集器。它用来帮我们进行 Uptime 的健康监控。它可以定期通过 HTTP、TCP 或 ICMP 等方式验证组件是否处于运行状态,然后将收集到的状态和信息上报给 Elasticsearch。

而 Kibana 中的 Uptime app 则为我们提供了查看可用性数据的仪表板,以监控服务器或服务的正常运行,并提供了报警功能支持。

Elasticsearch 使用 Heartbeat 来进行 Uptime 的监控的架构可以表述如下:

Uptime-Elastic Stack 实战手册

Uptime 监控示意图

下面,我们将依次讲解 Uptime App 的安装,Heartbeat 的配置和各类监控组件的配置。

安装 Uptime App

如果我们打开我们的 Kibana 并点击 Uptime 应用,那么第一次打开的时候,我们可以看到,如下的界面。

Uptime-Elastic Stack 实战手册

点击 Install Heartbeat,就会跳转到配置 Uptime Monitors 的文档界面,你可以按照这个界面上的步骤进行 Heartbeat 的安装,配置,启动和测试 Kibana 是否接收到 Heartbeat 上传的数据。

Uptime-Elastic Stack 实战手册

Heartbeat 在不同平台有多种安装方式,比如说 macOS、DEB、RPM 和 Windows 等,我们这里介绍最为常用的 Docker 安装方式,其后续部署和启动步骤则大同小异,读者可以自行根据需要进行实践。

需要注意的是,安装的 Heartbeat 必须和 Elasticsearch 或 Kibana 版本相同,所以我们这里选取 heartbeat:7.10.0 版本的镜像。

docker pull docker.elastic.co/beats/heartbeat:7.10.0

接着,我们可以使用如下命令启动 Heartbeat 容器。

docker run -d   --name=heartbeat   --user=heartbeat   
--volume="/tmp/heartbeat.docker.yml:/usr/share/heartbeat/heartbeat.yml:ro"   
docker.elastic.co/beats/heartbeat:7.10.0   --strict.perms=false

这里使用了 docker 的 --volume 参数,挂载了宿主机文件系统路径下的 heartbeat.docker.yml 文件到容器的对应路径下,这是在为 Heartbeat 提供配置文件。具体配置文件内容后续继续讲解,我们这里先演示完整个 Uptime 安装流程。

启动 Heartbeat 容器后,通过 docker ps 和 docker exec 命令可以进入到相应的容器内部。

docker ps
docker exec -it 5b3785357c26(要替换为自己ps命令输出的CONTAINER ID) bash

然后,通过 ls 命令,我们可以看到 Heartbeat 的整体文件结构。

bash-4.2$ ls
LICENSE.txt  NOTICE.txt  README.md  data  fields.yml  heartbeat  
heartbeat.reference.yml  heartbeat.yml  kibana  logs  monitors.d

在目录中,有一个叫做 heartbeat.yml 的配置文件,这个文件就是上边通过 --volume 参数挂载进来的。同时在 monitor.d 目录中,有一些不同监控器配置的配置文件案例可供大家参考,heartbeat.reference.yaml 中则是最全的配置案例。

接着,我们要使用如下命令来启动 Heartbeat,让它开始收集数据并向配置文件中指定的 Elasticsearch 中上报数据。

./heartbeat setup
./heartbeat -e

查看上述命令的输出日志没有什么异常后,可以再次来到 Uptime Monitors 界面,点击其 Check data 按钮检查是否接收到了数据,如果接受到了数据,则可以点击 Uptime App 按钮,前往 Uptime App 界面查看详细数据。

Uptime-Elastic Stack 实战手册

运行过一段时间的 Uptime App 界面如下图所示。

Uptime-Elastic Stack 实战手册

我们可以看到界面分为两大部分,上半部分是统计区,通过饼图和柱状图展示了当前监控器 Monitor 的状态和过去一段时间中 Monitor 的状态。而下半部分是具体的 Monitor 列表,一共有两个 Monitors,分别是监听 taobao 网和 aliyun 网站,目前两个都是 Up 状态。

配置 Heartbeat

上边讲解了安装 Heartbeat 和 Uptime 的整体流程,本小节详细解决一下 Heartbeat 的配置,也就是 heartbeat.yml 文件的配置。

heartbeat.yml 文件一般有两部分组成:

  • 监控器配置 heartbeat.monitors,配置要监控的目标和监控的方式;
  • 输出配置 output.elasticsearch,配置数据上报的 Elasticsearch 的地址,用户名和密码。

比如说,上一小节我们启动 docker 时指定的 heartbeat.yaml 文件如下所示:

heartbeat.monitors:
- type: http # 使用http方式监控,还可以使用 TCP 和 ICMP
  schedule: '@every 5s' # 每 5s 抓取一次
  urls: # 需要监控的 url 地址
    - https://cn.aliyun.com/
    - https://www.taobao.com/

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:http://es-cn-n6w24fib900797tgz.public.elasticsearch.aliyuncs.com:9200}'
  username: '${ELASTICSEARCH_USERNAME:111}'
  password: '${ELASTICSEARCH_PASSWORD:111}'

为了使 Heartbeat 知道要检查的服务,它需要一个 URL 列表。

heartbeat.yaml 中的 heartbeat.monitors 中指定了此配置。 如上的 heartbeat.yaml 配置文件,对 cn.aliyun.com 和 www.taobao.com 两个网址每隔 5s 进行一次 HTTP 检查。

除了 HTTP 监视器,Heartbeat 还可以进行 TCP 和 ICMP 类型的检查。

heartbeat.monitors:
- type: icmp
  schedule: '@every 5s'
  hosts:
    - http://cn.aliyun.com/
    - http://www.taobao.com/
- type: tcp
  schedule: '@every 5s'
  hosts:
    - 127.0.0.1:8080

此外,它还支持定义不同的检查语句,例如,使用 HTTP 监视器,可以检查响应代码(code)、正文(body)和标头(header)。 使用 TCP 监视器,能定义端口检查和字符串检查。

heartbeat.monitors:
- type: http
  schedule: '@every 5s'
  urls:
    - https://cn.aliyun.com/
  # request details:
  check.request:
       method: GET
  check.response:
       body: "aliyun"  

如上的配置, Heartbeat 会每 5s 使用 GET 调用一次 https://cn.aliyun.com/ ,并在其 Response 的 Body 中寻找字符串 aliyun。如果没有找到这个字符串,则本次检查未通过。

其他更加详细的配置,你可以参考 heartbeat.reference.yml 文件。

创作人简介:
程序员历小冰,专注于探讨后端生态的点点滴滴,包括微服务、分布式、数据库、性能
调优和各类中间件源码分析。
博客:http://remcarpediem.net/
上一篇:索引生命周期管理-Elastic Stack 实战手册


下一篇:Space-Elastic Stack 实战手册