如何在 CentOS 7 上使用 Metricbeat 收集基础设施指标
作者选择了计算机历史博物馆作为Write for DOnations计划的一部分来接受捐赠。 简介 Metricbeat是几个Beats之一,可帮助将各种类型的服务器数据发送到Elastic Stack服务器,它是一个轻量级数据传送器,一旦安装在您的服务器上,它会定期收集系统范围内的数据和每个进程的 CPU 和内存统计信息,并将数据直接发送到您的 Elasticsearch 部署。该托运人在 El
作者选择了计算机历史博物馆作为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/内存/磁盘使用率和网络使用率)从 CentOS 7 服务器转发到另一台安装了 Elastic Stack 的同类服务器。使用此托运人,您将收集获取服务器当前状态所需的基本指标。
先决条件
要遵循本教程,您将需要:
-
按照Initial Server Setup with CentOS 7指南设置两台 CentOS 7 服务器,包括具有 sudo 权限的非 root 用户和使用
firewalld
设置的防火墙。要设置firewalld
,请按照“配置基本防火墙”部分的新 CentOS 7 服务器的附加推荐步骤教程。在一台服务器上,您将下载 Elastic Stack;本教程将其称为“Elastic Stack 服务器”。 Elastic Stack 服务器(在本教程中将具有 4GB 的 RAM 和 2 个 CPU)将监控您的第二台服务器。这第二台服务器将被称为“第二台 CentOS 服务器”。 -
按照教程How To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on CentOS 7在 Elastic Stack 服务器上安装 Elastic Stack。
注意:安装 Elastic Stack 时,您必须在整个堆栈中使用相同的版本。在本教程中,您将使用整个堆栈的最新版本,在撰写本文时,它们是 Elasticsearch 6.7.0、Kibana 6.7.0、Logstash 6.7.0 和 Metricbeat 6.7.0。
第 1 步 - 配置 Elasticsearch 以侦听外部 IP 上的流量
教程How To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on CentOS 7限制 Elasticsearch 只能访问localhost
。实际上,这种情况很少见,因为您经常需要监控许多主机。在此步骤中,您将配置 Elastic Stack 组件以与外部 IP 地址进行交互。
以非 root 用户身份登录您的 Elastic Stack 服务器:
ssh sammy@Elastic_Stack_server_ip
使用您喜欢的文本编辑器编辑 Elasticsearch 的主配置文件elasticsearch.yml
。本教程将使用vi
:
sudo vi /etc/elasticsearch/elasticsearch.yml
找到以下部分并对其进行修改,以便 Elasticsearch 侦听所有接口。按i
进入插入模式,然后添加以下突出显示的项目:
/etc/elasticsearch/elasticsearch.yml
...
network.host: 0.0.0.0
...
地址0.0.0.0
在许多上下文中被赋予了特定的含义。在这种情况下,0.0.0.0
表示“任何 IPv4 地址”。
完成后,按ESC
退出插入模式,然后按:wq
和ENTER
保存并退出文件。要了解有关文本编辑器 vi 及其后续版本 Vim 的更多信息,请查看我们的在云服务器上安装和使用 Vim 文本编辑器教程。保存并退出文件后,使用systemctl
重新启动 Elasticsearch 服务以应用新设置:
sudo systemctl restart elasticsearch
现在,允许从您的第二个 CentOS 服务器访问 Elasticsearch 端口。要配置来自特定 IP 地址或子网的访问,请使用firewalld
的rich rule功能:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="second_centos_server_ip/32" port protocol="tcp" port="9200" accept'
丰富的规则允许您创建更复杂和可自定义的firewalld
规则,以更好地控制您的防火墙。在此命令中,您将添加一个规则,该规则接受来自您已设置为第二个 CentOS 服务器 IP 地址的source
到 Elastic Stack 服务器的port``9200
的ipv4
流量。
接下来,重新加载firewalld
以激活新规则:
sudo firewall-cmd --reload
如果您有两个以上的服务器,请为每个服务器重复这些命令。如果您的服务器位于同一个网络上,您可以使用一条规则允许网络上的所有主机访问。为此,您需要将 IP 地址后面的/32
替换为较低的值,例如/24
。
接下来,测试连接。以非 root 用户身份登录到您的第二个 CentOS 服务器:
ssh sammy@second_centos_server_ip
使用curl
命令测试与 Elastic Stack 服务器的连接:
curl Elastic_Stack_server_ip:9200
您将收到类似于以下内容的输出:
Output{
"name" : "tl5Is5f",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "W9AcSNWHQ3mYs2uE8odklA",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "3bd3e59",
"build_date" : "2019-03-06T15:16:26.864148Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
既然您知道连接有效,您就可以将指标发送到您的 Elastic Stack 服务器了。
第 2 步 — 在 Elastic Stack 服务器上安装和配置 Metricbeat
在接下来的两个步骤中,您将首先在 Elastic Stack 服务器上安装 Metricbeat 并导入所有需要的数据,然后在第二台 CentOS 服务器上安装和配置客户端。
以非 root 用户身份登录您的 Elastic Stack 服务器:
ssh sammy@Elastic_Stack_server_ip
由于您之前在先决条件中设置了 Elasticsearch 存储库,因此您只需要安装 Metricbeat:
sudo yum install metricbeat
安装完成后,将索引模板加载到 Elasticsearch 中。一个Elasticsearch index是具有相似特征的文档的集合。特定名称标识每个索引,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-03-20T09:51:32.096Z INFO instance/beat.go:281 Setup Beat: metricbeat; Version: 6.7.0
2019-03-20T09: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-03-20T09:51:32.137Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.137Z INFO [publisher] pipeline/module.go:110 Beat name: elastic
2019-03-20T09:51:32.138Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.140Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.148Z INFO template/load.go:130 Template already exists and will not be overwritten.
2019-03-20T09:51:32.148Z INFO instance/beat.go:894 Template successfully loaded.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2019-03-20T09:51:32.149Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.150Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.151Z INFO kibana/client.go:118 Kibana url: http://localhost:5601
2019-03-20T09:51:56.209Z INFO instance/beat.go:741 Kibana dashboards successfully loaded.
Loaded dashboards
现在您可以启动 Metricbeat:
sudo systemctl start metricbeat
要让 Metricbeat 从现在开始在启动时自动启动,请使用enable
命令:
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.7.0-2019.03.20",
"_type" : "doc",
"_id" : "A4mU8GgBKrpxEYMLjJZt",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2019-03-20T09: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.7.0",
"name" : "elastic",
"hostname" : "elastic"
},
...
第"total" : 108,
行表示 Metricbeat 已找到 108 个针对该特定指标的搜索结果。任意数量的搜索结果表明 Metricbeat 正在运行;如果您的输出显示总命中数为 0,您将需要检查您的设置是否有错误。如果您收到预期的输出,请继续执行下一步,您将在第二个 CentOS 服务器上安装 Metricbeat。
第 3 步 — 在第二个 CentOS 服务器上安装和配置 Metricbeat
在您希望将指标发送到 Elastic Stack 服务器的所有 CentOS 服务器上执行此步骤。如果您还有 Ubuntu 服务器,则可以按照How To Gather Infrastructure Metrics on Ubuntu 18.04中的第 3 步安装 Metricbeat。
以非 root 用户身份登录到您的第二个 CentOS 服务器:
ssh sammy@second_centos_server_ip
默认情况下,无法通过 yum 包管理器使用 Elastic Stack 组件,但您可以通过添加 Elastic 的包存储库来安装它们。
Elastic Stack 的所有软件包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受软件包欺骗。您的包管理器将信任已使用密钥进行身份验证的包。在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Metricbeat。
首先,运行以下命令下载并安装 Elasticsearch 公共签名密钥:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
接下来,添加 Elastic 存储库。使用您喜欢的文本编辑器在/etc/yum.repos.d/
目录中创建文件elasticsearch.repo
:
sudo vi /etc/yum.repos.d/elasticsearch.repo
要为 yum 提供下载和安装 Elastic Stack 组件所需的信息,请按i
进入插入模式,并将以下行添加到文件中:
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
完成后,保存并关闭文件。
接下来,使用以下命令安装 Metricbeat:
sudo yum install metricbeat
Metricbeat 安装完成后,将其配置为连接到 Elasticsearch。打开它的配置文件,metricbeat.yml
:
sudo vi /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"]
...
保存并关闭文件。
您可以使用模块扩展 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
在/etc/metricbeat/modules.d/system.yml
配置文件中可以看到模块的参数。在本教程的情况下,您不需要更改配置中的任何内容。默认指标集为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 教程](https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-centos-7#step-2-%E2%80%94-installing-and-configuring-the-kibana-dashboard)的第 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和将监控和警报付诸实践。
更多推荐
所有评论(0)