注:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费层。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室后,请使用特定于您的云环境的这些值替换这些值。
将日志从 Oracle Cloud Infrastructure 移至 Sumo Logic
简介
Oracle Cloud 可观察性和可管理性平台旨在向现有客户提供有力支持。我们知道,他们已经使用流行的第三方观察工具使他们的运营状况标准化,我们希望能够与这些工具互操作,以便我们的客户可以继续使用他们在 Oracle Cloud Infrastructure (OCI) 中投入使用的工具。
在此教程中,我们将介绍如何将日志从 OCI 迁移到 Sumo Logic。Sumo Logic 是一个流行的监测工具,它提供监视和安全服务来充分了解您的应用。
我们的解决方案架构概要如下所示:

在 Sumo Logic 中创建定制 HTTP 源收集器
在 Sumo Logic 账户中,您需要创建 HTTP 定制收集器应用程序,如下面的步骤中所述。
-
单击 Setup Wizard(设置向导)。

-
单击开始将数据流处理到 Sumo Logic。

-
单击您的自定义应用程序。

-
单击 HTTPS Source。

-
按如下所示配置 HTTP 源。
注意:HTTP 源是一个元数据标记,它与摄取日志一起存储,在以后在 Sumo Logic 中搜索和筛选日志时非常有用。我们将摄取的每个日志行将从其事件发生的时间戳开始,因此选择选项使用日志文件中的时区。

当您转到下一个屏幕时,我们会使用 POST HTTP 调用从 OCI 上载日志的 HTTPS 端点。请注意此端点,因为我们将配置函数以使用此端点将日志上载到 Sumo Logic。

配置要捕获的日志
您可以将任何日志设置为服务连接器中心的输入,从而摄取到 Sumo Logic。为了简化本教程,我们将捕获 Oracle Cloud Infrastructure (OCI) 生成的日志,以便将事件写入到您选择的任意存储桶。
-
在 Oracle Cloud 控制台中,单击导航菜单,选择日志记录,然后选择日志组。

-
要创建日志组,请单击创建日志组。

-
选择您的区间,为名称添加 LogGroupForBucketActivity 并添加说明。单击创建。

-
从日志记录菜单中选择日志。此时将显示类似下面的屏幕。

-
单击启用服务日志并输入以下信息:
- 服务:选择对象存储
- 资源:选择您希望看到的任意存储桶(例如 BucketForSumoLogic)。
- 日志类别:选择写入访问事件
- 日志名:输入日志的名称,例如
logForBucketActivity。 - 日志组:为刚才在上一步中创建的日志选择 LogGroupForBucketActivity 日志组
-
单击 Enable Log(启用日志)。

现在,每次对象上载到 BucketForSumoLogic 存储桶时,都会向 logForBucketActivity 日志添加一个日志条目。
配置 Oracle Functions 以将日志摄取到 Sumo Logic
-
在 Oracle Cloud 控制台中,单击导航菜单并选择解决方案和平台。选择开发人员服务菜单下的函数。
-
单击创建应用程序并输入名称,例如 SumoLogicFnApp。

-
创建应用程序后,单击应用程序名称并从资源菜单中选择入门。

-
启动 Cloud Shell。
-
使用区域的上下文。
fn list context fn use context us-ashburn-1 -
使用函数的区间 ID 更新上下文。
fn update context oracle.compartment-id <compartment-id> -
使用要使用的注册表的位置更新上下文。
fn update context registry iad.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]将
iad替换为区域的三位数区域代码。 -
假设您已经创建了 Auth 令牌,请使用 Auth 令牌作为密码登录注册表。
docker login iad.ocir.io将
iad替换为区域的三位数区域代码。系统将提示您输入以下信息:
- 用户名:<tenancyname>/<username>
- 密码:创建密码
注意:如果您使用的是 Oracle Identity Cloud Service,您的用户名是 <tenancyname>/oracleidentitycloudservice/<username>。
通过列出区间中的应用程序验证设置。
fn list apps -
生成“hello-world”样板函数。
fn init --runtime python sumologicfnfn init 命令将生成一个名为 SumoLogicfn 的文件夹,其中三个文件位于 func.py、func.yaml 和 requirements.txt 中。
打开 func.py 并使用以下代码替换文件的内容。
-
导入必需的 Python 模块,如以下代码片段中所示。
import io import json import logging import os import requests from fdk import response -
定义用于对日志数据进行语法分析的函数并调用 Sumo Logic API 以摄取日志。
# This method is the entrypoint for your Function invokation # aka the method invoked by the OCI Fn platform # it will receive the list of log entries from OCI as input in the form of bytestream # the method name will be defined in func.yml def handler(ctx, data: io.BytesIO = None): logger = logging.getLogger() logger.info("function start") # Sumologic endpoint URL to upload OCI logs to HTTP custom app. # this value will be defined defined in func.yaml sumologic_endpoint = os.environ['SUMOLOGIC_ENDPOINT']有关 Oracle Cloud Infrastructure Logging 服务生成的日志的格式的信息,请参阅日志记录格式概述。
-
从 sumologicfn 函数接收的服务连接器中心检索日志条目作为其调用有效负载。逐个循环访问这些日志条目和日志行。
try: logentries = json.loads(data.getvalue()) # deserialize the bytesstream input as JSON array if not isinstance(logentries, list): logger.error('Invalid connector payload. No log queries detected') raise # Optional...log the input to the function as human readble JSON. # Not to be used in production logger.info("json input from SCH") logger.info(data.getvalue()) for logEntry in logentries: logger.info("Extracting/Parse log details from the log entry json") event_name = logEntry["data"]["requestResourcePath"] + '\t' time_of_event = logEntry["time"] + '\t' cmpt_name = logEntry["data"]["compartmentName"] + '\t' bucket_namespace = logEntry["data"]["namespaceName"] + '\t' bucket_name = logEntry["data"]["bucketName"] + '\t' request_action = logEntry["data"]["requestAction"] log_line = time_of_event + event_name + cmpt_name + \ bucket_namespace + bucket_name + request_action # Call the Sumologic with the payload and ingest the OCI logs headers = {'Content-type': 'text/plain'} response_from_sumologic = requests.post(sumologic_endpoint, data=log_line, headers=headers) logging.getLogger().info(response_from_sumologic.text) logger.info("function end") return except Exception as e: logger.error("Failure in the function: {}".format(str(e))) raise
-
-
按如下方式替换 func.yml 内容。确保您为上一步中获得的 SumoLogic_ENDPOINT 提供了值。
schema_version: 20180708 name: sumologicfn version: 0.0.1 runtime: python entrypoint: /python/bin/fdk /function/func.py handler memory: 1024 timeout: 120 config: SUMOLOGIC_ENDPOINT: [YOUR SUMOLOGIC API ENDPOINT URL HERE] -
按如下方式替换 requirements.txt 内容。
fdk requests -
部署您的函数。
fn -v deploy --app sumologicFnApp --no-bump -
(可选)可以使用示例输入测试 SumoLogicfn 函数,如下所示:
curl -O https://raw.githubusercontent.com/mayur-oci/sumologicfn/main/example.json fn invoke sumologicFnApp sumologicfn < example.json
创建服务连接器以从日志记录读取日志并触发函数
-
在 Oracle Cloud 控制台中,单击导航菜单,然后选择解决方案和平台。在 Logging(日志记录)菜单下选择 Service Connectors(服务连接器)。
-
单击创建连接器,然后从源下拉列表中选择日志记录,然后从函数下拉列表中选择目标。
-
在配置源连接上,选择区间名称、LogGroupForBucketActivity 日志组和 logForBucketActivity 日志。
-
如果要使用审计日志,请单击 +Another log,选择区间并为日志组添加 _Audit。

