注意:

使用 Fluentd 将 Oracle Cloud Infrastructure 登录到 Elastic Cloud

简介

Oracle Cloud Infrastructure (OCI) 提供全面的日志记录功能,但将这些日志与 Elastic 等外部系统集成需要强大的日志传送器。有许多流行的开源数据收集器,使您能够统一数据收集和使用。

有关详细信息,请参阅:使用日志发件人将 Oracle Cloud Infrastructure 登录到第三方 SIEM 平台使用 Vector 将 Oracle Cloud Infrastructure 日志发送到 New Relic ,以确定最适合您的用例的解决方案。

在本教程中,我们将介绍使用 Fluentd 作为日志发送方将 OCI 日志摄取到 Elastic Cloud 的详细任务。

流动

Fluentd 是由 Treasure Data 开发的强大开源数据收集器,现在是 CNCF 的一部分,旨在简化跨多个系统的日志数据收集、转换和分发。它充当一个统一的日志记录层,收集来自不同来源的日志,使用解析器和过滤插件处理日志,并将其转发到 Elastic、Kafka 或云存储等目标。Fluentd 可以作为日志发货方部署在计算实例上,从 OCI Logging 服务捕获日志,并将其交付给 Elastic,以增强监视和分析能力。

一旦 Fluentd 将日志转发到 Elastic,日志数据的真正功能就会解锁。弹性安全索引并以结构化格式存储日志数据,支持强大的搜索、分析和可视化功能。利用 Elastic 的全文搜索引擎,用户可以实时查询和聚合日志,发现模式,识别异常,并生成具体可行的洞察。此外,借助 Kibana 等工具,可以通过交互式仪表盘对日志进行可视化,将原始日志数据转换为直观的可视化表示形式,从而帮助监视应用性能、检测安全威胁以及有效地排除运营问题。

让我们来看看解决方案体系结构的高级表示,如下图所示。

“编辑”按钮

目标

先决条件

任务 1:为日志流处理准备 OCI

  1. 在 OCI Logging 中启用日志

    对于本教程,我们将使用审计日志。您还可以根据您的用例启用服务或定制日志。有关更多信息,请参见 Logging Overview

  2. 创建流

    在 Fluentd 开始发送日志之前,数据需要一个一致的源。在 OCI 中,该源是与 Kafka 兼容的流。想象一下,将流设置为日志的集中数据管道。OCI 中从计算实例到网络服务的每个日志事件都可以定向到此流。这不仅可以整合日志数据,还可以确保 Fluentd 具有单个端点来提取数据。

    1. 要创建流,请参阅创建流

      “编辑”按钮

    2. 导航到 Stream Pool 并从流池中记下 Stream NameBootstrap Serverusername 并为用户生成 auth token 。有关更多信息,请参见 auth token

      我们将在 Fluentd 配置文件中需要所有这些文件。

      “编辑”按钮

  3. 创建 OCI Connector Hub

    OCI Connector Hub 作为编排器,将日志从各种服务路由到流。借助 OCI Connector Hub,您可以定义连接器,将日志从具有审计日志、服务日志和定制日志的 OCI 日志记录服务中移动,并将其定向到流。要创建连接器集线器,请输入以下信息。

    • 源:选择日志记录
    • 目标:选择流处理(选择在步骤 2 中创建的流)。
    • 选择自动创建策略以生成所需的 OCI IAM 策略。

    “编辑”按钮

    “编辑”按钮

    “编辑”按钮

    有关更多信息,请参见 Creating a Connector with a Logging Source

任务 2:安装和配置 Fluentd

随着流启动和运行,现在是设置 Fluentd 的时候了。此处的目的是在 OCI Compute 实例上部署 Fluentd,并将其配置为使用流中的日志。

为什么要使用 OCI Compute 实例?可以将其视为弥合 OCI 日志与 Elastic Cloud 之间的鸿沟的中介。Fluentd 将在其中运行、从流中摄取数据并将其中继到 Elastic。

通过 SSH 访问实例并使用 Treasure Data 程序包管理器安装 Fluentd。

curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-fluent-package5-lts.sh | sh

验证是否已安装 Fluentd 的版本。

fluentd --version

注:如果在 OCI 中启动计算实例,请确保禁用自定义日志的附加组件。

任务 3:将插件安装到 Kafka 和 Elasticsearch

