07 - Metrics - 观察系统的健康指标 (1/6) - Metrics 与 Metricbeat 的基本介绍

Metrics - 观察系统的健康指标 系列文章


本篇学习重点

  • 什麽是 Metrics
  • Metricbeat 的运作架构与设计概念简介
  • 怎麽安装及设定 Metricbeat 来收集 Metrics 资料

什麽是 Metrics

Metric 的中文是『指标』,在维基百科的定义为『a measure of some property of a piece of software or its specifications』[1],也就是一个对於软件其中某些属性的量测方法,这边的属性可以像是作业系统的 CPU、Memory、Disk I/O、资料库的连线数…等。

一般使用 Metrics 所关注的这些资讯,也就是我们用来观察系统健康指标的重要依据,与先前介绍的 Uptime 相比,Uptime 强调的是『生死』,也就是系统是不是活着的,而 Metrics 强调的是『各种表达系统状态的指标数字』,让我们知道系统运作的情况,如果以人的健康来比喻,就好比人的体温、心率、血压、血糖、体重…等,这些资讯可以让我们知道人体的身体健康状态,能协助我们判断是否要做出一些生活作息的调整、去看医生、吃药…等安排。

收集并监控系统的 Metrics 已经是系统稳定度监控 (Monitoring) 行之有年、也常重要、做法也非常成熟的一件事了, 而 Metrics 也是这系列文章的主轴 - Observability 的三本柱 (Metrics, Traces, Logs) 之一,我们接下来将介绍,如何在 Elastic 的解决方案中,收集 Metrics。

Metricbeat 的介绍

Elastic 针对 Metrics 的收集,主要是使用 Elastic Beats 家族里的 Metricbeat,如同先前介绍过的 Heartbeat 一样,Metricbeat 也是基於 libbeat 所开发,并且是一个很轻量的常驻程序,可以安装在某台主机上,持续的收集这台主机本身的系统指标、或是运作在这台主机上指定服务的指标资讯,也能从这台主机透过网路收集另台远端主机上指定的某个服务的指标资讯,并且将这些资讯送到指定的地点,例如 Elasticsearch 或是 Logstash,最终能透过 Kibana 的 Dashboard,从单一入口,来观看这些散落在各地的 Metrics 资料。

07-metricbeat-system-dashboard

Metricbeat 的运作架构

Metricbeat 本身定义了基本的资料收集、处理、送出的逻辑,而收集的方法,因为每种系统或服务的接口都不一样、或是要收集的资讯也不同,因此这部份是用模组化 (Modulized) 的设定架构,针对各种不同的服务开发出各种 module,并且在 module 里面实作对应的处理。

Metricbeat module 本身能收集到的资讯,也必然是该服务有对外揭露的资讯,以下图 Redis module 为例,Redis module 有提供一个 info 的 Metricset,而这个 info 的 Metricset 就是透过 Redis 的 INFO 指令取得资讯,另外像是 MySQL module 所提供的 status 的 Metrics 则是使用 SHOW GLOBAL STATUS 的 SQL 语法取得的资讯。

07-metricsbeat-module-overview

图片来源:官方文件 - How Metricbeat works [2]

Metricbeat 的设计原理

