以 Logstash 作为代理从 Beats 摄取数据
本指南介绍了如何将 Filebeat 和 Metricbeat 的数据先发送到作为中介的 Logstash,然后再将这些数据发送到您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署中。使用 Logstash 作为代理,可以通过单个面向外部的防火墙例外或规则来限制 Elastic 堆栈流量。请考虑此类设置的以下功能
您可以通过本地网络的非军事区 (DMZ) 将多个 Beats 实例的数据发送到 Logstash。然后,Logstash 通过您的防火墙充当代理,将 Beats 数据发送到您的部署中,如下图所示

这种代理减少了 Beats 与您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署进行通信所需的防火墙例外或规则。通常,网络中会分散部署许多 Beats,每个 Beat 都安装在其监控的数据附近,并且每个 Beat 都与部署进行单独通信。多个 Beats 支持多个服务器。与其配置每个 Beat 将其数据直接发送到您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署,不如使用 Logstash 通过一个防火墙例外或规则来代理此流量。
在仅使用一个或几个 Beats 的简单场景下,此设置并不适用。当有大量 Beats 时,使用 Logstash 进行代理是最合理的。
本示例中的配置使用了 Filebeat 和 Metricbeat 都提供的系统模块。Filebeat 的系统模块发送服务器系统日志详情(即登录成功/失败、sudo superuser do 命令使用情况以及其他关键使用详情)。Metricbeat 的系统模块发送内存、CPU、磁盘和其他服务器使用指标。
所需时间:1 小时
- 获取免费试用.
- 登录 Elastic Cloud。
- 选择创建部署 (Create deployment)。
- 为您的部署命名。您可以保留所有其他设置的默认值。
- 选择 Create deployment(创建部署)并保存您的 Elastic 部署凭据。稍后您将需要这些凭据。
- 当部署就绪后,点击 Continue(继续),系统将显示 Setup guides(设置指南)页面。要继续前往部署主页,请点击 I’d like to do something else(我想做其他事情)。
不想订阅其他服务?您也可以通过 AWS、Azure 和 GCP 市场获取 Elastic Cloud Hosted。
- 登录 Elastic Cloud Enterprise 管理控制台。
- 选择创建部署 (Create deployment)。
- 为您的部署命名。您可以保留所有其他设置的默认值。
- 选择 Create deployment(创建部署)并保存您的 Elastic 部署凭据。稍后您将需要这些凭据。
- 当部署就绪后,点击 Continue(继续),系统将显示 Setup guides(设置指南)页面。要继续前往部署主页,请点击 I’d like to do something else(我想做其他事情)。
连接到 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署时,您可以使用 Cloud ID 指定连接详情。您必须传递在云控制台中找到的 Cloud ID。前往 Kibana 主菜单并选择“管理 > 集成”,然后选择“查看部署详情”,即可找到您的 Cloud ID。
要连接到 Elastic Cloud Hosted 或 Elastic Cloud Enterprise、向其流式传输数据并发出查询,您需要考虑身份验证。支持两种身份验证机制:API 密钥和基本身份验证。在此,为了让您快速上手,我们将展示如何使用基本身份验证,但您也可以稍后生成 API 密钥(如后文所示)。API 密钥更安全,是生产环境的首选。
在托管 Beats 的本地机器或获准访问 Beats 机器的其他机器上下载并解压 Logstash。
既然已下载 Logstash 并设置好了部署,您就可以配置 Metricbeat 将操作数据发送到 Logstash。
将 Metricbeat 安装在尽可能靠近您要监控的服务的 位置。例如,如果您有四台运行 MySQL 的服务器,我们建议您在每台服务器上运行 Metricbeat。这允许 Metricbeat 从 localhost 访问您的服务。此设置不会产生任何额外的网络流量,并使 Metricbeat 能够在发生网络问题时仍能收集指标。来自多个 Metricbeat 实例的指标会在 Logstash 服务器上合并。
如果您有多台包含指标数据的服务器,请重复以下步骤在每台服务器上配置 Metricbeat。
下载 Metricbeat
下载 Metricbeat 并将其解压到您要从中收集数据的本地服务器上。
关于 Metricbeat 模块
Metricbeat 有许多可用模块来收集常见指标。您可以根据需要配置其他模块。对于本示例,我们使用 Metricbeat 的默认配置,该配置启用了系统模块。系统模块允许您使用默认的一组指标监控服务器:cpu、load、memory、network、process、process_summary、socket_summary、filesystem、fsstat 和 uptime。
加载 Metricbeat Kibana 仪表板
Metricbeat 随附了示例仪表板、可视化和搜索,用于在 Kibana 中可视化 Metricbeat data 数据。在使用仪表板之前,您需要创建数据视图(以前称为索引模式)metricbeat-*,并将仪表板加载到 Kibana 中。这需要从能够访问 ES-Hadoop 或 Elastic Cloud Enterprise 部署的本地 Beats 机器上完成。
从 Elastic Stack 8.0 版本开始,Kibana index patterns(索引模式)已重命名为 data views(数据视图)。要了解更多信息,请查看 Kibana 8.0 新特性页面。
- 打开命令行实例,然后转到 <localpath>/metricbeat-<version>/
- 运行以下命令
sudo ./metricbeat setup \
-E cloud.id=<cloudID> \
-E cloud.auth=<username>:<password>
指定您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署的 Cloud ID。您可以在 Cloud ID 的开头包含或省略
<Deploymentname>:前缀。这两个版本都可以正常工作。前往 Kibana 主菜单并选择“管理 > 集成”,然后选择“查看部署详情”,即可找到您的 Cloud ID。指定在创建部署时为您提供的用户名和密码。确保保留 <username> 和 <password> 之间的冒号。
重要提示根据安装位置、环境和本地权限等变量,您可能需要更改 metricbeat.yml 的所有权。
在阅读本文档的多个部分时,您可能会遇到类似的权限障碍。设立这些权限要求是有充分理由的,它们是防止未经授权访问和修改关键 Elastic 文件的安全保障。
如果这不是生产环境,并且您希望减少权限麻烦以快速通过,则可以在执行 Beats 时从命令行使用
--strict.perms=false来禁用严格权限检查(例如,./metricbeat --strict.perms=false)。根据您的系统,您可能还会发现某些命令需要以 root 身份运行,只需在命令前加上
sudo即可。
您的结果应该类似于以下内容
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
- 在 <localpath>/metricbeat-<version>/(其中 <localpath> 是安装 Metricbeat 的目录)中,打开 metricbeat.yml 配置文件进行编辑。
- 向下滚动到 Elasticsearch Output 部分。在 output.elasticsearch 和 Elasticsearch hosts 前面加上注释井号 (#)。
- 向下滚动到 Logstash Output 部分。删除 output.logstash 和 hosts 前面的注释井号 (#),如下所示
# ---------------- Logstash Output -----------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
- 将
localhost和端口号替换为 Logstash 正在监听的主机名和端口号。
下一步是将 Filebeat 配置为将操作数据发送到 Logstash。与 Metricbeat 一样,将 Filebeat 安装在尽可能靠近您要监控的服务的 位置。
下载 Filebeat
下载 Filebeat 并将其解压到您要从中收集数据的本地服务器上。
启用 Filebeat 系统模块
Filebeat 有许多可用模块来收集常见日志类型。您可以根据需要配置其他模块。对于本示例,我们使用 Filebeat 的系统模块。此模块根据检测到的操作系统读取各种系统日志文件(包含登录成功或失败、sudo 命令使用情况以及其他关键使用详情等信息)。对于本示例,使用的是基于 Linux 的操作系统,Filebeat 从 /var/log/ 文件夹中提取日志。务必通过标准文件和文件夹权限验证 Filebeat 是否已被授予访问您的日志文件夹的权限。
- 转到 <localpath>/filebeat-<version>/modules.d/,其中 <localpath> 是安装 Filebeat 的目录。
- Filebeat 要求至少启用一个文件集。在文件 <localpath>/filebeat-<version>/modules.d/system.yml.disabled 中,在
syslog和auth下将enabled设置为true
- module: system
# Syslog
syslog:
enabled: true
# Authorization logs
auth:
enabled: true
从 <localpath>/filebeat-<version> 目录中,运行如图所示的 filebeat modules 命令
./filebeat modules enable system
现在,系统模块已在 Filebeat 中启用,并且将在下次启动 Filebeat 时使用它。
加载 Filebeat Kibana 仪表板
Filebeat 随附了示例 Kibana 仪表板、可视化和搜索,用于在 Kibana 中可视化 Filebeat 数据。在使用仪表板之前,您需要创建数据视图 filebeat-*,并将仪表板加载到 Kibana 中。这需要从能够访问互联网的 Beats 机器上完成。
- 打开命令行实例,然后转到 <localpath>/filebeat-<version>/
- 运行以下命令
sudo ./filebeat setup \
-E cloud.id=<cloudID> \
-E cloud.auth=<username>:<password>
指定您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署的 Cloud ID。您可以在 Cloud ID 的开头包含或省略
<Deploymentname>:前缀。这两个版本都可以正常工作。前往 Kibana 主菜单并选择“管理 > 集成”,然后选择“查看部署详情”,即可找到您的 Cloud ID。指定在创建部署时为您提供的用户名和密码。确保保留 <username> 和 <password> 之间的冒号。
重要提示根据安装位置、环境和本地权限等变量,您可能需要更改 filebeat.yml 的所有权。
您的结果应该类似于以下内容
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Use the ML app instead.
See more: /explore-analyze/machine-learning.md
Loaded machine learning job configurations
Loaded Ingest pipelines
- 退出 CLI。
filebeat-* 和 metricbeat-* 的数据视图现在可在 Elasticsearch 中使用。要进行验证
- 登录到 Kibana.
- 打开 Kibana 主菜单,选择管理并转到 Kibana > 数据视图。
- 在搜索栏中搜索 data views。
- 在搜索结果中,选择 Kibana / Data Views Management。
完成 Filebeat 配置
- 在 <localpath>/filebeat-<version>/(其中 <localpath> 是安装 Filebeat 的目录)中,打开 filebeat.yml 配置文件进行编辑。
- 向下滚动到 Outputs 部分。在 output.elasticsearch 和 Elasticsearch hosts 前面加上注释井号 (#)。
- 向下滚动到 Logstash Output 部分。删除 output.logstash 和 hosts 前面的注释井号 (#),如下所示
# ---------------- Logstash Output -----------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
- 将
localhost和端口号替换为 Logstash 正在监听的主机名和端口号。
现在 Filebeat 和 Metricbeat 已经设置好了,让我们配置一个 Logstash 管道来输入来自 Beats 的数据并将结果发送到标准输出。这使您能够在将数据发送到 Elasticsearch 中进行索引之前验证数据输出。
在 <localpath>/logstash-<version>/ 中,创建一个名为 beats.conf 的新文本文件。
将以下代码复制并粘贴到新的文本文件中。此代码创建一个 Logstash 管道,该管道在端口 5044 上监听来自 Beats 的连接,并使用由 Logstash rubydebug 输出插件提供的格式写入标准输出(通常是您的终端)。
input { beats{port => 5044} } output { stdout{codec => rubydebug} }- Logstash 在默认端口 5044 上监听 Beats 输入。只需一行即可完成此操作。Logstash 可以处理来自许多相同类型以及各种不同类型(Metricbeat、Filebeat 等)的 Beats 的输入。
- 这会将输出发送到标准输出,该标准输出通过您的命令行界面显示。此插件使您能够在稍后的步骤中将数据发送到 Elasticsearch 之前对其进行验证。
将新的 beats.conf 文件保存在您的 Logstash 文件夹中。要详细了解文件格式和选项,请查看Logstash 配置示例。
现在,让我们使用前面步骤中的 Metricbeats 和 Filebeats 配置来试用 Logstash 管道。每个 Beat 将数据发送到 Logstash 管道中,结果显示在标准输出上,您可以在其中验证一切是否正确。
测试 Metricbeat 到 stdout
打开命令行界面实例。转到 <localpath>/logstash-<version>/(其中 <localpath> 是安装 Logstash 的目录),并通过运行以下命令启动 Logstash
bin/logstash -f beats.conf打开第二个命令行界面实例。转到 <localpath>/metricbeat-<version>/(其中 <localpath> 是安装 Metricbeat 的目录),并通过运行以下命令启动 Metricbeat
./metricbeat -c metricbeat.yml切换回运行 Logstash 的第一个命令行界面实例。现在,Metricbeat 事件被输入到 Logstash 中,并且输出数据被定向到标准输出。您的结果应该类似于以下内容
"tags" => [ [0] "beats_input_raw_event" ], "agent" => { "type" => "metricbeat", "name" => "john-VirtualBox", "version" => "8.13.1", "ephemeral_id" => "1e69064c-d49f-4ec0-8414-9ab79b6f27a4", "id" => "1b6c39e8-025f-4310-bcf1-818930a411d4", "hostname" => "john-VirtualBox" }, "service" => { "type" => "system" }, "event" => { "duration" => 39833, "module" => "system", "dataset" => "system.cpu" }, "@timestamp" => 2021-04-21T17:06:05.231Z, "metricset" => { "name" => "cpu", "period" => 10000 }, "@version" => "1","host" => { "id" => "939972095cf1459c8b22cc608eff85da", "ip" => [ [0] "10.0.2.15", [1] "fe80::3700:763c:4ba3:e48c" ], "name" => "john-VirtualBox","mac" => [ [0] "08:00:27:a3:c7:a9" ], "os" => { "type" => "linux",切换回 Metricbeat 命令行实例。输入 CTRL + C 关闭 Metricbeat,然后退出 CLI。
切换回 Logstash 命令行实例。输入 CTRL + C 关闭 Logstash,然后退出 CLI。
测试 Filebeat 到 stdout
打开命令行界面实例。转到 <localpath>/logstash-<version>/(其中 <localpath> 是安装 Logstash 的目录),并通过运行以下命令启动 Logstash
bin/logstash -f beats.conf打开第二个命令行界面实例。转到 <localpath>/filebeat-<version>/(其中 <localpath> 是安装 Filebeat 的目录),并通过运行以下命令启动 Filebeat
./filebeat -c filebeat.yml切换回运行 Logstash 的第一个命令行界面实例。现在,Filebeat 事件被输入到 Logstash 中,并且输出数据被定向到标准输出。您的结果应该类似于以下内容
{ "service" => { "type" => "system" }, "event" => { "timezone" => "-04:00", "dataset" => "system.syslog", "module" => "system" }, "fileset" => { "name" => "syslog" }, "agent" => { "id" => "113dc127-21fa-4ebb-ab86-8a151d6a23a6", "type" => "filebeat", "version" => "8.13.1", "hostname" => "john-VirtualBox", "ephemeral_id" => "1058ad74-8494-4a5e-9f48-ad7c5b9da915", "name" => "john-VirtualBox" }, "@timestamp" => 2021-04-28T15:33:41.727Z, "input" => { "type" => "log" }, "ecs" => { "version" => "1.8.0" }, "@version" => "1", "log" => { "offset" => 73281, "file" => { "path" => "/var/log/syslog" } },检查 Logstash 输出结果,确保您的数据看起来正确。输入 CTRL + C 关闭 Logstash。
切换回 Filebeats CLI。输入 CTRL + C 关闭 Filebeat。
在本节中,您将配置 Logstash 以将 Metricbeat 和 Filebeat 数据发送到 Elasticsearch。您将修改前面创建的 beats.conf,并指定您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署所需的输出凭据。然后,您启动 Logstash 将 Beats 数据发送到 Elasticsearch 中。
在您的 <localpath>/logstash-<version>/ 文件夹中,打开 beats.conf 进行编辑。
将 JSON 的 output {} 部分替换为以下代码
output { elasticsearch { index => "%{[@metadata][beat]}-%{[@metadata][version]}" ilm_enabled => true cloud_id => "<DeploymentName>:<ID>" cloud_auth => "elastic:<Password>" # api_key => "<myAPIid:myAPIkey>" } }- 使用您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署的 Cloud ID。您可以在 Cloud ID 的开头包含或省略
<DeploymentName>:前缀。这两个版本都可以正常工作。前往 Kibana 主菜单并选择“管理 > 集成”,然后选择“查看部署详情”,即可找到您的 Cloud ID。 - 默认用户名为
elastic。不建议使用elastic账户来提取数据,因为这是超级用户。我们建议使用权限较低的用户,或者具有特定于要写入的索引或数据流的权限的 API 密钥。有关写入者角色和 API 密钥的信息,请查看授予对受保护资源的访问权限。如果使用elastic用户,请使用创建部署时提供的密码;如果使用具有授予对受保护资源的访问权限文档中指定角色的新提取用户,请使用创建该用户时使用的密码。
以下是有关配置文件设置的一些其他详情
index:我们指定要与 Beats 输出关联的 Elasticsearch 索引的名称。
%{[@metadata][beat]} 将索引名称的第一部分设置为 Beat 元数据字段的值。
%{[@metadata][version]} 将索引名称的第二部分设置为 Beat 版本。
如果您使用 Metricbeat 8.13.1 版本,在 Elasticsearch 中创建的索引名为 metricbeat-8.13.1。同样,使用 8.13.1 版本的 Filebeat 时,Elasticsearch 索引名为 filebeat-8.13.1。
cloud_id:这是唯一标识您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署的 ID。
ssl:应将其设置为
true,以便使用安全套接字层 (SSL) 证书来实现 Logstash 与您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署之间的安全通信。ilm_enabled:启用和禁用索引生命周期管理。
api_key:如果您选择使用 API 密钥进行身份验证(如接下来的步骤中所述),您可以在此处提供它。
- 使用您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署的 Cloud ID。您可以在 Cloud ID 的开头包含或省略
可选:为了获得更高的安全性,您可以生成一个 Elasticsearch API 密钥并配置 Logstash 使用新密钥安全连接到 Elastic Cloud Hosted 或 Elastic Cloud Enterprise。
对于 Elastic Cloud Hosted,登录到 Elastic Cloud 控制台;对于 Elastic Cloud Enterprise,登录到管理控制台。
选择部署并转到 ☰ > 管理 > 开发工具。
输入以下内容
POST /_security/api_key { "name": "logstash-apikey", "role_descriptors": { "logstash_read_write": { "cluster": ["manage_index_templates", "monitor"], "index": [ { "names": ["logstash-*","metricbeat-*","filebeat-*"], "privileges": ["create_index", "write", "read", "manage"] } ] } } }这将创建一个具有集群
monitor权限的 API 密钥,该权限提供用于确定集群状态的只读访问权限;以及manage_index_templates,它允许对索引模板进行所有操作。某些其他权限还允许对指定索引执行create_index、write和manage操作。添加了索引manage权限以启用索引刷新。单击 ▶。输出应该类似于以下内容
{ "api_key": "aB1cdeF-GJI23jble4NOH4", "id": "2GBe63fBcxgJAetmgZeh", "name": "logstash_api_key" }将您的新
api_key值输入到 Logstashbeats.conf文件中,格式为<id>:<api_key>。如果您的结果如图所示,则应输入2GBe63fBcxgJAetmgZeh:aB1cdeF-GJI23jble4NOH4。记得删除井号 (#) 以取消注释该行,并注释掉username和password行output { elasticsearch { index => "%{[@metadata][beat]}-%{[@metadata][version]}" cloud_id => "<myDeployment>" ilm_enabled => true api_key => "2GBe63fBcxgJAetmgZeh:aB1cdeF-GJI23jble4NOH4" # user => "<Username>" # password => "<Password>" } }
打开命令行界面实例,转到您的 Logstash 安装路径,并启动 Logstash
bin/logstash -f beats.conf打开第二个命令行界面实例,转到您的 Metricbeat 安装路径,并启动 Metricbeat
./metricbeat -c metricbeat.yml打开第三个命令行界面实例,转到您的 Filebeat 安装路径,并启动 Filebeat
./filebeat -c filebeat.yml现在,Logstash 将 Filebeat 和 Metricbeat 数据输出到您的 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署中。
在本指南中,您通过命令行界面手动启动了每个 Elastic 堆栈应用程序。在生产环境中,您可能更喜欢将 Logstash、Metricbeat 和 Filebeat 配置为作为系统服务运行。请查看以下页面了解将每个应用程序配置为作为服务运行的步骤
在本节中,您将登录到 Elastic Cloud Hosted 或 Elastic Cloud Enterprise,打开 Kibana,并查看填充了我们的 Metricbeat 和 Filebeat 数据的 Kibana 仪表板。
查看 Metricbeat 仪表板
- 登录到 Kibana.
- 打开 Kibana 主菜单,选择分析,然后选择仪表板。
- 在搜索框中搜索 metricbeat system。搜索结果显示了几个可供您探索的仪表板。
- 在搜索结果中,选择 [Metricbeat System] Overview ECS。将打开一个 Metricbeat 仪表板

查看 Filebeat 仪表板
- 打开 Kibana 主菜单,选择分析,然后选择仪表板。
- 在搜索框中搜索 filebeat system。
- 在搜索结果中,选择 [Filebeat System] Syslog dashboard ECS。将显示一个展示您的 Filebeat 数据的 Filebeat 仪表板

现在,您应该对如何配置 Logstash 以从多个 Beats 提取数据有了很好的理解。您已经具备了开始尝试您自己的 Beats 和模块组合所需的基石。