现在 Fluentd 已经准备好了,它需要配备插件。在这个架构中,Fluentd 既是流数据的消费者,又是 Elasticsearch 的转发者。这需要安装两个密钥插件:

运行以下命令以安装两个插件。

fluent-gem install fluent-plugin-kafka fluent-plugin-elasticsearch

任务 4:使用 stdout 验证输出日志

在将日志转发到 Elasticsearch 之前,最好验证日志摄取流是否正常工作。这就是 stdout 进入的地方。在将数据发送到 Elastic 之前,它可确保数据从流中正确流动。

  1. 要实现这一点,请更新位于 /etc/fluent/fluentd.conf 的 Fluentd 配置。

    	<source>
    	@type kafka_group
    	brokers <stream_endpoint>:9092
    	topics <stream_topic>
    	format json
    	username <username>
    	password <password>
    	ssl_ca_cert /etc/fluent/kafka_chain.pem
    	sasl_over_ssl true
    	consumer_group fluentd-group
    	<parse>
    		@type json
    	</parse>
    	</source>
    
    	<match **>
    	@type stdout
    	</match>
    
  2. 相应地将 <stream_endpoint><stream_topic> 替换为 bootstrap serverstream name 。此外,将 <username><password> 替换为任务 1.2 中收集的 OCI 中的 Kafka 连接设置中的详细信息。用户名也需要附加域,如 <tenancy_name>/<domain_name>/<username>/ocid1.streampool.oc1.##############

    注:

    • ssl_ca_cert 应是 PEM 格式的完整证书链,其中应包括服务器证书 (OCI Streaming certs)、中间证书和根证书。

    • 要与 OCI Streaming 建立可信的 TLS 连接,请首先使用 openssl 命令提取服务器和中间证书:openssl s_client -showcerts -connect cell-1.streaming.us-ashburn-1.oci.oraclecloud.com:9092 -servername cell-1.streaming.us-ashburn-1.oci.oraclecloud.com < /dev/null | \\nsed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > kafka_chain.pem

    • 这将证书链保存到名为 kafka_chain.pem 的文件。接下来,从 DigiCert Root Certificates 页面以 PEM 格式下载 OCI Streaming 使用的可信根证书 DigiCert Global Root G2,并将其另存为 root.pem。最后,使用 cat root.pem >> kafka_chain.pem 命令将根证书附加到链文件中。

    • 这导致 kafka_chain.pem 中有一个完整的证书链,可供 TLS 客户端使用,以实现与 OCI Streaming 的安全连接。

  3. 运行以下命令以启动 Fluentd 并监视输出。

    $ sudo systemctl restart fluentd.service
    $ sudo systemctl status fluentd.service
    $ sudo cat /var/log/fluent/fluentd.log
    

如果一切正常,流中的日志将开始显示在 Fluentd 日志中。这可确保数据管道在向前移动之前按预期运行。

任务 5:将日志转发到弹性云

通过管道验证,是时候重新配置 Fluentd 将日志转发到 Elastic Cloud。此任务将 Fluentd 从简单的日志使用者转换为成熟的日志发送者。

  1. 更新配置以包括 Elastic 输出插件。

    <source>
      @type kafka_group
      brokers <stream_endpoint>:9092
      topics <stream_topic>
      format json
      username <tenancy_name>/<domain_name>/<username>/ocid1.streampool.oc1.iad.##########
      password <password>
      ssl_ca_cert /etc/fluent/kafka_chain.pem
      sasl_over_ssl true
      consumer_group fluentd-group
    </source>
    
    <match **>
      @type elasticsearch
      cloud_id ###########
      cloud_auth 'elastic:##########'
      logstash_prefix fluentd
      logstash_format true
      index_name fluentd
    </match>
    

    注:云 ID 是分配给弹性云上托管的 Elasticsearch 集群的唯一 ID。所有部署都将自动获得云 ID。要查找弹性用户的云 ID密码,请参阅查找云 ID

  2. 重新启动 Fluentd 以应用更改。

    sudo systemctl restart fluentd.service
    

任务 6:在 Elasticsearch 中验证和解锁洞察

日志已成功流式传输到 Elastic,数据被索引和结构化,以实现高效查询。Elastic 的全文搜索引擎可让您实时搜索、聚合和可视化数据。

创建数据视图至关重要。此数据视图用作组织日志数据的结构化层,使您能够无缝地探索和提取有价值的洞察。有关详细信息,请参阅数据视图

“编辑”按钮

“编辑”按钮

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心