如何在 Ubuntu 18.04 上使用 Metricbeat 收集基础设施指标

作者选择了 计算机历史博物馆作为 写给捐赠计划的一部分接受捐赠。

介绍

Metricbeat,它是帮助向 Elastic Stack服务器发送不同类型的服务器数据的几种 Beats之一,是一个轻量级的数据发送器,一旦安装在您的服务器上,会定期收集整个系统和每个过程的CPU和内存统计数据,并将数据直接发送到您的Elasticsearch部署。

目前可用的其他 Beats 来自 Elastic 是:

  • Filebeat:收集和发送日志文件. * Packetbeat:收集和分析网络数据. * Winlogbeat:收集Windows事件日志. * Auditbeat:收集Linux审计框架数据并监控文件完整性。

在本教程中,您将使用Metricbeat来传输本地系统指标,如CPU/memory/disk使用率和网络利用率,从Ubuntu 18.04服务器到安装了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)(https://andsky.com/tech/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-18-04)仅限制了Elasticsearch访问 localhost. 在实践中,这是罕见的,因为您通常需要监控许多主机. 在此步骤中,您将配置Elastic Stack组件与外部IP地址进行交互。

登录您的 Elastic Stack 服务器作为您的非根用户:

1[environment local]
2ssh sammy@Elastic_Stack_server_ip

使用您喜爱的文本编辑器来编辑 Elasticsearch 的主要配置文件 elasticsearch.yml. 本教程将使用 nano:

1sudo nano /etc/elasticsearch/elasticsearch.yml

查找以下部分,并修改它,以便 Elasticsearch 在所有界面上倾听:

1[label /etc/elasticsearch/elasticsearch.yml]
2. . .
3network.host: 0.0.0.0
4. . .

地址0.0.0.0在某些情况下被赋予了特定含义,在这种情况下,0.0.0.0意味着任何IPv4地址

保存并关闭elasticsearch.yml,按CTRL+X,然后按Y,然后按ENTER,如果您正在使用nano

1sudo systemctl restart elasticsearch

现在,允许从您的第二个Ubuntu服务器访问Elasticsearch端口,您将使用ufw为此:

1sudo ufw allow from second_ubuntu_server_ip/32 to any port 9200

如果您的服务器位于同一个 网络,您可以使用网络上的所有主机使用一个规则允许访问。 要做到这一点,您需要用较低的值代替前缀 /32,例如 /24

接下来,测试连接. 登录您的第二个Ubuntu服务器作为您的非根用户:

1[environment local]
2ssh sammy@second_ubuntu_server_ip

使用telnet命令来测试连接到 Elastic Stack 服务器. 此命令允许使用 Telnet协议与其他主机进行通信,并可以检查远程系统上的端口可用性。

1[environment second]
2telnet Elastic_Stack_server_ip 9200

您将收到以下输出:

1[environment second]
2[secondary_label Output]
3Trying Elastic_Stack_server_ip...
4Connected to Elastic_Stack_server_ip.
5Escape character is '^]'.

关闭 Telnet 连接,按CTRL+],然后按CTRL+d

现在您已经准备好将指标发送到您的 Elastic Stack 服务器。

步骤 2 — 在 Elastic Stack 服务器上安装和配置 Metricbeat

在接下来的两个步骤中,您将首先在 Elastic Stack 服务器上安装 Metricbeat 并导入所有必要的数据,然后在第二个 Ubuntu 服务器上安装和配置客户端。

登录您的 Elastic Stack 服务器作为您的非根用户:

1[environment local]
2ssh sammy@Elastic_Stack_server_ip

由于您先前设置了 Elasticsearch 存储库作为先决条件,您只需要安装 Metricbeat:

1sudo apt install metricbeat

一旦 Metricbeat 安装完毕,请将索引模板加载到 Elasticsearch. 一个 Elasticsearch index 是具有相似特征的文档集合。 特定名称可识别每个索引,Elasticsearch 将使用该模板在执行各种操作时参考索引。 您的 Elasticsearch 服务器在创建新索引时会自动应用索引模板。

要加载模板,请使用以下命令:

1sudo metricbeat setup --template -E 'output.elasticsearch.hosts=["localhost:9200"]'

您将看到以下结果:

1[secondary_label Output]
2Loaded index template

