本文转载自微信公众号《程序员李小兵》,作者李小兵。转载本文请联系程序员李小兵公众号。现在互联网的架构随着用户的增多而变得越来越复杂。可能有成千上万个不同的组件和不同的实例。监控这些组件的可用性是提供高可用性服务的关键之一。Elastic推出了Uptime应用程序。Elasticsearch使用Heartbeat进行组件监控。心跳也就是我们通常所说的心跳。通过Heartbeat,我们可以判断一个网络组件当前是否存活,是否可以对外提供服务。Heartbeat是一个轻量级的数据收集器。它用于帮助我们监控正常运行时间的健康状况。它可以通过HTTP、TCP或ICMP定期验证组件是否正在运行,然后将收集到的状态和信息报告给Elasticsearch。Kibana中的Uptime应用为我们提供了一个查看可用性数据的仪表板来监控服务器或服务的正常运行,并提供了对告警功能的支持。Elasticsearch使用Heartbeat监控Uptime的架构可以表述如下:下面依次讲解UptimeApp的安装、Heartbeat的配置以及各个监控组件的配置。安装UptimeApp如果我们打开我们的Kibana并点击Uptime应用程序,当我们第一次打开它时,我们可以看到如下界面。点击InstallHeartbeat,会跳转到配置UptimeMonitors的文档界面。你可以按照这个界面的步骤安装Heartbeat,配置,启动,测试Kibana是否接收到Heartbeat上传的数据。Heartbeat在不同平台上有多种安装方式,如macOS、DEB、RPM、Windows。下面介绍最常用的Docker安装方法。后续的部署和启动步骤类似。读者可根据自己的需要进行练习。需要注意的是安装的Heartbeat必须和Elasticsearch或者Kibana的版本一致,所以这里我们选择heartbeat:7.10.0版本的镜像。dockerpulldocker.elastic.co/beats/heartbeat:7.10.0接下来,我们可以使用如下命令来启动Heartbeat容器。dockerrun-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文件挂载到容器的对应路径,提供配置用于心跳文档。具体配置文件的内容后面会继续讲解,这里先演示整个Uptime的安装过程。启动Heartbeat容器后,可以通过dockerps和dockerexec命令进入对应的容器。dockerpsdockerexec-it5b3785357c26(换成自己的ps命令输出然后通过ls命令可以看到Heartbeat.bash-4.2$lsLICENSE.txtNOTICE.txtREADME.mddatafields.ymlheartbeatheartbeat.reference.ymlheartbeat.ymlkibanalogsmonitors的整体文件结构。d在目录下,有一个配置文件叫heartbeat.yml,通过上面的--volume参数挂载,同时在monitor.d目录下,有一些针对不同monitor配置的配置文件案例你的参考,heartbeat.reference.yaml是最完整的配置示例,接下来我们需要使用如下命令来启动Heartbeat,让它开始采集数据,并将数据上报给配置文件中指定的Elasticsearch。./heartbeatsetup./heartbeat-e查看以上命令的输出日志后,可以再次进入UptimeMonitors界面,点击Checkdata按钮,查看是否收到数据。如果收到数据,您可以单击UptimeApp按钮。进入UptimeApp界面查看详细数据。UptimeApp运行一段时间后的界面如下图所示。我们可以看到界面分为两部分。上半部分是统计区,通过饼图和柱状图展示了当前监控器监控器的状态和过去一段时间监控器的状态。下半部分是具体的监控列表。一共有两个Monitor,分别监控taobao.com和aliyun.com,目前都是Up。配置Heartbeat上面解释了安装Heartbeat和Uptime的整个过程。本节将详细解决Heartbeat的配置,即heartbeat.yml文件的配置。heartbeat.yml文件一般由两部分组成:监控配置heartbeat.monitors,配置监控目标和监控方式;输出配置output.elasticsearch,配置Elasticsearch进行数据上报的地址、用户名和密码。比如上一节我们启动docker时指定的heartbeat.yaml文件如下:heartbeat.monitors:-type:http#使用HTTP进行监控,也可以使用TCP和ICMPschedule:'@every5s'#Catch每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配置文件中,每5s对cn.aliyun.com和www.taobao.com这两个URL进行一次HTTP检查。除了HTTP监视器之外,Heartbeat还可以进行TCP和ICMP类型检查。heartbeat.monitors:-type:icmpschedule:'@every5s'hosts:-http://cn.aliyun.com/-http://www.taobao.com/-type:tcpschedule:'@every5s'hosts:-127.0.0.1:8080此外,还支持定义不同的检查语句,例如使用HTTP监视器,可以检查响应代码(code)、文本(body)和头部(header)。使用TCP监视器,可以定义端口检查和字符串检查。heartbeat.monitors:-type:httpsschedule:'@every5s'urls:-https://cn.aliyun.com/#requestdetails:check.request:method:GETcheck.response:body:"aliyun"如上配置,Heartbeat会使用GET每5s调用一次https://cn.aliyun.com/,在其Response的body中查找字符串aliyun。如果未找到此字符串,则检查失败。其他更详细的配置可以参考heartbeat.reference.yml文件。阿里云ElasticStack实用手册https://developer.aliyun.com/topic/elasticstack/playbook