-
如果提示创建用于写入函数的策略,请单击创建。
现在已设置服务连接器,并且每次在日志记录服务中找到日志时都将触发函数将日志摄取到 Sumo Logic。
在 Sumo Logic 中直观显示 Oracle Cloud Infrastructure 日志
-
在 Sumo Logic 中,选择源 - 定制应用程序菜单以查看使用 SumoLogicfn 函数从 Oracle Cloud Infrastructure (OCI) 中摄取的日志。

故障排除
本节说明如何使用简单的电子邮件警报监视解决方案的状态。
有关更多信息,请参见Overview of Functions。
为通知服务创建主题和订阅
-
在 Oracle Cloud 控制台中,从左上角的导航菜单中,选择应用程序集成,然后选择通知。
-
单击创建主题,然后创建名为 my_function_status 的主题。
-
选择您的主题,单击创建订阅并使用以下示例:
- 协议:通过电子邮件和电子邮件添加创建订阅。
-
订阅将创建为“待定”状态。您将收到一封确认电子邮件,需要单击电子邮件中的链接来确认您的电子邮件地址。
检查度量并从度量创建预警定义
-
从左上角的导航菜单中,选择开发人员服务,然后选择函数。
-
选择要监视的应用程序和功能。
-
从“度量”页面中,转到函数错误图表,单击选项,然后单击在此查询中创建预警。
-
添加名称并在通知下选择目标服务作为通知服务,选择 your_compartment,然后选择主题作为 my_function_status。
监视状态服务连接器中心
本节说明如何使用简单的电子邮件警报监视服务连接器中心 (Service Connector Hub, SCH) 的状态。
有关更多详细信息,请参阅Service Connector Hub Overview。
为通知服务创建主题和订阅
-
从左上角的导航菜单中,选择应用程序集成,然后选择通知。
-
单击创建主题并使用 my_sch_status 名称创建主题。
-
选择您的主题,单击创建订阅并使用以下示例:
- 协议:通过电子邮件和电子邮件添加创建订阅
-
订阅将创建为“待定”状态。您将收到一封确认电子邮件,需要单击电子邮件中的链接来确认您的电子邮件地址。
检查度量并从度量创建预警定义
-
从左上角的导航菜单中,选择 Logging(日志记录),然后选择 Service Connectors(服务连接器)。
-
选择要监视的连接器,然后从左侧导航面板的资源列表中选择度量。
-
从要将预警添加到的度量图表中,例如“服务连接器中心错误”,单击选项和在此查询中创建预警。
-
添加名称并在通知下选择目标服务作为通知服务,选择 your_compartment,然后选择主题作为 my_sch_status。
结论
此教程演示了 Oracle Cloud Infrastructure 和 Sumo Logic 客户如何通过低开销配置高度可扩展的解决方案,以使用服务连接器中心和 Oracle Functions 将日志从 Oracle Cloud Infrastructure Logging 迁移到 Sumo Logic。
致谢
- 作者 - 解决方案架构师 Mayur Raleraskar
更多学习资源
在 docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 渠道上访问更多免费学习内容。此外,访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Move logs from Oracle Cloud Infrastructure into Sumo Logic
F50474-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.