21、Metricbeat 安装、配置与使用全指南

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 系统
  1. 解压下载的文件,导航至解压后的目录:
E:>cd E:\metricbeat-7.0.0-windows-x86_64
  1. 以管理员身份打开 Windows PowerShell 并导航至解压目录。
  2. 运行以下命令将 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 系统
  1. 解压 tar.gz 包并导航至新创建的文件夹:
$>tar -xzf metricbeat-7.0.0-linux-x86_64.tar.gz 
$>cd metricbeat
  1. 使用 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 的优势,保障系统的稳定运行和性能优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值