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。
Elastic 针对 Metrics 的收集,主要是使用 Elastic Beats 家族里的 Metricbeat,如同先前介绍过的 Heartbeat 一样,Metricbeat 也是基於 libbeat
所开发,并且是一个很轻量的常驻程序,可以安装在某台主机上,持续的收集这台主机本身的系统指标、或是运作在这台主机上指定服务的指标资讯,也能从这台主机透过网路收集另台远端主机上指定的某个服务的指标资讯,并且将这些资讯送到指定的地点,例如 Elasticsearch 或是 Logstash,最终能透过 Kibana 的 Dashboard,从单一入口,来观看这些散落在各地的 Metrics 资料。
Metricbeat 本身定义了基本的资料收集、处理、送出的逻辑,而收集的方法,因为每种系统或服务的接口都不一样、或是要收集的资讯也不同,因此这部份是用模组化 (Modulized) 的设定架构,针对各种不同的服务开发出各种 module,并且在 module 里面实作对应的处理。
Metricbeat module 本身能收集到的资讯,也必然是该服务有对外揭露的资讯,以下图 Redis module 为例,Redis module 有提供一个 info
的 Metricset,而这个 info
的 Metricset 就是透过 Redis 的 INFO
指令取得资讯,另外像是 MySQL module 所提供的 status
的 Metrics 则是使用 SHOW GLOBAL STATUS
的 SQL 语法取得的资讯。
图片来源:官方文件 - How Metricbeat works [2]
这边列出几个 Metricbeat 的重点原理,透过了解 Metricbeat 的运作设计,让我们知道该如何使用 Metricbeat,减少错误的期待。
array
或是 nested object
的方式来存取这些资料,如果我们会需要将资料的格式存成像是 Metrics2.0 这种标准格式的话,要注意到这些资料在 Elasticsearch 是被合并储存的,当然我们也可以另外透过 Logstash 等方式,将这些 raw event 拆开储存。要使用 Metricbeat 之前,要先另外准备好 Elasticsearch 和 Kibana,接着再进行 Metricbeat 的安装,以下是使用最简单的安装步骤来做介绍,其实与官方的 Quick start 的文件差不多,先大约知道将 Metricbeat 运作起来的流程为何,我将会以 MacOS
为例。
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
metricbeat.yml
指定 Elasticsearch 的位置output.elasticsearch:
hosts: ["myEShost:9200"]
username: "metricbeat_internal"
password: "YOUR_PASSWORD"
metricbeats.yml
里,也指定 Kibana 的位置,这是接下来要汇入 Dashboard 所使用的。setup.kibana:
host: "mykibanahost:5601"
username: "my_kibana_user"
password: "{pwd}"
./metricbeat modules enable {module_name}
Metricbeat 提供了非常多内建的模组 (modules),像是 Apache
、HTTP
、Nginx
、MySQL
、PostgreSQL
、Redis
、MongoDB
、HAProxy
、Zookeeper
...等,详细可以查看 官方文件 Metricbeat Modules [3]。
另外针对启动的模组,通常都会要调整这些模组的 config 档,档案的路径就在 ./modules.d/
里面,档名就会是 module 的名字,副档名为 .yml
。
./metricbeat setup -e
./metricbeat -d
若是要以 root
执行,要记得把 config 的拥有者也改成 root
sudo chown root metricbeat.yml
sudo chown root modules.d/system.yml
sudo ./metricbeat -e
接下来就可以到 Kibana 查看 Metricbeat 所发送的资料,有没有成功的进入到 Elasticsearch了。
查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!
<<: 2021-Day17. Serverless(五):建立 GCP 帐号 (Google Cloud Platform)
本篇同步发文在个人Blog: 一袋.NET要扛几楼?打造容器化的ASP.NET Core网站!系列文...
##让我们来学习演算法吧,此为阅读[https://pjchender.blogspot.com/2...
你的改变,我看得见! 今天要介绍的是 ResizeObserver,它和昨天的 MutationO...
超音波倒车雷达 教学原文参考:超音波倒车雷达 这篇文章会介绍如何使用超音波感测器和蜂鸣器,搭配「变数...
到昨天为止我们终於把美食的部分都做完了,再来要做的是美景的部分,其实做法跟前面的都差不多,我这边就会...