Metricbeat 安装、配置与使用全指南
1. 下载与安装 Metricbeat
1.1 下载
访问 https://www.elastic.co/downloads/beats/metricbeat-oss ,根据你的操作系统下载 ZIP 或 TAR 文件。
1.2 安装兼容性说明
本教程使用 Apache 2.0 版本的 Metricbeat。Beats 7.0.x 版本与 Elasticsearch 6.7.x 和 7.0.x 以及 Logstash 6.7.x 和 7.0.x 兼容。兼容性矩阵可在 https://www.elastic.co/support/matrix#matrix_compatibility 查看。
1.3 不同系统安装步骤
1.3.1 Windows 系统
- 解压下载的文件,导航至解压后的目录:
E:>cd E:\metricbeat-7.0.0-windows-x86_64
- 以管理员身份打开 Windows PowerShell 并导航至解压目录。
- 运行以下命令将 Metricbeat 作为 Windows 服务安装:
PS >cd E:\metricbeat-7.0.0-windows-x86_64
PS >E:\metricbeat-7.0.0-windows-x86_64>.\install-service-metricbeat.ps1
若脚本执行被禁用,需要为当前会话设置执行策略以允许脚本运行,例如:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-metricbeat.ps1
1.3.2 Linux 系统
- 解压 tar.gz 包并导航至新创建的文件夹:
$>tar -xzf metricbeat-7.0.0-linux-x86_64.tar.gz
$>cd metricbeat
- 使用 deb/rpm 安装:
- deb 安装 :
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.0.0-amd64.deb
sudo dpkg -i metricbeat-7.0.0-amd64.deb
- rpm 安装 :
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.0.0-x86_64.rpm
sudo rpm -vi metricbeat-7.0.0-x86_64.rpm
安装后,Metricbeat 将安装在 /usr/share/metricbeat 目录,配置文件位于 /etc/metricbeat ,初始化脚本位于 /etc/init.d/metricbeat ,日志文件位于 /var/log/metricbeat 目录。
2. Metricbeat 架构
Metricbeat 由两个组件组成:
- 模块(Modules) :定义从特定服务(如 MongoDB、Apache 等)收集数据的基本逻辑,指定服务的详细信息,包括如何连接、收集指标的频率以及收集哪些指标。
- 指标集(Metricsets) :每个模块有一个或多个指标集,指标集使用单个请求从服务或操作系统收集一组相关指标,对事件数据进行结构化处理并将其发送到配置的输出(如 Elasticsearch 或 Logstash)。
Metricbeat 根据 metricbeat.yml 配置中指定的间隔定期收集指标。
3. 事件结构
Metricbeat 发送两种类型的事件:
- 常规事件 :包含获取的指标。
- 错误事件 :当服务不可用或无法访问时发送。
所有事件都有相同的基本结构,至少包含以下字段:
| 字段 | 描述 |
| ---- | ---- |
| @timestamp | 事件捕获时间 |
| host.hostname | Beat 运行所在服务器的主机名 |
| host.os | Beat 运行所在服务器的操作系统详细信息 |
| agent.type | Beat 的名称 |
| agent.version | Beat 的版本 |
| event.module | 数据所属的模块名称 |
| event.dataset | 数据所属的指标集名称 |
在错误事件中,会附加一个错误字段,如 error.message ,包含错误消息、代码和类型。
3.1 常规事件示例
{
"@timestamp": "2019-04-22T12:40:16.608Z",
"service": {
"type": "system"
},
"system": {
"uptime": {
"duration": {
"ms": 830231705
}
}
},
"event": {
"module": "system",
"duration": 221012700,
"dataset": "system.uptime"
},
"metricset": {
"name": "uptime"
},
"agent": {
"type": "metricbeat",
"ephemeral_id": "1956888d-7da0-469f-9a38-ab8b9ad52e07",
"hostname": "madsh01-I21350",
"id": "5b28d885-1389-4e32-a3a9-3c5e8f9063b0",
"version": "7.0.0"
},
"ecs": {
"version": "1.0.0"
},
"host": {
"name": "madsh01-I21350",
"os": {
"kernel": "6.1.7601.24408 (win7sp1_ldr_escrow.190320-1700)",
"build": "7601.24411",
"platform": "windows",
"version": "6.1",
"family": "windows",
"name": "Windows 7 Enterprise"
},
"id": "254667db-4667-46f9-8cf5-0d52ccf2beb9",
"hostname": "madsh01-I21350",
"architecture": "x86_64"
}
}
3.2 错误事件示例(MongoDB 不可达)
{
"@timestamp": "2019-04-02T11:53:08.056Z",
"metricset": {
"host": "localhost:27017",
"rtt": 1003057,
"module": "mongodb",
"name": "status"
},
"error": {
"message": "no reachable servers"
},
"mongodb": {
"status": {}
}
}
除了这些基本字段,Metricbeat 还会发送与启用模块相关的字段。每个模块发送的完整字段列表可在 https://www.elastic.co/guide/en/beats/metricbeat/current/exported-fields.html 获取。
4. 配置 Metricbeat
Metricbeat 的配置存储在名为 metricbeat.yml 的配置文件中,使用 YAML 语法。该文件包含以下部分:
- 模块配置
- 常规设置
- 输出配置
- 处理器配置
- 路径配置
- 仪表盘配置
- 日志配置
4.1 模块配置
Metricbeat 附带各种模块,用于从系统和应用程序(如 Apache、MongoDB、Redis、MySQL 等)收集指标。有两种启用模块和指标集的方法:
4.1.1 在 modules.d 目录中启用模块配置
modules.d 目录包含 Metricbeat 中所有可用模块的默认配置,特定模块的配置存储在以模块名称命名的 .yml 文件中。例如,MySQL 模块的配置存储在 mysql.yml 文件中。默认情况下,除了系统模块,所有其他模块都被禁用。要列出 Metricbeat 中可用的模块,执行以下命令:
- Windows :
E:\metricbeat-7.0.0-windows-x86_64>metricbeat.exe modules list
- Linux :
[locationOfMetricBeat]$./metricbeat modules list
4.1.2 在 metricbeat.yml 文件中启用模块配置
如果习惯使用早期版本的 Metricbeat,可以直接在 metricbeat.yml 文件的 metricbeat.modules 列表中添加条目来启用适当的模块和指标集。每个条目以破折号 (-) 开头,后跟该模块的设置。例如:
metricbeat.modules:
#------------------ Memcached Module -----------------------------
- module: memcached
metricsets: ["stats"]
period: 10s
hosts: ["localhost:11211"]
#------------------- MongoDB Module ------------------------------
- module: mongodb
metricsets: ["dbstats", "status"]
period: 5s
也可以多次指定一个模块,并为一个或多个指标集指定不同的周期。例如:
#------- Couchbase Module -----------------------------
- module: couchbase
metricsets: ["bucket"]
period: 15s
hosts: ["localhost:8091"]
- module: couchbase
metricsets: ["cluster", "node"]
period: 30s
hosts: ["localhost:8091"]
4.2 常规设置
此部分包含控制 Metricbeat 行为的配置选项和一些常规设置,例如:
- name :发布网络数据的发送者名称,默认使用主机名,例如:
name: "dc1-host1"
- tags :一个标签列表,将包含在 Metricbeat 发送的每个事件的
tags字段中,便于在 Kibana 和 Logstash 中按不同逻辑属性对服务器进行分组和过滤事件,例如:
tags: ["staging", "web-tier","dc1"]
- max_procs :可同时执行的最大 CPU 数量,默认是系统中可用的逻辑 CPU 数量。
4.3 输出配置
此部分用于配置事件的输出目的地,事件可以同时发送到单个或多个输出。允许的输出包括 Elasticsearch、Logstash、Kafka、Redis、文件和控制台。以下是一些可配置的输出示例:
4.3.1 Elasticsearch 输出
output.elasticsearch:
enabled: true
hosts: ["localhost:9200"]
使用 enabled 设置可以启用或禁用输出, hosts 接受一个或多个 Elasticsearch 节点/服务器。为了实现故障转移,可以定义多个主机,当配置多个主机时,事件将以轮询方式分发到这些节点。如果 Elasticsearch 是安全的,可以使用 username 和 password 设置传递凭据:
output.elasticsearch:
enabled: true
hosts: ["localhost:9200"]
username: "elasticuser"
password: "password"
要将事件发送到 Elasticsearch 摄取节点管道进行预处理,可以使用 pipeline 设置提供管道信息:
output.elasticsearch:
enabled: true
hosts: ["localhost:9200"]
pipeline: "ngnix_log_pipeline"
数据写入的默认索引格式为 metricbeat-%{[beat.version]}-%{+yyyy.MM.dd} ,每天创建一个新索引。可以使用 index 设置覆盖索引名称或模式,例如每月创建一个新索引:
output.elasticsearch:
hosts: ["http://localhost:9200"]
index: "metricbeat-%{[beat.version]}-%{+yyyy.MM}"
使用 indices 设置可以根据指定条件将事件放置在适当的索引中,例如:
output.elasticsearch:
hosts: ["http://localhost:9200"]
index: "logs-%{+yyyy.MM.dd}"
indices:
- index: "debug-%{+yyyy.MM.dd}"
when.contains:
message: "DEBUG"
- index: "error-%{+yyyy.MM.dd}"
when.contains:
message: "ERR"
当覆盖 index 参数时,需要添加以下设置禁用模板和仪表盘:
setup.dashboards.enabled: false
setup.template.enabled: false
或者在 metricbeat.yml 配置文件中提供 setup.template.name 和 setup.template.pattern 的值,否则 Metricbeat 将无法运行。
4.3.2 Logstash 输出
output.logstash:
enabled: true
hosts: ["localhost:5044"]
使用 enabled 设置可以启用或禁用输出, hosts 接受一个或多个 Logstash 服务器。为了实现故障转移,可以定义多个主机,如果配置的主机无响应,事件将发送到其他配置的主机之一。当配置多个主机时,事件将随机分发。要在 Logstash 主机之间实现负载均衡,将 loadbalance 标志设置为 true :
output.logstash:
hosts: ["localhost:5045", "localhost:5046"]
loadbalance: true
4.3.3 控制台输出
output.console:
enabled: true
pretty: true
此输出将事件以 JSON 格式写入标准输出,在调试或测试时很有用。
4.4 日志配置
此部分用于配置 Metricbeat 的日志输出,日志系统可以将日志写入系统日志或旋转日志文件。如果未明确配置日志,Windows 系统使用文件输出,Linux 和 OS X 使用系统日志输出。示例配置如下:
logging.level: debug
logging.to_files: true
logging.files:
path: C:\logs\metricbeat
name: metricbeat.log
keepfiles: 10
可用的配置选项包括:
- level :指定日志级别。
- to_files :将所有日志输出写入文件,文件会进行旋转,这是默认值。
- to_syslog :如果此设置为 true ,将日志输出写入系统日志。
5. 捕获系统指标
为了监控和捕获与服务器相关的指标,Metricbeat 提供了系统模块。系统模块提供以下指标集来捕获服务器指标:
| 指标集 | 描述 |
| ---- | ---- |
| core | 提供每个 CPU 核心的使用统计信息 |
| cpu | 提供 CPU 统计信息 |
| diskio | 提供从操作系统收集的磁盘 IO 指标,系统中每个挂载的磁盘创建一个事件 |
| filesystem | 提供文件系统统计信息,每个文件系统创建一个事件 |
| process | 提供进程统计信息,每个进程创建一个事件 |
| process_summary | 收集正在运行的进程的高级统计信息 |
| fsstat | 提供整体文件系统统计信息 |
| load | 提供负载统计信息 |
| memory | 提供内存统计信息 |
| network | 提供从操作系统收集的网络 IO 指标,每个网络接口创建一个事件 |
| socket | 仅在 Linux 系统上可用,需要内核 2.6.14 或更高版本,为每个新的 TCP 套接字报告一个事件 |
一些指标集提供配置选项以微调返回的指标,例如 cpu 指标集提供 cpu.metrics 配置来控制报告的 CPU 指标。但像 memory 和 diskio 等指标集不提供任何配置选项。与其他模块不同,系统模块是本地的,只能收集所在服务器的指标。系统模块每个指标集导出的完整字段列表可在 https://www.elastic.co/guide/en/beats/metricbeat/current/exported-fields-system.html 找到。
6. 使用系统模块运行 Metricbeat
确保 Kibana 7.0 和 Elasticsearch 7.0 正在运行,然后执行以下步骤:
1. 将 metricbeat.yml 的内容替换为以下配置并保存文件:
############### Metricbeat Configuration Example
#################============== Modules configuration
=========================
metricbeat.config.modules: # Glob
pattern for configuration loading
path: ${path.config}/modules.d/*.yml
# Set to true to enable config
reloading
reload.enabled: false
# Period on which files under
path should be checked for changes
#reload.period:
10s
#=========== Elasticsearch template setting
=================
setup.template.settings:
index.number_of_shards: 1
index.codec: ...
7. 指定别名
Elasticsearch 允许用户创建别名,别名是一个虚拟索引名称,可用于引用一个或多个索引。通过 Elasticsearch 索引 API 可以为索引指定别名,这使得所有 API 可以自动将别名转换为实际的索引名称。
7.1 创建别名示例
7.1.1 创建月度指标别名
curl -X POST http://localhost:9200/_aliases -H 'content-type:
application/json' -d '
{
"actions":
[
{"add":{ "index" : "metricbeat-7.0.0-2019.04.*", "alias":
"april_04_metrics"} }
]
}'
创建别名后,可以使用别名对 metricbeat-7.0.0-2019.04.* 模式的所有索引执行查询:
curl -X GET http://localhost:9200/april_04_metrics/_search
7.1.2 创建销售索引别名
curl -X POST http://localhost:9200/_aliases -d '{
"actions" : [
{ "add" : { "index" : "it_sales", "alias" : "sales" } },
{ "add" : { "index" : "retail_sales", "alias" : "sales" } }
] }
未来如果创建了新的销售索引,也可以将其指向该别名,最终用户/应用程序可以始终使用 sales 端点查询所有销售数据。
7.2 删除别名
curl -X POST http://localhost:9200/_aliases -d '
{ "actions" : [ { "remove" : { "index" : "retail_sales", "alias" :
"sales" } }] }
8. 使用 Kibana 可视化系统指标
要使用 Kibana 可视化系统指标,请执行以下步骤:
1. 访问 http://localhost:5601 打开 Kibana。
2. 点击左侧导航菜单中的 Dashboard 链接,从仪表盘选择 [Metricbeat System] Overview ECS 或 [Metricbeat System] Host Overview ECS 。
[Metricbeat System] Overview Dashboard ECS 仪表盘提供所有被监控系统的概述,由于我们只监控一个主机,所以会看到主机数量为 1。
9. 部署架构
常见的 Elastic Stack 部署架构有以下三种:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(Beats):::process -->|直接发送| B(Elasticsearch):::process
B --> C(Kibana):::process
D(Beats):::process -->|发送到| E(Logstash):::process
E --> F(Elasticsearch):::process
F --> G(Kibana):::process
H(Beats):::process -->|发送到| I(Kafka):::process
I --> J(Logstash):::process
J --> K(Elasticsearch):::process
K --> L(Kibana):::process
- 直接将操作指标发送到 Elasticsearch :在边缘服务器上安装各种类型的 Beats(如 Metricbeat、Filebeat、Packetbeat 等),如果不需要进一步处理,生成的事件可以直接发送到 Elasticsearch 集群,然后使用 Kibana 进行可视化/分析。事件流为:Beats → Elasticsearch → Kibana。
- 将操作指标发送到 Logstash :Beats 捕获的操作指标/日志发送到 Logstash 进行进一步处理(如解析日志或丰富日志事件),然后将解析/丰富后的事件推送到 Elasticsearch。为了增加处理能力,可以扩展 Logstash 实例。事件流为:Beats → Logstash → Elasticsearch → Kibana。
- 将操作指标发送到弹性队列 :如果生成的事件速率非常高,Logstash 无法处理负载或为了防止 Logstash 停机时数据/事件丢失,可以使用弹性队列(如 Apache Kafka)对事件进行排队,然后 Logstash 可以按自己的速度处理事件。事件流为:Beats → Kafka → Logstash → Elasticsearch → Kibana。
从 Logstash 5.x 开始,也可以使用 Logstash 的持久队列设置将其用作队列,但它不像 Kafka 那样具有高度的弹性。在上述架构中,可以根据具体用例轻松扩展或缩减 Elasticsearch、Logstash 和 Kibana 的实例。
10. 总结与对比
10.1 不同系统安装方式对比
| 操作系统 | 安装方式 | 步骤 | 安装位置 |
|---|---|---|---|
| Windows | 解压并安装为服务 | 1. 解压文件 2. 以管理员身份打开 PowerShell 并导航至解压目录 3. 运行安装脚本 | 解压目录 |
| Linux | deb/rpm 安装 | 1. 解压 tar.gz 包 2. 根据系统选择 deb 或 rpm 安装命令 | /usr/share/metricbeat |
10.2 不同输出配置对比
| 输出类型 | 配置示例 | 特点 | 适用场景 |
|---|---|---|---|
| Elasticsearch | yaml<br>output.elasticsearch:<br> enabled: true<br> hosts: ["localhost:9200"]<br> | 可直接存储数据,支持多节点、故障转移、预处理等 | 数据存储和分析 |
| Logstash | yaml<br>output.logstash:<br> enabled: true<br> hosts: ["localhost:5044"]<br> | 可进行数据处理 | 需要对数据进行预处理 |
| 控制台 | yaml<br>output.console:<br> enabled: true<br> pretty: true<br> | 用于调试和测试 | 开发和调试阶段 |
10.3 不同部署架构对比
| 架构类型 | 事件流 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 直接发送到 Elasticsearch | Beats → Elasticsearch → Kibana | 简单直接,减少中间环节 | 缺乏数据处理能力 | 数据不需要复杂处理 |
| 发送到 Logstash | Beats → Logstash → Elasticsearch → Kibana | 可进行数据处理,可扩展处理能力 | 增加了中间环节,可能影响性能 | 需要对数据进行预处理 |
| 发送到弹性队列 | Beats → Kafka → Logstash → Elasticsearch → Kibana | 可处理高并发数据,防止数据丢失 | 架构复杂,维护成本高 | 数据产生速率高 |
11. 常见问题与解决方法
11.1 安装问题
- 问题 :Windows 系统安装脚本无法运行。
- 解决方法 :设置执行策略,例如
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-metricbeat.ps1。
11.2 配置问题
- 问题 :覆盖
index参数后 Metricbeat 无法运行。 - 解决方法 :添加
setup.dashboards.enabled: false和setup.template.enabled: false,或者提供setup.template.name和setup.template.pattern的值。
11.3 数据传输问题
- 问题 :Logstash 无法接收 Beats 事件。
- 解决方法 :确保 Logstash 配置了 Beats 输入插件,并且端口和主机配置正确。
11.4 可视化问题
- 问题 :Kibana 无法显示 Metricbeat 数据。
- 解决方法 :确保 Elasticsearch 中存在相应的索引,并且 Kibana 配置正确。
12. 最佳实践
12.1 安装与配置
- 在安装前,仔细检查系统兼容性,确保 Metricbeat 与 Elasticsearch、Logstash 版本兼容。
- 根据实际需求选择合适的安装方式和输出配置,例如需要对数据进行预处理时选择 Logstash 输出。
12.2 模块启用
- 只启用需要的模块和指标集,避免不必要的资源消耗。可以先使用
modules list命令查看可用模块,再根据需求启用。
12.3 数据存储与管理
- 合理设置 Elasticsearch 索引的分片和副本数量,提高数据存储和查询性能。
- 使用别名管理索引,方便查询和维护。
12.4 监控与可视化
- 定期检查 Kibana 仪表盘,及时发现系统异常。
- 根据监控需求自定义 Kibana 仪表盘,展示关键指标。
12.5 架构选择
- 根据数据产生速率和处理需求选择合适的部署架构,例如高并发场景选择弹性队列架构。
13. 未来发展趋势
13.1 功能增强
- 未来 Metricbeat 可能会增加更多的模块和指标集,支持更多的服务和系统监控。
- 加强数据处理和分析能力,提供更丰富的预处理和聚合功能。
13.2 与其他工具集成
- 与更多的云服务和容器编排工具集成,如 Kubernetes、Docker 等,方便在云环境和容器化场景中使用。
13.3 性能优化
- 不断优化 Metricbeat 的性能,减少资源消耗,提高数据采集和传输效率。
13.4 安全提升
- 加强数据安全和隐私保护,提供更多的安全配置选项,确保数据在传输和存储过程中的安全性。
14. 总结
Metricbeat 是一款强大的监控工具,通过本文的介绍,我们了解了它的下载安装、架构、事件结构、配置方法、系统指标捕获、别名指定、可视化以及部署架构等方面的知识。同时,我们还对比了不同的安装方式、输出配置和部署架构,给出了常见问题的解决方法和最佳实践。随着技术的不断发展,Metricbeat 也将不断完善和优化,为我们提供更强大的监控和分析能力。在实际应用中,我们应根据具体需求选择合适的配置和架构,充分发挥 Metricbeat 的优势,保障系统的稳定运行和性能优化。
超级会员免费看


被折叠的 条评论
为什么被折叠?