Metricbeat 配备了类似的 Kibana 仪表板、可视化和搜索,以便在 Kibana 中可视化 Metricbeat 数据. 在您使用仪表板之前,您需要创建索引模式并将仪表板加载到 Kibana。

要加载模板,请使用以下命令:

1sudo metricbeat setup -e -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

你会看到这样的输出:

 1[secondary_label Output]
 2. . .
 32019-02-15T09:51:32.096Z INFO instance/beat.go:281 Setup Beat: metricbeat; Version: 6.6.2
 42019-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"}
 52019-02-15T09:51:32.137Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
 62019-02-15T09:51:32.137Z INFO    [publisher]     pipeline/module.go:110 Beat name: elastic
 72019-02-15T09:51:32.138Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
 82019-02-15T09:51:32.140Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2
 92019-02-15T09:51:32.148Z INFO template/load.go:130 Template already exists and will not be overwritten.
102019-02-15T09:51:32.148Z INFO instance/beat.go:894 Template successfully loaded.
11Loaded index template
12Loading dashboards (Kibana must be running and reachable)
132019-02-15T09:51:32.149Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200
142019-02-15T09:51:32.150Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2
152019-02-15T09:51:32.151Z INFO kibana/client.go:118 Kibana url: http://localhost:5601
162019-02-15T09:51:56.209Z INFO instance/beat.go:741 Kibana dashboards successfully loaded.
17Loaded dashboards

现在您可以开始并启用 Metricbeat:

1sudo systemctl start metricbeat
2sudo systemctl enable metricbeat

Metricbeat 将开始将您的系统统计数据发送到 Elasticsearch。

要验证 Elasticsearch 是否确实收到这些数据,请使用此命令查询 Metricbeat 索引:

1curl -XGET 'http://localhost:9200/metricbeat-*/_search?pretty'

