備註:

將日誌從 Oracle Cloud Infrastructure 移至 Sumo Logic

簡介

Oracle Cloud 可觀察性與管理性平台旨在讓我們的客戶能夠符合他們的需求。我們知道他們的營運狀況已經與受歡迎的第三方觀察工具標準化,而我們希望與那些工具互通,讓客戶繼續使用他們投資於 Oracle Cloud Infrastructure (OCI) 的工具。

本教學課程將引導您瞭解如何將日誌從 OCI 移至 Sumo Logic。Sumo Logic 是熱門的可觀察性工具,提供對應用程式的全方位監控及安全性服務。

我們的高層次解決方案架構如下:

在 Sumo Logic 中建立自訂 HTTP 來源收集器

在您的 Sumo Logic 帳戶中,您需要建立 HTTP 自訂收集器應用程式,如下方步驟所述。

  1. 按一下設定精靈

  2. 按一下開始串流資料至 Sumo Logic

  3. 按一下您的自訂 App

  4. 按一下 HTTPS 來源

  5. 設定您的 HTTP 來源,如下所示。

    注意:HTTP 來源是描述資料標記,儲存在已擷取日誌中,日後在 Sumo Logic 中搜尋及篩選日誌時很有用。我們要擷取的每個日誌行都會以事件發生的時間戳記開始,因此請選取使用日誌檔中的時區選項。

    當您移至下一個畫面時,我們會使用 POST HTTP 呼叫,從 OCI 取得日誌上傳的 HTTPS 端點。請特別注意此端點,因為我們會設定此端點的函數,以將日誌上傳至 Sumo Logic。

設定要擷取的日誌

您可以將任何日誌設為「服務連線器中心」的輸入,然後擷取至 Sumo Logic。為了簡化此教學課程,我們將擷取 Oracle Cloud Infrastructure (OCI) 產生的日誌,以防禦您選擇的任意儲存桶。

  1. 在 Oracle Cloud 主控台中,按一下導覽功能表,選取記錄日誌,然後選取日誌群組

  2. 若要建立日誌群組,請按一下建立日誌群組

  3. 選取區間,為名稱新增 LogGroupForBucketActivity 並新增描述。按一下建立

  4. 記錄日誌功能表中選取日誌。您將會看到類似下方的畫面。

  5. 按一下啟用服務日誌並輸入下列資訊:

    • 服務:選取物件儲存
    • 資源:選擇要觀測日誌的任意儲存桶 (例如 BucketForSumoLogic)。
    • 日誌類別:選取寫入存取事件
    • 日誌名稱:輸入日誌的名稱,例如 logForBucketActivity
    • 日誌群組:為剛於上一個步驟建立的日誌選取 LogGroupForBucketActivity 日誌群組
  6. 按一下啟用日誌

    現在每次將物件上傳到 BucketForSumoLogic 儲存桶時,就會將日誌項目新增至 logForBucketActivity 日誌。

設定將日誌擷取至 Sumo Logic 的 Oracle Functions

  1. 在 Oracle Cloud 主控台中,按一下導覽功能表,然後選取解決方案與平台。選取開發人員服務功能表下的函數

  2. 按一下建立應用程式並輸入名稱,例如 SumoLogicFnApp

  3. 建立應用程式之後,請按一下應用程式名稱,然後從資源功能表中選取入門

  4. 啟動 Cloud Shell。

  5. 使用區域的相關資訊環境。

    fn list context
    fn use context us-ashburn-1
    
  6. 以函數的區間 ID 更新此相關資訊環境。

    fn update context oracle.compartment-id <compartment-id>
    
  7. 以您想要使用的登錄位置更新相關資訊環境。

    fn update context registry iad.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]
    

    iad 取代為您區域的三位數區域碼。

  8. 假設您已經建立認證權杖,請使用認證權杖以您的密碼身分登入登錄。

    docker login iad.ocir.io
    

    iad 取代為您區域的三位數區域碼。

    會提示您輸入下列資訊:

    • 使用者名稱:<tenancyname>/<username>
    • 密碼:建立密碼

    注意:如果您使用 Oracle Identity Cloud Service,您的使用者名稱為 <tenancyname>/oracleidentitycloudservice/<username>。

    列出區間中的應用程式來檢查您的設定。

    fn list apps
    
  9. 產生 'hello-world「 樣板函數。

    fn init --runtime python sumologicfn
    

    fn init 指令將產生一個名為 SumoLogicfn 的資料夾,其中的三個檔案分別是 func.pyfunc.yamlrequirements.txt

    開啟 func.py,以下列程式碼取代檔案的內容。

    1. 匯入必要的 Python 模組,如以下的片段所示 。

      import io
      import json
      import logging
      import os
      
      import requests
      from fdk import response
      
    2. 定義一個函數以剖析日誌資料,並呼叫 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 服務所產生日誌格式的相關資訊,請參閱記錄日誌格式簡介

    3. 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
      
  10. 以下列方式取代 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]
    
  11. 以下列方式取代 requirements.txt 內容。

    fdk
    requests
    
  12. 部署您的函數。

    fn -v deploy --app sumologicFnApp --no-bump
    
  13. 您可以選擇性地測試 SumoLogicfn 函數與範例輸入,如下所示:

    curl -O https://raw.githubusercontent.com/mayur-oci/sumologicfn/main/example.json
    fn invoke sumologicFnApp sumologicfn < example.json
    

