为 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!

  1. 生成证书颁发机构 (CA)。如果您想使用现有的 CA,请跳过此步骤。

    ./bin/elasticsearch-certutil ca --pem

    此命令创建一个 zip 文件,其中包含您将用于对证书进行签名的 CA 证书和密钥。解压缩 zip 文件

    Screen capture of a folder called ca that contains two files: ca.crt and ca.key
  2. 生成由您的 CA 签名的客户端 SSL 证书。例如

    ./bin/elasticsearch-certutil cert \
      --name client \
      --ca-cert /path/to/ca/ca.crt \
      --ca-key /path/to/ca/ca.key \
      --pem

    解压缩 zip 文件

    Screen capture of a folder called client that contains two files: client.crt and client.key
  3. 生成由您的 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 文件

    Screen capture of a folder called logstash that contains two files: logstash.crt and logstash.key
  4. 将 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 中部署页面上显示的 cloud_id

在 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" 
  }
}

使用为 Elasticsearch 生成的证书。

要了解有关 Logstash 配置的更多信息,请参阅

完成管道配置后,重新启动 Logstash

bin/logstash

向 Fleet 添加 Logstash 输出编辑

本节介绍如何在 Fleet 中添加 Logstash 输出并配置 SSL 设置。如果您正在运行独立的 Elastic Agent,请参阅 Logstash 输出 配置文档。

  1. 在 Kibana 中,转到 Fleet > 设置
  2. 输出 下,单击 添加输出。如果您一直在 Fleet 中按照 Logstash 步骤操作,则您可能已在此页面上。
  3. 为输出指定一个名称。
  4. 对于 类型,选择 Logstash
  5. Logstash 主机 下,指定您的代理将用于连接到 Logstash 的主机和端口。使用 host:port 格式。
  6. 服务器 SSL 证书颁发机构 字段中,粘贴 之前生成ca.crt 文件的全部内容。
  7. 客户端 SSL 证书 字段中,粘贴之前生成的 client.crt 文件的全部内容。
  8. 客户端 SSL 证书密钥 字段中,粘贴之前生成的 client.key 文件的全部内容。
Screen capture of a folder called `logstash` that contains two files: logstash.crt and logstash.key

完成后,保存并应用设置。

在代理策略中选择 Logstash 输出编辑

Logstash 现在正在侦听来自 Elastic Agent 的事件,但事件尚未流式传输到 Elasticsearch。您需要在代理策略中选择 Logstash 输出。您可以编辑现有策略或创建新策略

  1. 在 Kibana 中,转到 Fleet > 代理策略 并创建新的代理策略或单击现有策略进行编辑

    • 要更改新策略中的输出设置,请单击 创建代理策略 并展开 高级选项
    • 要更改现有策略中的输出设置,请单击该策略进行编辑,然后单击 设置
  2. 设置 集成的输出 和(可选)代理监控的输出 以使用您之前创建的 Logstash 输出。您可能需要向下滚动才能看到这些选项

    Screen capture showing the Logstash output policy selected in an agent policy
  3. 保存您的更改。

注册到代理策略的任何 Elastic Agent 都将开始通过 Logstash 将数据发送到 Elasticsearch。如果您没有任何已安装的 Elastic Agent 注册到代理策略,请立即执行此操作。

Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 时,可能会略有延迟。

测试连接编辑

要确保 Logstash 正在发送数据,请从运行 Logstash 的主机运行以下命令

curl -XGET localhost:9600/_node/stats/events

该请求应返回有关传入和传出事件数量的统计信息。如果这些值为 0,请检查 Elastic Agent 日志以查找问题。

当数据流式传输到 Elasticsearch 时,请转到 可观测性 并单击 指标 以查看有关您系统的指标。