如何在Ubuntu18.04上使用Metricbeat收集基础架构指标

来自菜鸟教程
跳转至:导航、​搜索

作为 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】配置文件中可以看到模块的参数。 在本教程的情况下,您不需要更改配置中的任何内容。 默认度量集是 cpuloadmemorynetworkprocessprocess_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将监控和警报付诸实践