为 Logstash 输出配置 SSL/TLS
编辑为 Logstash 输出配置 SSL/TLS编辑
要将数据从 Elastic Agent 安全地发送到 Logstash,您需要配置传输层安全 (TLS)。使用 TLS 可确保您的 Elastic Agent 将加密数据发送到受信任的 Logstash 服务器,并且您的 Logstash 服务器从受信任的 Elastic Agent 客户端接收数据。
先决条件编辑
- 确保您的 订阅级别 支持输出到 Logstash。
- 在 Windows 上,将 Fleet 服务器的端口 8220 和 Logstash 的端口 5044 添加到 Windows 高级防火墙中的入站端口规则。
- 如果您要连接到自管 Elasticsearch 集群,则需要用于为 Elasticsearch 集群的 HTTP 层的证书签名的 CA 证书。有关更多信息,请参阅 Elasticsearch 安全文档。
生成自定义证书和私钥编辑
您可以使用通常用于生成 PEM 格式证书的任何流程。此处显示的示例使用 Elasticsearch 提供的 certutil
工具。
certutil
工具在 Elastic Cloud 上不可用,但您仍然可以使用它为 Elastic Agent 到 Logstash 的连接生成证书。只需 下载 Elasticsearch 软件包,将其解压缩到本地目录,然后运行 elasticsearch-certutil
命令。无需启动 Elasticsearch!
-
生成证书颁发机构 (CA)。如果您想使用现有的 CA,请跳过此步骤。
./bin/elasticsearch-certutil ca --pem
此命令创建一个 zip 文件,其中包含您将用于对证书进行签名的 CA 证书和密钥。解压缩 zip 文件
-
生成由您的 CA 签名的客户端 SSL 证书。例如
./bin/elasticsearch-certutil cert \ --name client \ --ca-cert /path/to/ca/ca.crt \ --ca-key /path/to/ca/ca.key \ --pem
解压缩 zip 文件
-
生成由您的 CA 签名的 Logstash SSL 证书。例如
./bin/elasticsearch-certutil cert \ --name logstash \ --ca-cert /path/to/ca/ca.crt \ --ca-key /path/to/ca/ca.key \ --dns your.host.name.here \ --ip 192.0.2.1 \ --pem
解压缩 zip 文件
-
将 Logstash 密钥转换为 pkcs8。例如,在 Linux 上运行
openssl pkcs8 -inform PEM -in logstash.key -topk8 -nocrypt -outform PEM -out logstash.pkcs8.key
将这些文件存储在安全的位置。
配置 Logstash 管道编辑
如果您已经创建了 Logstash elastic-agent-pipeline.conf
管道并将其添加到 pipelines.yml
,请跳至示例配置并根据需要修改您的管道配置。
在您的 Logstash 配置目录中,打开 pipelines.yml
文件并添加以下配置。替换为您文件的路径。
- pipeline.id: elastic-agent-pipeline path.config: "/etc/path/to/elastic-agent-pipeline.conf"
在 elastic-agent-pipeline.conf
文件中,添加管道配置。请注意,Elastic Cloud 上的 Elasticsearch Service 所需的配置与自管 Elasticsearch 集群不同。如果您复制了 Fleet 中显示的配置,请根据需要进行调整。
Elasticsearch Service 示例
input { elastic_agent { port => 5044 ssl_enabled => true ssl_certificate_authorities => ["/path/to/ca.crt"] ssl_certificate => "/path/to/logstash.crt" ssl_key => "/path/to/logstash.pkcs8.key" ssl_client_authentication => "required" } } output { elasticsearch { cloud_id => "xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=" api_key => "xxxx:xxxx" data_stream => true ssl => true } }
使用 Elastic Cloud 中部署页面上显示的 |
|
在 Fleet 中,您可以在添加 Logstash 输出时生成此 API 密钥。 |
|
Elasticsearch Service 使用标准的公开受信任证书,因此无需在此处指定其他 SSL 设置。 |
自管 Elasticsearch 集群示例
input { elastic_agent { port => 5044 ssl_enabled => true ssl_certificate_authorities => ["/path/to/ca.crt"] ssl_certificate => "/path/to/logstash.crt" ssl_key => "/path/to/logstash.pkcs8.key" ssl_client_authentication => "required" } } output { elasticsearch { hosts => "https://xxxx:9200" api_key => "xxxx:xxxx" data_stream => true ssl => true cacert => "/path/to/http_ca.crt" } }
要了解有关 Logstash 配置的更多信息,请参阅
完成管道配置后,重新启动 Logstash
bin/logstash
向 Fleet 添加 Logstash 输出编辑
本节介绍如何在 Fleet 中添加 Logstash 输出并配置 SSL 设置。如果您正在运行独立的 Elastic Agent,请参阅 Logstash 输出 配置文档。
- 在 Kibana 中,转到 Fleet > 设置。
- 在 输出 下,单击 添加输出。如果您一直在 Fleet 中按照 Logstash 步骤操作,则您可能已在此页面上。
- 为输出指定一个名称。
- 对于 类型,选择 Logstash。
- 在 Logstash 主机 下,指定您的代理将用于连接到 Logstash 的主机和端口。使用
host:port
格式。 - 在 服务器 SSL 证书颁发机构 字段中,粘贴 之前生成 的
ca.crt
文件的全部内容。 - 在 客户端 SSL 证书 字段中,粘贴之前生成的
client.crt
文件的全部内容。 - 在 客户端 SSL 证书密钥 字段中,粘贴之前生成的
client.key
文件的全部内容。
完成后,保存并应用设置。
在代理策略中选择 Logstash 输出编辑
Logstash 现在正在侦听来自 Elastic Agent 的事件,但事件尚未流式传输到 Elasticsearch。您需要在代理策略中选择 Logstash 输出。您可以编辑现有策略或创建新策略
-
在 Kibana 中,转到 Fleet > 代理策略 并创建新的代理策略或单击现有策略进行编辑
- 要更改新策略中的输出设置,请单击 创建代理策略 并展开 高级选项。
- 要更改现有策略中的输出设置,请单击该策略进行编辑,然后单击 设置。
-
设置 集成的输出 和(可选)代理监控的输出 以使用您之前创建的 Logstash 输出。您可能需要向下滚动才能看到这些选项
- 保存您的更改。
注册到代理策略的任何 Elastic Agent 都将开始通过 Logstash 将数据发送到 Elasticsearch。如果您没有任何已安装的 Elastic Agent 注册到代理策略,请立即执行此操作。
Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 时,可能会略有延迟。
测试连接编辑
要确保 Logstash 正在发送数据,请从运行 Logstash 的主机运行以下命令
curl -XGET localhost:9600/_node/stats/events
该请求应返回有关传入和传出事件数量的统计信息。如果这些值为 0,请检查 Elastic Agent 日志以查找问题。
当数据流式传输到 Elasticsearch 时,请转到 可观测性 并单击 指标 以查看有关您系统的指标。