这篇文章包含两部分内容:1)使用 Metricbeat 采集系统 metric 指标; 2)分析 Metricbeat 的存储模型。
概述
Metricbeat 是一个轻量型指标采集器,用于从系统和服务收集指标。Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx,不一而足。其流程如下所示:
Metric 数据采集的方式与 ELK 的流程是一致的,差别只是采集工具是 Metricbeat.
在本文中,我们只安装 Metricbeat, Elasticsearch 及 Kibana 安装部署参考之前的文章:Docker 下安装 ES, Kibana
约定:
Metricbeat, Elasticsearch 及 Kibana 三个组件的版本为:V7.14.2.
安装 Metricbeat
下载及部署 Metricbeat
从官方网址下载指定的版本:Metricbeat 下载地址
1 | # 下载 Metricbeat |
修改 metricbeat.yaml
1 | # ================================= Dashboards ================================= |
从本地导入 dashboard, 在 kibana 上可方便查看 metric 信息。
开启模块
Metricbeat 自带了很多监控模块,如 Mysql, 默认开启 system
模块,可以根据需要添加模块:
1 | # 查看 metircbeat 开启的模块 |
可以通过文件 ./modules.d/system.yml
查看监控的详细信息等。
启动 Metricbeat
1 | nohup ./metricbeat -e -c metricbeat.yml > metricbeat.log 2>&1 & |
System Metric 数据
Metric 上报的数据格式如下所示:
1 | { |
查看 Metric 监控
可以在 kibana
dashboard 查看监控数据。
可以在三种视图间切换:System Overview, Host Overview, Containers overview.
数据模型
Metricbeat 所有的 Metric 数据存储在一张表中,预置了 3949 个字段,而大部分的字段是空的,没有值。
Index Mapping
在 Mapping 中,按照模块组织字段,如 activemq, apache, system 等等。
1 | { |
稀疏数据
在 Elasticsearch 6.0 (Lucene 7.0 ) 之前的版本中,Doc values 适合存储紧凑性的数据,这些数据所有字段都有值,对于稀疏数据(有很多空值),需要额外的空间来维护这些空值,会造成存储空间的浪费,也会影响索引的速度。什么类型的数据是稀疏数据呢?如下图所示:
如果文档中的字段只有很少一部分有值,那这个字段可以称为稀疏数据,如 middle
, city
, state
.
在 Lucene 7.0 (Elasticsearch 6.0 配套的 Lucene 版本) 内部使用迭代器方式遍历数据,它可以更有效的使用存储空间。
如上图所示,使用随机访问方式遍历 doc values(Elasticsearch 6.0 之前版本使用的方式), 需要维护空值。而迭代器方式则不需要存储空值,可以有效地节省存储空间。
除了存储空间的优化,迭代器方式也可以提升索引的速度,虽然有了这些优化,还是尽量避免使用稀疏数据,相比较而言,紧凑性数据更为有效。
参考:
1. Configure the Kibana endpoint
2. ELK MetricBeat配置监控主机性能
3. Elasticsearch 6.0: Sparse Field Improvements