Elastic Beats 是 Elastic Stack 中专门负责收集散落在各地的 Log 及各种资讯的一系列工具,Beats 家族的主要都是基於 libbeat
framework 所开发,而 Heartbeat 是 Elastic Beats 家族的成员之一,是一个轻量化的常驻程序 (daemon),可以安装在远端的某一台机器上,并且定期的去检查指定的服务是否还活着 (availability)。
Heartbeat 支援的监控方法有以下几种:
ping
这个指令所使用的 protocol,可以提供最基本的验证,确认机器是否能正常的回应。status code
、response header
、response body
是不是符合预期。另外针对 TCP
和 HTTP
都有支援 SSL/TLS 的 HTTPS 协定,也能支援 proxy 的设定,最贴心的是,他还能顺便记录 HTTPS 的凭证 (certificate) 的过期时间,我们也就能简单的透过 Alert 的设定,在凭证过期之前发出警告。
以下列出 Heartbeat 可以使用的一些情境,当然能用的范围不只於此,我们也可以依照他的功能特性来创造合符合需求的应用情境。
要安装 Heartbeat,官方网站的快速上手文件 [1],已经非常的清楚简单,我这边就不做细部说明,只大约以 MacOS 环境为例,列出以下的步骤:
curl -L -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-7.14.1-darwin-x86_64.tar.gz
tar xzvf heartbeat-7.14.1-darwin-x86_64.tar.gz
heartbeat.yml
,指定 Elasticsearch 与 Kibana 的位置。output.elasticsearch:
hosts: ["myEShost:9200"]
username: "heartbeat_internal"
password: "YOUR_PASSWORD"
setup.kibana:
host: "mykibanahost:5601"
username: "my_kibana_user"
password: "YOUR_PASSWORD"
heartbeat.yml
里面,或是在 monitors.d
的目录里建立自己订义的 YAML 档,来设定 Monitors 的规则。heartbeat.monitors:
- type: icmp
schedule: '*/5 * * * * * *'
hosts: ["myhost"]
id: my-icmp-service
name: My ICMP Service
- type: tcp
schedule: '@every 5s'
hosts: ["myhost:12345"]
mode: any
id: my-tcp-service
- type: http
schedule: '@every 5s'
urls: ["http://example.net"]
service.name: apm-service-name
id: my-http-service
name: My HTTP Service
注意:如果在 monitors.d 里面建立新的 YAML 档的话,档案里是直接放
heartbeat.monitors
里面的设定值的,也就是heartbeat.monitors
这一层是用宣告,直接从- type: icmp
这一层开始宣告即可,请直接参考解压缩之後,资料夹里面附的范例。
processors
里的地区设定,这个设定可以协助之後在 Kibana 筛选检视的范围。# ============================ Processors ============================
processors:
- add_observer_metadata:
# Optional, but recommended geo settings for the location Heartbeat is running in
geo:
# Token describing this location
name: us-east-1a
# Lat, Lon "
#location: "37.926868, -78.024902"
./heartbeat setup -e
帮我们到 Elasticsearch 建立好 ILM (Index Lifecycle Management) 要使用的 Index Template。sudo chown root heartbeat.yml
sudo ./heartbeat -e
如果你使用 root 的身份执行 heartbeat 时,要记得将 config 的拥有者一并修改成 root。
以下列出一些在 Heartbeat 在使用上的技巧,可以提供大家参考。
tags
Heartbeat 里面可以设定 tags
,并且在 heartbeat.yml
里可以设定 General 的 tags
,而进入到 monitors
里,可以再设定特定 monitor
的 tag
,这些 tags
设定的用途,是在 Kibana 的画面很可以清楚的分类我们所定义的这一些监示排程的工作,并且可以快速的筛选。
而什麽情境来设定这些 tags
,建议可以使用最常会用来分类及筛选进行检示的项目,例如:Service Name、Data Center、Project Name…等。
如果今天要透过 Heartbeat 来监测的是有设置 HTTP Redirect 的网页页面,首先要注意 max_redirects
的设定,预设是 0
,也就是不会去执行 redirect,所以会要 Heartbeat 去跟随 Redirect 回传的指示进一步的存取下一个 Location 的话,要记得将这个设定打开,另外要注意这个设定打开之後,因为记录的过程会变得较复杂,有些资讯会无法保留,这部份请直接参考官方文件 [2]。
另外在这种情境,可以视情况先设定一组专门确认有回传 301
或 302
结果、并且验证 HTTP header 当中的 Location 设定值,另外再建一组是会依照 HTTP redirect 执行到最後页面的结果,这样能够多确认这一步一步的过程是否如预期。
以下是我的一个例子,我会要求先取得 301
的 response status,并且最後我会要拿到的是 404
(虽然你看到 404 好像很怪,但这是我目前需要的情境 :P)。
- type: http # monitor type `http`. Connect via HTTP an optionally verify response
id: onedoggo-web
name: OneDoggo Web
schedule: '@every 5s' # every 5 seconds from start of beat
hosts: ["https://onedoggo.com"]
ipv4: true
ipv6: true
mode: any
supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]
# 记录 Reponse header
response.include_body: on_error
check.response:
status: 301
headers:
- location: https://onedoggo.com/98a4eb9cdd8b40ddb4a452af7577295d
tags: ["onedoggo", "web"]
fields:
env: production
- type: http # monitor type `http`. Connect via HTTP an optionally verify response
id: onedoggo-web
name: OneDoggo Web
schedule: '@every 5s' # every 5 seconds from start of beat
hosts: ["https://onedoggo.com"]
ipv4: true
ipv6: true
mode: any
supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]
response.include_body: always
max_redirects: 5
check.response:
status: 404
tags: ["onedoggo", "web"]
fields:
env: production
Kibana 也很贴心,会将 Redirect 的过程都一步一步的标示出来,让我们知道过程中走过哪些路径。
fields
栏位的资料,一方面在 Kibana 协助搜寻筛选,另外也能延伸自行使用透过 fields
可以存放任何的资料,以下面为例,我们定义了 env
的栏位,里面存了 production
的值,另外也定义了 onedoggo
的栏位,里面是存放一整个物件。
- type: http # monitor type `http`. Connect via HTTP an optionally verify response
id: onedoggo-web
name: OneDoggo Web
schedule: '@every 5s' # every 5 seconds from start of beat
hosts: ["https://onedoggo.com"]
ipv4: true
ipv6: true
mode: any
supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]
# 记录 Reponse header
response.include_body: on_error
check.response:
status: 301
headers:
- location: https://onedoggo.com/98a4eb9cdd8b40ddb4a452af7577295d
tags: ["onedoggo", "web"]
fields:
env: production
onedoggo:
product: homepage
owner: joe
tracking:
user: standard
而这些设定,可以在 Kibana Uptime 的画面协助过滤,另外也可以自行额外延伸使用,例如使用 heartbeat 所收集的资料,另外拉出 dashboard 等检示的图表。
Heartbeat 所收集到的资料,在送出之前,预设是会存放在 Memory queue 当中,我们可以在 heartbeat.yml
中指定 queue 的方式:
queue.disk:
max_size: 10GB
path: /tmp/heartbeat/diskqueue
max_retry_interval: 30s
透过类似以上的配置,可以让 heartbeat 的资料写入到 disk 中,避免 process 中断时,资料直接遗失的风险。
Heartbeat 有支援 Autodiscover 的机制,像是使用 Docker, Kubernetes, AWS ELB,Heartbeat 可以自动帮我们侦测有哪些机器需要被监测,这部份的细节请参考官方文件 - Heartbeat Autodiscovery [3]。
如果使用 ICMP
并且使用 MacOS 的环境,会发生这种 Invalid argument
的错误。
有人已经在 Github 发 Issues ,而官方团队也有回应 [4]:
Unfortunately it's still not our highest priority issue. One workaround would be using the docker image instead of plain heartbeat for now.
所以会需要特别切换成 root
来执行,或是先用 Docker 来绕路喽。
查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!
<<: DAY19 搞样式--CSS Gird 怎麽用(上)?
>>: <Day4>永丰Python API — Shioaji
超音波倒车雷达 教学原文参考:超音波倒车雷达 这篇文章会介绍如何使用超音波感测器和蜂鸣器,搭配「变数...
少林秘笈宝典 基本指令介绍 查看docker目前有哪些images可以使用 docker image...
这次铁人赛的尾声,放个奇妙一点的策略BOP,这个策略只用最近的一根k棒来决定买卖。 它的原理就是使用...
kotlin+mvvm+databinding+recyclerview 上一篇讲了一般kotlin...
实体 所谓实体即为描述我们真实世界的物件,如员工、客户、订单皆属於实体。 在实务上的需求我们可以将实...