建立用於從日誌記錄讀取日誌的服務連線器並觸發函數

  1. 在 Oracle Cloud 主控台中,按一下導覽功能表,然後選取解決方案與平台。選取記錄日誌功能表下的服務連線器

  2. 按一下建立連線器,然後從來源下拉式清單中選取記錄日誌,然後從函數下拉式清單中選取目標

  3. 設定來源連線中,選取您的區間名稱、您的 LogGroupForBucketActivity 日誌群組,以及您的 logForBucketActivity 日誌。

  4. 如果要使用稽核日誌,請按一下 +Another 日誌,選擇區間,並為日誌群組新增 _Audit

  5. 如果提示建立寫入 Functions 的原則,請按一下建立

「服務連線器」現在已設定,並且會在每次在「日誌記錄」服務中找到日誌時,觸發函數將日誌擷取至 Sumo Logic。

在 Sumo Logic 中視覺化 Oracle Cloud Infrastructure 日誌

  1. 在 Sumo Logic 中,選取來源 - 自訂 App 功能表,使用我們的 SumoLogicfn 函數查看從 Oracle Cloud Infrastructure (OCI) 擷取的日誌。

疑難排解

本節顯示如何使用簡單電子郵件警示來監督解決方案的狀態。

如需更多詳細資訊,請參閱函數簡介

建立通知服務的主題和訂閱

  1. 在 Oracle Cloud 主控台中,從左上角的導覽功能表選取應用程式整合,然後選取通知

  2. 按一下建立主題,然後建立名稱為 my_function_status 的主題。

  3. 選擇您的主題,按一下建立訂閱並使用下列範例:

    • 協定:以電子郵件方式新增訂閱,然後新增您的電子郵件。
  4. 將以「待處理」狀態建立訂閱。您將會收到確認電子郵件,且必須按一下電子郵件中的連結以確認您的電子郵件地址。

檢查度量並從度量建立警示定義

  1. 從左上角的導覽功能表中,選取開發人員服務,然後選取函數

  2. 選擇您要監督的應用程式與函數。

  3. 從「測量結果」頁面移至函數錯誤圖表,按一下選項,然後按一下在此查詢建立警示

  4. 通知底下新增名稱,選取目的地服務作為通知服務,選取 your_compartment,然後選取主題作為 my_function_status。

監督狀態服務連線器中心

本節顯示如何使用簡單電子郵件警示來監督「服務連線器中心」(SCH) 的狀態。

如需詳細資訊,請參閱服務連線器中心總覽

建立通知服務的主題和訂閱

  1. 從左上角的導覽功能表中,選取應用程式整合,然後選取通知

  2. 按一下建立主題,並使用 my_sch_status 名稱建立主題。

  3. 選擇您的主題,按一下建立訂閱並使用下列範例:

    • 協定:以電子郵件方式新增訂閱,然後新增您的電子郵件
  4. 將以「待處理」狀態建立訂閱。您將會收到確認電子郵件,且必須按一下電子郵件中的連結以確認您的電子郵件地址。

檢查度量並從度量建立警示定義

  1. 從左上角的導覽功能表中,選取記錄日誌,然後選取服務連線器

  2. 從左側導覽面板的資源清單中,選擇您要監督的連線器,然後選取度量

  3. 從您要新增警示的度量圖表 (例如「服務連線器中心錯誤」),按一下選項在此查詢上建立警示

  4. 通知底下新增名稱,選取目的地服務作為通知服務,選取 your_compartment,然後選取主題作為 my_sch_status。

結論

本教學課程說明,Oracle Cloud Infrastructure 與 Sumo Logic 客戶如何運用服務連線器中心和 Oracle Functions,藉由將日誌從 Oracle Cloud Infrastructure Logging 移至 Sumo Logic,設定高擴展性解決方案。

致謝

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或是存取更多免費學習內容至 Oracle Learning YouTube 通道。此外,瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請瀏覽 Oracle Help Center