为 Logstash 输出配置 SSL/TLS
编辑为 Logstash 输出配置 SSL/TLS
编辑要安全地将数据从 Elastic Agent 发送到 Logstash,您需要配置传输层安全 (TLS)。使用 TLS 可确保您的 Elastic Agent 将加密数据发送到受信任的 Logstash 服务器,并且您的 Logstash 服务器接收来自受信任的 Elastic Agent 客户端的数据。
先决条件
编辑- 确保您的订阅级别支持输出到 Logstash。
- 在 Windows 上,将 Fleet Server 的端口 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 主机 下,指定您的 Agent 将用于连接到 Logstash 的主机和端口。使用
host:port
格式。 - 在 服务器 SSL 证书颁发机构 字段中,粘贴您之前生成的
ca.crt
文件的全部内容。 - 在 客户端 SSL 证书 字段中,粘贴您之前生成的
client.crt
文件的全部内容。 - 在 客户端 SSL 证书密钥 字段中,粘贴您之前生成的
client.key
文件的全部内容。
完成后,保存并应用设置。
在 Agent 策略中选择 Logstash 输出
编辑Logstash 现在正在侦听来自 Elastic Agent 的事件,但事件尚未流式传输到 Elasticsearch。您需要在 Agent 策略中选择 Logstash 输出。您可以编辑现有策略或创建新策略
-
在 Kibana 中,转到 Fleet > Agent 策略,然后创建新的 Agent 策略或单击现有策略以进行编辑
- 要更改新策略中的输出设置,请单击 创建 Agent 策略,然后展开 高级选项。
- 要更改现有策略中的输出设置,请单击该策略以进行编辑,然后单击 设置。
-
设置 集成输出 和(可选)Agent 监控输出 以使用您之前创建的 Logstash 输出。您可能需要向下滚动才能看到这些选项
- 保存您的更改。
注册到 Agent 策略的任何 Elastic Agent 都将开始通过 Logstash 将数据发送到 Elasticsearch。如果您没有任何已安装的 Elastic Agent 注册到 Agent 策略,请立即执行此操作。
当 Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 时,可能会有轻微的延迟。
测试连接
编辑要确保 Logstash 正在发送数据,请从运行 Logstash 的主机运行以下命令
curl -XGET localhost:9600/_node/stats/events
请求应返回有关传入和传出事件数量的统计信息。如果这些值为 0,请检查 Elastic Agent 日志是否存在问题。
当数据流式传输到 Elasticsearch 时,转到 可观测性,然后单击 指标 以查看有关您系统的指标。