備註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier。
- 此範例使用 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 自訂收集器應用程式,如下方步驟所述。
-
按一下設定精靈。
-
按一下開始串流資料至 Sumo Logic。
-
按一下您的自訂 App。
-
按一下 HTTPS 來源。
-
設定您的 HTTP 來源,如下所示。
注意:HTTP 來源是描述資料標記,儲存在已擷取日誌中,日後在 Sumo Logic 中搜尋及篩選日誌時很有用。我們要擷取的每個日誌行都會以事件發生的時間戳記開始,因此請選取使用日誌檔中的時區選項。
當您移至下一個畫面時,我們會使用 POST HTTP 呼叫,從 OCI 取得日誌上傳的 HTTPS 端點。請特別注意此端點,因為我們會設定此端點的函數,以將日誌上傳至 Sumo Logic。
設定要擷取的日誌
您可以將任何日誌設為「服務連線器中心」的輸入,然後擷取至 Sumo Logic。為了簡化此教學課程,我們將擷取 Oracle Cloud Infrastructure (OCI) 產生的日誌,以防禦您選擇的任意儲存桶。
-
在 Oracle Cloud 主控台中,按一下導覽功能表,選取記錄日誌,然後選取日誌群組。
-
若要建立日誌群組,請按一下建立日誌群組。
-
選取區間,為名稱新增 LogGroupForBucketActivity 並新增描述。按一下建立。
-
從記錄日誌功能表中選取日誌。您將會看到類似下方的畫面。
-
按一下啟用服務日誌並輸入下列資訊:
- 服務:選取物件儲存
- 資源:選擇要觀測日誌的任意儲存桶 (例如 BucketForSumoLogic)。
- 日誌類別:選取寫入存取事件
- 日誌名稱:輸入日誌的名稱,例如
logForBucketActivity
。 - 日誌群組:為剛於上一個步驟建立的日誌選取 LogGroupForBucketActivity 日誌群組
-
按一下啟用日誌。
現在每次將物件上傳到 BucketForSumoLogic 儲存桶時,就會將日誌項目新增至 logForBucketActivity 日誌。
設定將日誌擷取至 Sumo Logic 的 Oracle Functions
-
在 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
取代為您區域的三位數區域碼。 -
假設您已經建立認證權杖,請使用認證權杖以您的密碼身分登入登錄。
docker login iad.ocir.io
將
iad
取代為您區域的三位數區域碼。會提示您輸入下列資訊:
- 使用者名稱:<tenancyname>/<username>
- 密碼:建立密碼
注意:如果您使用 Oracle Identity Cloud Service,您的使用者名稱為 <tenancyname>/oracleidentitycloudservice/<username>。
列出區間中的應用程式來檢查您的設定。
fn list apps
-
產生 'hello-world「 樣板函數。
fn init --runtime python sumologicfn
fn 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 主控台中,按一下導覽功能表,然後選取解決方案與平台。選取記錄日誌功能表下的服務連線器。
-
按一下建立連線器,然後從來源下拉式清單中選取記錄日誌,然後從函數下拉式清單中選取目標。
-
在設定來源連線中,選取您的區間名稱、您的 LogGroupForBucketActivity 日誌群組,以及您的 logForBucketActivity 日誌。
-
如果要使用稽核日誌,請按一下 +Another 日誌,選擇區間,並為日誌群組新增 _Audit。
-
如果提示建立寫入 Functions 的原則,請按一下建立。
「服務連線器」現在已設定,並且會在每次在「日誌記錄」服務中找到日誌時,觸發函數將日誌擷取至 Sumo Logic。
在 Sumo Logic 中視覺化 Oracle Cloud Infrastructure 日誌
-
在 Sumo Logic 中,選取來源 - 自訂 App 功能表,使用我們的 SumoLogicfn 函數查看從 Oracle Cloud Infrastructure (OCI) 擷取的日誌。
疑難排解
本節顯示如何使用簡單電子郵件警示來監督解決方案的狀態。
如需更多詳細資訊,請參閱函數簡介。
建立通知服務的主題和訂閱
-
在 Oracle Cloud 主控台中,從左上角的導覽功能表選取應用程式整合,然後選取通知。
-
按一下建立主題,然後建立名稱為 my_function_status 的主題。
-
選擇您的主題,按一下建立訂閱並使用下列範例:
- 協定:以電子郵件方式新增訂閱,然後新增您的電子郵件。
-
將以「待處理」狀態建立訂閱。您將會收到確認電子郵件,且必須按一下電子郵件中的連結以確認您的電子郵件地址。
檢查度量並從度量建立警示定義
-
從左上角的導覽功能表中,選取開發人員服務,然後選取函數。
-
選擇您要監督的應用程式與函數。
-
從「測量結果」頁面移至函數錯誤圖表,按一下選項,然後按一下在此查詢建立警示。
-
在通知底下新增名稱,選取目的地服務作為通知服務,選取 your_compartment,然後選取主題作為 my_function_status。
監督狀態服務連線器中心
本節顯示如何使用簡單電子郵件警示來監督「服務連線器中心」(SCH) 的狀態。
如需詳細資訊,請參閱服務連線器中心總覽。
建立通知服務的主題和訂閱
-
從左上角的導覽功能表中,選取應用程式整合,然後選取通知。
-
按一下建立主題,並使用 my_sch_status 名稱建立主題。
-
選擇您的主題,按一下建立訂閱並使用下列範例:
- 協定:以電子郵件方式新增訂閱,然後新增您的電子郵件
-
將以「待處理」狀態建立訂閱。您將會收到確認電子郵件,且必須按一下電子郵件中的連結以確認您的電子郵件地址。
檢查度量並從度量建立警示定義
-
從左上角的導覽功能表中,選取記錄日誌,然後選取服務連線器。
-
從左側導覽面板的資源清單中,選擇您要監督的連線器,然後選取度量。
-
從您要新增警示的度量圖表 (例如「服務連線器中心錯誤」),按一下選項和在此查詢上建立警示。
-
在通知底下新增名稱,選取目的地服務作為通知服務,選取 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 Help Center。
Move logs from Oracle Cloud Infrastructure into Sumo Logic
F50466-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.