在 Elastic Agent 中为 Logstash 输出配置 SSL/TLS

要将数据从 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"。

  1. 在 Kibana 中,转到 Fleet > Settings
  2. Output 下,单击 Add output。 如果你一直在 Fleet 中执行 Logstash 步骤,那么你可能已经位于此页面上。
  3. 指定输出的名称。
  4. 对于 Type ,选择 Logstash
  5. 在 Logstash 主机下,指定代理将用于连接 Logstash 的主机和端口。 使用格式 host:port。格式有点类似 mylogstashhost:5044。参考[链接](https://www.elastic.co/guide/en/fleet/8.12/ls-output-settings.html "链接")
  6. Server SSL certificate authorities 字段中,粘贴你之前生成的 ca.crt 文件的全部内容。
  7. Client SSL certificate 字段中,粘贴你之前生成的 client.crt 文件的全部内容。
  8. 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

相关推荐
-曾牛10 小时前
Git Flow
大数据·git·学习·elasticsearch·个人开发
Zfox_10 小时前
Git 进阶之路:高效协作之分支管理
大数据·linux·运维·c++·git·elasticsearch
liuluyang53014 小时前
linux 4.14内核jffs2文件系统不自动释放空间的bug
linux·elasticsearch·bug·jffs2
007php00714 小时前
Docker Compose 安装Elasticsearch8和kibana和mysql8和redis5 并重置密码的经验与总结
大数据·运维·elasticsearch·搜索引擎·docker·容器·jenkins
Elasticsearch16 小时前
使用 LlamaIndex Workflows 与 Elasticsearch
elasticsearch
Ai 编码助手1 天前
Elasticsearch插件:IDEA中的Elasticsearch开发利器
elasticsearch·jenkins·intellij-idea
真的睡不醒ovo1 天前
elasticsearch中文分词器插件下载教程
大数据·elasticsearch·中文分词
极小狐1 天前
极狐GitLab 项目 API 的速率限制如何设置?
大数据·运维·git·elasticsearch·gitlab
残月只会敲键盘1 天前
Git 命令速查手册
大数据·git·elasticsearch
苍煜2 天前
IDEA在Git提交时添加.ignore忽略文件,解决为什么Git中有时候使用.gitignore也无法忽略一些文件
git·elasticsearch·intellij-idea