为 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 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 Hosted 所需的配置与自管 Elasticsearch 集群的配置不同。如果您复制了 Fleet 中显示的配置,请根据需要进行调整。
Elastic Cloud Hosted 示例
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 中部署页面上显示的
cloud_id
。 - 在 Fleet 中,您在添加 Logstash 输出时可以生成此 API 密钥。
- Elastic Cloud Hosted 使用标准的公开可信证书,因此无需在此处指定其他 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"
}
}
- 使用为 Elasticsearch 生成的证书。
要了解有关 Logstash 配置的更多信息,请参阅:
配置完管道后,重启 Logstash。
bin/logstash
本节介绍如何在 Fleet 中添加 Logstash 输出并配置 SSL 设置。如果您运行的是独立的 Elastic Agent,请参阅Logstash 输出配置文档。
- 在 Kibana 中,前往Fleet > Settings。
- 在Outputs下,点击Add output。如果您一直在遵循 Fleet 中 Logstash 的步骤,您可能已经在此页面上。
- 为输出指定一个名称。
- 对于类型,选择Logstash。
- 在Logstash hosts下,指定您的代理将用于连接到 Logstash 的主机和端口。使用
host:port
格式。 - 在Server SSL certificate authorities字段中,粘贴您之前生成的
ca.crt
文件的全部内容。 - 在Client SSL certificate字段中,粘贴您之前生成的
client.crt
文件的全部内容。 - 在Client SSL certificate key字段中,粘贴您之前生成的
client.key
文件的全部内容。

完成后,保存并应用设置。
Logstash 现在正在监听来自 Elastic Agent 的事件,但事件尚未流式传输到 Elasticsearch。您需要在代理策略中选择 Logstash 输出。您可以编辑现有策略或创建新策略:
在 Kibana 中,前往Fleet > Agent policies,然后创建新的代理策略或点击现有策略进行编辑。
- 要在新策略中更改输出设置,请点击Create agent policy并展开Advanced options。
- 要在现有策略中更改输出设置,请点击该策略进行编辑,然后点击Settings。
将Output for integrations和(可选)Output for agent monitoring设置为使用您之前创建的 Logstash 输出。您可能需要向下滚动才能看到这些选项:
保存您的更改。
任何已在该代理策略中注册的 Elastic Agent 都将开始通过 Logstash 向 Elasticsearch 发送数据。如果您还没有已安装的 Elastic Agent 注册到该代理策略,请立即进行注册。
Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 可能稍有延迟。
为了确保 Logstash 正在发送数据,请在运行 Logstash 的主机上运行以下命令:
curl -XGET localhost:9600/_node/stats/events
该请求应返回事件进出的统计信息。如果这些值为 0,请检查 Elastic Agent 日志以查找问题。
当数据流式传输到 Elasticsearch 后,前往Observability并点击Metrics以查看有关您系统的指标。