作为 Write for DOnations 计划的一部分,作者选择了 计算机历史博物馆 来接受捐赠。
介绍
Metricbeat 是几个 Beats 之一,可帮助将各种类型的服务器数据发送到 Elastic Stack 服务器,是一个轻量级数据传送器,一旦安装在您的服务器,定期收集系统范围和每个进程的 CPU 和内存统计数据,并将数据直接发送到您的 Elasticsearch 部署。 这个托运人取代了 Elastic Stack 5.0 版中的早期 Topbeat。
Elastic 目前提供的其他 Beats 包括:
- Filebeat:收集和发送日志文件。
- Packetbeat:收集和分析网络数据。
- Winlogbeat:收集 Windows 事件日志。
- Auditbeat:收集Linux审计框架数据,监控文件完整性。
- Heartbeat:通过主动探测监控服务的可用性。
在本教程中,您将使用 Metricbeat 将本地系统指标(如 CPU/内存/磁盘使用率和网络使用率)从 Ubuntu 18.04 服务器转发到安装了 Elastic Stack 的另一台同类服务器。 使用此托运人,您将收集获取服务器当前状态所需的基本指标。
先决条件
要遵循本教程,您将需要:
- 按照 Initial Server Setup Guide for Ubuntu 18.04 设置两台 Ubuntu 18.04 服务器,包括具有 sudo 权限的非 root 用户和配置了
ufw
的防火墙。 在一台服务器上,您将下载 Elastic Stack; 本教程将其称为“Elastic Stack 服务器”。 Elastic Stack 服务器将监控您的第二台服务器; 这第二台服务器将被称为“第二台 Ubuntu 服务器”。 - 按照教程 如何在 Ubuntu 18.04 上安装 Elasticsearch、Logstash 和 Kibana (Elastic Stack),在 Elastic Stack 服务器上安装 Elastic Stack。
注意:安装Elastic Stack时,必须在整个堆栈中使用相同的版本。 在本教程中,您将使用整个堆栈的最新版本,在撰写本文时,它们是 Elasticsearch 6.6.2、Kibana 6.6.2、Logstash 6.6.2 和 Metricbeat 6.6.2。
第 1 步 — 配置 Elasticsearch 以侦听外部 IP 上的流量
教程 How To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on Ubuntu 18.04 限制了 Elasticsearch 只能访问本地主机。 实际上,这种情况很少见,因为您经常需要监控许多主机。 在此步骤中,您将配置 Elastic Stack 组件以与外部 IP 地址进行交互。
以非 root 用户身份登录您的 Elastic Stack 服务器:
ssh sammy@Elastic_Stack_server_ip
使用您喜欢的文本编辑器编辑 Elasticsearch 的主配置文件 elasticsearch.yml
。 本教程将使用 nano
:
sudo nano /etc/elasticsearch/elasticsearch.yml
找到以下部分并对其进行修改,以便 Elasticsearch 侦听所有接口:
/etc/elasticsearch/elasticsearch.yml
. . . network.host: 0.0.0.0 . . .
地址 0.0.0.0
在许多上下文中被赋予了特定的含义。 在这种情况下,0.0.0.0
表示“任何 IPv4 地址”。
保存并关闭 elasticsearch.yml
,方法是按 CTRL+X
,然后按 Y
,然后按 ENTER
,如果您使用的是 nano
。 然后,使用 systemctl
重新启动 Elasticsearch 服务以应用新设置:
sudo systemctl restart elasticsearch
现在,允许从您的第二个 Ubuntu 服务器访问 Elasticsearch 端口。 为此,您将使用 ufw
:
sudo ufw allow from second_ubuntu_server_ip/32 to any port 9200
如果您有两个以上的服务器,请对每个服务器重复此命令。 如果您的服务器在同一个 网络 上,您可以使用一个规则允许网络上的所有主机访问。 为此,您需要将前缀 /32
替换为较低的值,例如 /24
。 您可以在 UFW Essentials:通用防火墙规则和命令 教程中找到更多 UFW 设置示例。
接下来,测试连接。 以非 root 用户身份登录到您的第二个 Ubuntu 服务器:
ssh sammy@second_ubuntu_server_ip
使用 telnet
命令测试与 Elastic Stack 服务器的连接。 该命令允许使用 Telnet 协议与另一台主机进行通信,并且可以检查远程系统上端口的可用性。
telnet Elastic_Stack_server_ip 9200
您将收到以下输出:
OutputTrying Elastic_Stack_server_ip... Connected to Elastic_Stack_server_ip. Escape character is '^]'.
按 CTRL+]
关闭 Telnet 连接,然后按 CTRL+d
。 您可以键入 quit
,然后按 ENTER
退出 Telnet 实用程序。
现在您已准备好将指标发送到您的 Elastic Stack 服务器。
第 2 步 — 在 Elastic Stack 服务器上安装和配置 Metricbeat
在接下来的两个步骤中,您将首先在 Elastic Stack 服务器上安装 Metricbeat 并导入所有需要的数据,然后在第二个 Ubuntu 服务器上安装和配置客户端。
以非 root 用户身份登录您的 Elastic Stack 服务器:
ssh sammy@Elastic_Stack_server_ip
由于您之前在先决条件中设置了 Elasticsearch 存储库,因此您只需要安装 Metricbeat:
sudo apt install metricbeat
Metricbeat 安装完成后,将索引模板加载到 Elasticsearch 中。 Elasticsearch 索引 是具有相似特征的文档的集合。 特定名称标识每个索引,Elasticsearch 在执行各种操作时将使用这些名称来引用索引。 当您创建新索引时,您的 Elasticsearch 服务器将自动应用索引模板。
要加载模板,请使用以下命令:
sudo metricbeat setup --template -E 'output.elasticsearch.hosts=["localhost:9200"]'
您将看到以下输出:
OutputLoaded index template
Metricbeat 与示例 Kibana 仪表板、可视化和用于在 Kibana 中可视化 Metricbeat 数据的搜索打包在一起。 在使用仪表板之前,您需要创建索引模式并将仪表板加载到 Kibana 中。
要加载模板,请使用以下命令:
sudo metricbeat setup -e -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
您将看到如下所示的输出:
Output. . . 2019-02-15T09:51:32.096Z INFO instance/beat.go:281 Setup Beat: metricbeat; Version: 6.6.2 2019-02-15T09:51:32.136Z INFO add_cloud_metadata/add_cloud_metadata.go:323 add_cloud_metadata: hosting provider type detected as digitalocean, metadata={"instance_id":"133130541","provider":"digitalocean","region":"fra1"} 2019-02-15T09:51:32.137Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.137Z INFO [publisher] pipeline/module.go:110 Beat name: elastic 2019-02-15T09:51:32.138Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.140Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2 2019-02-15T09:51:32.148Z INFO template/load.go:130 Template already exists and will not be overwritten. 2019-02-15T09:51:32.148Z INFO instance/beat.go:894 Template successfully loaded. Loaded index template Loading dashboards (Kibana must be running and reachable) 2019-02-15T09:51:32.149Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.150Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2 2019-02-15T09:51:32.151Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2019-02-15T09:51:56.209Z INFO instance/beat.go:741 Kibana dashboards successfully loaded. Loaded dashboards
现在您可以启动并启用 Metricbeat:
sudo systemctl start metricbeat sudo systemctl enable metricbeat
Metricbeat 将开始将您的系统统计信息传送到 Elasticsearch。
要验证 Elasticsearch 确实在接收此数据,请使用以下命令查询 Metricbeat 索引:
curl -XGET 'http://localhost:9200/metricbeat-*/_search?pretty'
您将看到类似于此的输出:
Output... { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 108, "max_score" : 1.0, "hits" : [ { "_index" : "metricbeat-6.6.2-2019.02.15", "_type" : "doc", "_id" : "A4mU8GgBKrpxEYMLjJZt", "_score" : 1.0, "_source" : { "@timestamp" : "2019-02-15T09:54:52.481Z", "metricset" : { "name" : "network", "module" : "system", "rtt" : 125 }, "event" : { "dataset" : "system.network", "duration" : 125260 }, "system" : { "network" : { "in" : { "packets" : 59728, "errors" : 0, "dropped" : 0, "bytes" : 736491211 }, "out" : { "dropped" : 0, "packets" : 31630, "bytes" : 8283069, "errors" : 0 }, "name" : "eth0" } }, "beat" : { "version" : "6.6.2", "name" : "elastic", "hostname" : "elastic" }, ...
"total" : 108,
行表示 Metricbeat 已找到 108 个针对该特定指标的搜索结果。 如果您的输出显示总命中数为 0,则您需要检查您的设置是否有错误。 如果您收到预期的输出,请继续执行下一步,您将在第二个 Ubuntu 服务器上安装 Metricbeat。
第 3 步 — 在第二台 Ubuntu 服务器上安装和配置 Metricbeat
在您希望将指标发送到 Elastic Stack 服务器的所有 Ubuntu 服务器上执行此步骤。
以非 root 用户身份登录到您的第二个 Ubuntu 服务器:
ssh sammy@second_ubuntu_server_ip
Elastic Stack 组件在 Ubuntu 的默认软件包存储库中不可用。 但是,您可以在添加 Elastic 的包源列表后使用 APT 安装它们。
Elastic Stack 的所有软件包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受软件包欺骗。 您的包管理器将信任已使用密钥进行身份验证的包。 在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Metricbeat。
首先,运行以下命令将 Elasticsearch 公共 GPG 密钥导入 APT:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
接下来,将 Elastic 源列表添加到 sources.list.d
目录,APT 将在其中查找新源:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
接下来,更新您的软件包列表,以便 APT 读取新的 Elastic 源:
sudo apt update
然后使用以下命令安装 Metricbeat:
sudo apt install metricbeat
Metricbeat 安装完成后,将其配置为连接到 Elasticsearch。 打开它的配置文件,metricbeat.yml
:
sudo nano /etc/metricbeat/metricbeat.yml
注意: Metricbeat的配置文件是YAML格式,也就是说缩进很重要! 确保在编辑此文件时不要添加任何额外的空格。
Metricbeat 支持多种输出,但您通常只会将事件直接发送到 Elasticsearch 或 Logstash 以进行额外处理。 找到以下部分并更新 IP 地址:
/etc/metricbeat/metricbeat.yml
#-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["Elastic_Stack_server_ip:9200"] ...
保存并关闭文件。
您可以使用 modules 扩展 Metricbeat 的功能。 在本教程中,您将使用 system 模块,它允许您监控服务器的统计信息,例如 CPU/内存/磁盘使用情况和网络使用情况。
在这种情况下,默认启用 system
模块。 您可以通过运行以下命令查看启用和禁用模块的列表:
sudo metricbeat modules list
您将看到类似于以下内容的列表:
OutputEnabled: system Disabled: aerospike apache ceph couchbase docker dropwizard elasticsearch envoyproxy etcd golang graphite haproxy http jolokia kafka kibana kubernetes kvm logstash memcached mongodb munin mysql nginx php_fpm postgresql prometheus rabbitmq redis traefik uwsgi vsphere windows zookeeper
在【X48X】【X52X】配置文件中可以看到模块的参数。 在本教程的情况下,您不需要更改配置中的任何内容。 默认度量集是 cpu
、load
、memory
、network
、process
和 process_summary
。 每个模块都有一个或多个指标集。 度量集是获取和构建数据的模块的一部分。 度量集不是将每个度量作为单独的事件收集,而是在对远程系统的单个请求中检索多个相关度量的列表。
现在您可以启动并启用 Metricbeat:
sudo systemctl start metricbeat sudo systemctl enable metricbeat
您需要在要收集指标的所有服务器上重复此步骤。 之后,您可以继续下一步,您将了解如何浏览 Kibana 的一些仪表板。
第 4 步 — 探索 Kibana 仪表板
在此步骤中,您将查看 Kibana,这是您在先决条件部分安装的 Web 界面。
在 Web 浏览器中,转到 Elastic Stack 服务器的 FQDN 或公共 IP 地址。 输入您在 Elastic Stack 教程 的第 2 步中定义的登录凭据后,您将看到 Kibana 主页:
单击左侧导航栏中的 Discover 链接。 在 Discover 页面上,选择预定义的 meticbeat-* 索引模式以查看 Metricbeat 数据。 默认情况下,这将显示过去 15 分钟内的所有日志数据。 您将找到直方图和一些指标详细信息:
在这里,您可以搜索和浏览指标,还可以自定义仪表板。 但是,此时不会有太多内容,因为您只是从服务器收集系统统计信息。
使用左侧面板导航到 Dashboard 页面并搜索 Metricbeat System 仪表板。 在那里,您可以搜索 Metricbeat 的 system
模块附带的示例仪表板。
例如,您可以查看有关所有主机的简要信息:
也可以点击主机名查看详细信息:
Kibana 还有许多其他功能,例如图形和过滤,因此请随意探索。
结论
在本教程中,您已安装 Metricbeat 并配置 Elastic Stack 以收集和分析系统指标。 Metricbeat 带有内部 模块 ,可从 Apache、Nginx、Docker、MySQL、PostgreSQL 等服务收集指标。 现在,您只需打开所需的模块即可收集和分析应用程序的指标。
如果您想了解有关服务器监控的更多信息,请查看 An Introduction to Metrics, Monitoring, and Alerting 和 将监控和警报付诸实践。