您将看到一个类似于此的输出:

 1[secondary_label Output]
 2...
 3{
 4  "took" : 3,
 5  "timed_out" : false,
 6  "_shards" : {
 7    "total" : 1,
 8    "successful" : 1,
 9    "skipped" : 0,
10    "failed" : 0
11  },
12  "hits" : {
13    "total" : 108,
14    "max_score" : 1.0,
15    "hits" : [
16      {
17        "_index" : "metricbeat-6.6.2-2019.02.15",
18        "_type" : "doc",
19        "_id" : "A4mU8GgBKrpxEYMLjJZt",
20        "_score" : 1.0,
21        "_source" : {
22          "@timestamp" : "2019-02-15T09:54:52.481Z",
23          "metricset" : {
24            "name" : "network",
25            "module" : "system",
26            "rtt" : 125
27          },
28          "event" : {
29            "dataset" : "system.network",
30            "duration" : 125260
31          },
32          "system" : {
33            "network" : {
34              "in" : {
35                "packets" : 59728,
36                "errors" : 0,
37                "dropped" : 0,
38                "bytes" : 736491211
39              },
40              "out" : {
41                "dropped" : 0,
42                "packets" : 31630,
43                "bytes" : 8283069,
44                "errors" : 0
45              },
46              "name" : "eth0"
47            }
48          },
49          "beat" : {
50            "version" : "6.6.2",
51            "name" : "elastic",
52            "hostname" : "elastic"
53          },
54...

线:108表示Metricbeat为此特定指标找到了108个搜索结果. 如果您的输出显示0个总打击,您将需要对设置进行检查,如果您收到预期的输出,继续到下一步,您将在第二个Ubuntu服务器上安装Metricbeat。

第3步:在第二个Ubuntu服务器上安装和配置Metricbeat

在您要向 Elastic Stack 服务器发送指标的所有 Ubuntu 服务器上执行此步骤。

登录您的第二个Ubuntu服务器作为您的非根用户:

1[environment local]
2ssh sammy@second_ubuntu_server_ip

Elastic Stack 组件在 Ubuntu 的默认包存库中不可用,但是在添加 Elastic 的包源列表后,您可以使用 APT 安装它们。

所有 Elastic Stack 包都使用 Elasticsearch 签名密钥签名,以保护您的系统免受包裹欺骗。 您的包管理员将信任使用密钥身份验证的包裹。 在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Metricbeat。

首先,运行以下命令将 Elasticsearch 公共 GPG 密钥导入 APT:

1[environment second]
2wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

接下来,将 Elastic 源列表添加到 sources.list.d 目录中,其中 APT 会搜索新的源:

1[environment second]
2echo "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 源:

1[environment second]
2sudo apt update

然后使用此命令安装 Metricbeat:

1[environment second]
2sudo apt install metricbeat

一旦 Metricbeat 完成安装,请将其配置为连接到 Elasticsearch. 打开其配置文件, metricbeat.yml:

1[environment second]
2sudo nano /etc/metricbeat/metricbeat.yml

<$>[注] 注: Metricbeat 的配置文件是 YAML 格式,这意味着插入非常重要! 请确保您在编辑此文件时不添加任何额外的空间。

Metricbeat 支持多种输出,但您通常只会直接将事件发送到 Elasticsearch 或 Logstash 进行额外处理。

1[environment second]
2[label /etc/metricbeat/metricbeat.yml]
3#-------------------------- Elasticsearch output ------------------------------
4output.elasticsearch:
5  # Array of hosts to connect to.
6  hosts: ["Elastic_Stack_server_ip:9200"]
7
8...

保存并关闭文件。

在本教程中,您将使用 system模块,允许您监控服务器的统计数据,如CPU/内存/磁盘使用率和网络利用率。

在这种情况下,系统模块默认启用,您可以通过运行以下方式查看启用和禁用模块的列表:

1[environment second]
2sudo metricbeat modules list

你会看到一个类似于以下的列表:

 1[environment second]
 2[secondary_label Output]
 3Enabled:
 4system
 5
 6Disabled:
 7aerospike
 8apache
 9ceph
10couchbase
11docker
12dropwizard
13elasticsearch
14envoyproxy
15etcd
16golang
17graphite
18haproxy
19http
20jolokia
21kafka
22kibana
23kubernetes
24kvm
25logstash
26memcached
27mongodb
28munin
29mysql
30nginx
31php_fpm
32postgresql
33prometheus
34rabbitmq
35redis
36traefik
37uwsgi
38vsphere
39windows
40zookeeper

您可以在 /etc/ metricbeat/moules.d/ system.yml' 配置文件中看到模块的参数。 对于此教程, 您不需要更改配置 。 默认的衡量标准是cpu'、负荷'、记忆'、网络'、进程'和`进程-摘要'。 每个模块都有一个或多个度量衡集. 参数集是模块中获取和构建数据的部分. 计量集不是作为单独事件收集每个计量,而是在向远程系统提出的单一请求中检索一个多个相关计量清单.

现在您可以开始并启用 Metricbeat:

1[environment second]
2sudo systemctl start metricbeat
3sudo systemctl enable metricbeat

您需要在您想要收集指数的所有服务器上重复此步骤,然后您可以转到下一步,您将看到如何导航Kibana的一些仪表板。

第4步:探索Kibana仪表板

在此步骤中,您将查看Kibana,您在前提部分安装的 Web 界面。

在 Web 浏览器中,前往您的 Elastic Stack 服务器的 FQDN 或公共 IP 地址. 在您在 Elastic Stack 教程的第 2 步中定义的登录凭证后,您将看到 Kibana 主页:

Kibana Homepage

发现页面上,选择预定义的meticbeat-***索引模式以查看 Metricbeat 数据. 默认情况下,这将向您显示过去 15 分钟的所有日志数据。

Discover page

在这里,你可以搜索和浏览你的指标,并自定义你的仪表板. 然而,在这个时候,那里不会有很多,因为你只是从你的服务器收集系统统计数据。

使用左侧面板导航到 Dashboard 页面并搜索 ** Metricbeat System** 仪表板. 一旦到达那里,您可以搜索带有 Metricbeat 的系统模块的示例仪表板。

例如,您可以查看有关所有主机的简短信息:

Syslog Dashboard

您还可以点击主机名称并查看详细信息:

Sudo Dashboard

Kibana有许多其他功能,如图形和过滤,所以可以自由探索。

结论

在本教程中,您已经安装了 Metricbeat 并配置了 Elastic Stack 来收集和分析系统指标。 Metricbeat 配备了内部 模块来收集来自 Apache, Nginx, Docker, MySQL, PostgreSQL 等服务的指标。

如果您想了解有关服务器监控的更多信息,请参阅 引入指标,监控和警报实施监控和警报

Published At
Categories with 技术
comments powered by Disqus