要将数据从 Elastic Agent 安全地发送到 Logstash,你需要配置传输层安全性 (TLS)。 使用 TLS 可确保你的 Elastic Agent 将加密数据发送到受信任的 Logstash 服务器,并且你的 Logstash 服务器从受信任的 Elastic Agent 客户端接收数据。
先决条件
- 确保你的订阅级别支持输出到 Logstash。
- 在 Windows 上,将队列服务器的端口 8220 和 Logstash 的端口 5044 添加到 Windows 高级防火墙的入站端口规则。
- 如果你要连接到自托管的 Elasticsearch 集群,则需要用于签署 Elasticsearch 集群 HTTP 层证书的 CA 证书。 有关更多信息,请参阅 Elasticsearch 安全文档。
生成自定义证书和私钥
你可以使用通常使用的任何过程来生成 PEM 格式的证书。 此处显示的示例使用 Elasticsearch 提供的 certutil 工具。
提示 :certutil 工具在 Elastic Cloud 上不可用,但你仍然可以使用它为 Elastic Agent 到 Logstash 连接生成证书。 只需下载 Elasticsearch 包,将其解压到本地目录,然后运行 elasticsearch-certutil 命令。 无需启动 Elasticsearch!
1. 生成证书颁发机构 (CA)。 如果你想使用现有的 CA,请跳过此步骤。
bash
./bin/elasticsearch-certutil ca --pem
此命令创建一个 zip 文件,其中包含 CA 证书和用于签署证书的密钥。 解压 zip 文件:
2. 生成由你的 CA 签名的客户端 SSL 证书。 例如:
css
1. ./bin/elasticsearch-certutil cert \
2. --name client \
3. --ca-cert /path/to/ca/ca.crt \
4. --ca-key /path/to/ca/ca.key \
5. --pem
解压 zip 文件:
3. 生成由你的 CA 签名的 Logstash SSL 证书。 例如:
css
1. ./bin/elasticsearch-certutil cert \
2. --name logstash \
3. --ca-cert /path/to/ca/ca.crt \
4. --ca-key /path/to/ca/ca.key \
5. --dns your.host.name.here \
6. --ip 192.0.2.1 \
7. --pem
解压 zip 文件:
4. 将 Logstash 密钥转换为 pkcs8。 例如,在 Linux 上运行:
vbnet
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 文件并添加以下配置。 替换你的文件的路径。
lua
1. - pipeline.id: elastic-agent-pipeline
2. path.config: "/etc/path/to/elastic-agent-pipeline.conf"
在 elastic-agent-pipeline.conf 文件中,添加管道配置。 请注意,Elastic Cloud 上的 Elasticsearch 服务所需的配置与自管理 Elasticsearch 集群不同。 如果你复制了 Fleet 中显示的配置,请根据需要进行调整。
Elasticsearch 服务示例:
elastic-agent-pipeline.conf
ini
1. input {
2. elastic_agent {
3. port => 5044
4. ssl => true
5. ssl_certificate_authorities => ["/path/to/ca.crt"]
6. ssl_certificate => "/path/to/logstash.crt"
7. ssl_key => "/path/to/logstash.pkcs8.key"
8. ssl_verify_mode => "force_peer"
9. }
10. }
12. output {
13. elasticsearch {
14. cloud_id => "xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx="
15. api_key => "xxxx:xxxx"
16. data_stream => true
17. ssl => true
18. }
19. }
- 使用 Elastic Cloud 中的部署页面上显示的 cloud_id。
- 在 Fleet 中,你可以在添加 Logstash 输出时生成此 API 密钥。
- Elasticsearch Service 使用标准的公共信任证书,因此无需在此处指定其他 SSL 设置。
自托管的 Elasticsearch 集群示例:
elastic-agent-pipeline.conf
ini
1. input {
2. elastic_agent {
3. port => 5044
4. ssl => true
5. ssl_certificate_authorities => ["/path/to/ca.crt"]
6. ssl_certificate => "/path/to/logstash.crt"
7. ssl_key => "/path/to/logstash.pkcs8.key"
8. ssl_verify_mode => "force_peer"
9. }
10. }
12. output {
13. elasticsearch {
14. hosts => "https://xxxx:9200"
15. api_key => "xxxx:xxxx"
16. data_stream => true
17. ssl => true
18. cacert => "/path/to/http_ca.crt"
19. }
20. }
- 使用为 Elasticsearch 生成的证书。
要了解有关 Logstash 配置的更多信息,请参阅:
完成管道配置后,重新启动 Logstash:
bash
bin/logstash
将 Logstash 输出添加到 Fleet
本节介绍如何在 Fleet 中添加 Logstash 输出并配置 SSL 设置。 如果你独立运行 Elastic Agent,请参阅 Logstash 输出配置文档。你也可以阅读文章 "Observability:如何把 Elastic Agent 采集的数据输入到 Logstash 并最终写入到 Elasticsearch"。
- 在 Kibana 中,转到 Fleet > Settings。
- 在 Output 下,单击 Add output。 如果你一直在 Fleet 中执行 Logstash 步骤,那么你可能已经位于此页面上。
- 指定输出的名称。
- 对于 Type ,选择 Logstash。
- 在 Logstash 主机下,指定代理将用于连接 Logstash 的主机和端口。 使用格式 host:port。格式有点类似
mylogstashhost:5044。参考[链接](https://www.elastic.co/guide/en/fleet/8.12/ls-output-settings.html "链接")
- 在 Server SSL certificate authorities 字段中,粘贴你之前生成的 ca.crt 文件的全部内容。
- 在 Client SSL certificate 字段中,粘贴你之前生成的 client.crt 文件的全部内容。
- 在 Client SSL certificate key 字段中,粘贴你之前生成的 client.key 文件的全部内容。
完成后,保存并应用设置。
在代理策略中选择 Logstash 输出
Logstash 现在正在侦听来自 Elastic Agent 的事件,但事件尚未流入 Elasticsearch。 你需要在代理策略中选择 Logstash 输出。 你可以编辑现有策略或创建新策略:
1)在 Kibana 中,转到 Fleet > Agent policies,然后创建新的代理策略或单击现有策略进行编辑:
- 要更改新策略中的输出设置,请单击 Create agent policy 并展开 Advanced options。
- 要更改现有策略中的输出设置,请单击该策略进行编辑,然后单击 Settings。
2)设置 Output for integrations 及(可选)Output for agent monitoring 以使用你之前创建的 Logstash 输出。 你可能需要向下滚动才能看到这些选项:
3)保存你的更改。
任何在 agent policy 中注册的 Elastic Agent 都将开始通过 Logstash 向 Elasticsearch 发送数据。 如果你没有在 agent policy 中注册任何已安装的 Elastic Agent,请立即执行此操作。
Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 时可能会出现轻微延迟。
测试连接
要确保 Logstash 正在发送数据,请从运行 Logstash 的主机运行以下命令:
bash
curl -XGET localhost:9600/_node/stats/events
该请求应返回有关输入和输出事件数量的统计信息。 如果这些值为 0,请检查 Elastic Agent 日志是否存在问题。
当数据流式传输到 Elasticsearch 时,转到 Observability 并单击指标以查看有关系统的 Metrics。
更多阅读:Observability:如何把 Elastic Agent 采集的数据输入到 Logstash 并最终写入到 Elasticsearch