这边列出几个 Metricbeat 的重点原理,透过了解 Metricbeat 的运作设计,让我们知道该如何使用 Metricbeat,减少错误的期待。

  • Metricbeat 除了收集指定系统或服务的 Metric 之外,如果收集的过程发生错误,Metricbeat 会发送 error event,让我们在之後分析时能知道有发生拿不到 Metrics 的资讯。
  • Metricbeat 不支援汇总 (aggregation),每一个时间点收集到的 event 都是独立一笔,不支援把多笔 event 的结果进行加总、总计等,有这些需求都需要等资料到 Elasticsearch 之後再进行处理。
  • Metricbeat 相较於一般的收集 Metrics 的工具比,他记录不只是数字的资料,在不同的 module 里,甚至会包含文字的内容,所以每个 module 里所定义的 Metricset 在 Elasticsearch 也都会有对应的 Mapping 定义,以优化资料在 Elasticsearch 里储存及搜寻的效能。
  • Metricbeat 会在将资料传送到 Elasticsearch 时,将多笔的 events 存在同一笔 document 之中来传送,以减少资料传输的 overhead,并且在 Elasticsearch 里面使用 array 或是 nested object 的方式来存取这些资料,如果我们会需要将资料的格式存成像是 Metrics2.0 这种标准格式的话,要注意到这些资料在 Elasticsearch 是被合并储存的,当然我们也可以另外透过 Logstash 等方式,将这些 raw event 拆开储存。

Metricbeat 的使用方式

要使用 Metricbeat 之前,要先另外准备好 Elasticsearch 和 Kibana,接着再进行 Metricbeat 的安装,以下是使用最简单的安装步骤来做介绍,其实与官方的 Quick start 的文件差不多,先大约知道将 Metricbeat 运作起来的流程为何,我将会以 MacOS 为例。

  1. 下载,并解压缩 Metricbeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.14.2-darwin-x86_64.tar.gz
tar xzvf metricbeat-7.14.2-darwin-x86_64.tar.gz
  1. 在解压缩目录下的 metricbeat.yml 指定 Elasticsearch 的位置
output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "metricbeat_internal"
  password: "YOUR_PASSWORD" 
  1. 同样在 metricbeats.yml 里,也指定 Kibana 的位置,这是接下来要汇入 Dashboard 所使用的。
setup.kibana:
  host: "mykibanahost:5601" 
  username: "my_kibana_user"  
  password: "{pwd}"
  1. 启动要安装的模组
./metricbeat modules enable {module_name}

Metricbeat 提供了非常多内建的模组 (modules),像是 ApacheHTTPNginxMySQLPostgreSQLRedisMongoDBHAProxyZookeeper...等,详细可以查看 官方文件 Metricbeat Modules [3]。

另外针对启动的模组,通常都会要调整这些模组的 config 档,档案的路径就在 ./modules.d/ 里面,档名就会是 module 的名字,副档名为 .yml

  1. 安装 Metricbeat 内建的 Kibana Dashboard,以及 Elasticsearch 的 Index Template。
./metricbeat setup -e
  1. 启动 Metricbeat
./metricbeat -d

若是要以 root 执行,要记得把 config 的拥有者也改成 root

sudo chown root metricbeat.yml 
sudo chown root modules.d/system.yml 
sudo ./metricbeat -e

接下来就可以到 Kibana 查看 Metricbeat 所发送的资料,有没有成功的进入到 Elasticsearch了。

参考资料

  1. Wikipedia - Metric
  2. 官方文件 - How Metricbeat works
  3. 官方文件 - Metricbeat Modules

查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!


<<:  2021-Day17. Serverless(五):建立 GCP 帐号 (Google Cloud Platform)

>>:  Day09 | Dart 非同步 - Future

[Day26] 建立购物车系统 - 9

本篇同步发文在个人Blog: 一袋.NET要扛几楼?打造容器化的ASP.NET Core网站!系列文...

演算法 Fizz Buzz

##让我们来学习演算法吧,此为阅读[https://pjchender.blogspot.com/2...

那些被忽略但很好用的 Web API / ResizeObserver

你的改变,我看得见! 今天要介绍的是 ResizeObserver,它和昨天的 MutationO...

Day37 ( 电子元件 ) 超音波倒车雷达

超音波倒车雷达 教学原文参考:超音波倒车雷达 这篇文章会介绍如何使用超音波感测器和蜂鸣器,搭配「变数...

Flutter基础介绍与实作-Day26 旅游笔记的实作(7)

到昨天为止我们终於把美食的部分都做完了,再来要做的是美景的部分,其实做法跟前面的都差不多,我这边就会...