ノート:

Oracle Cloud InfrastructureからSumo Logicへのログの移動

イントロダクション

Oracle Cloud Observability and Manageabilityプラットフォームは、お客様が現在の場所で満たすことを目的としています。当社は、人気のあったサードパーティの可観測性ツールで業務状況を標準化して理解しており、これらのツールと相互運用できるようにし、顧客がOracle Cloud Infrastructure (OCI)に投資したツールの使用を続けることを望んでいます。

このチュートリアルでは、ログをOCIからSumo Logicに移動する方法を順を追って説明します。Sumo Logicは、アプリケーションを完全に可視化する監視およびセキュリティ・サービスを提供する一般的な可観測性ツールです。

高レベルのソリューション・アーキテクチャは次のとおりです。

Sumo LogicでのカスタムHTTPソース・コレクタの作成

Sumo Logicアカウントでは、次のステップの説明に従ってHTTPカスタム・コレクタ・アプリケーションを作成する必要があります。

  1. 「設定ウィザード」をクリックします。

  2. 「Sumo Logicへのストリーミング・データの開始」をクリックします。

  3. 「カスタム・アプリケーション」をクリックします。

  4. 「HTTPSソース」をクリックします。

  5. 次に示すようにHTTPソースを構成します。

    ノート: HTTPソースはメタデータ・タグで、取り込まれたログとともに格納され、後でSumo Logicでログを検索およびフィルタ処理する場合に役立ちます。取込みする各ログ行は、イベント発生のタイムスタンプで開始されるため、「ログ・ファイルからのタイム・ゾーンの使用」オプションを選択します。

    次の画面に移動すると、POST HTTPコールを使用してログのHTTPSエンドポイントがOCIからアップロードされます。このエンドポイントを使用してログを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. 「Create Application」をクリックし、SumoLogicFnAppなどの名前を入力します。

  3. アプリケーションを作成したら、アプリケーション名をクリックし、「リソース」メニューから「スタート・ガイド」を選択します。

  4. クラウド・シェルの起動

  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をリージョンの3桁のリージョン・コードに置き換えます。

  8. 認証トークンがすでに作成されている場合は、認証トークンをパスワードとして使用してレジストリにログインします。

    docker login iad.ocir.io
    

    iadをリージョンの3桁のリージョン・コードに置き換えます。

    次の情報を要求されます:

    • ユーザー名: <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.yaml、および requirements.txtの3つのファイルを格納します。

    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ファンクションによって受信したサービス・コネクタ・ハブから、起動ペイロードとしてログ・エントリを取得します。これらのログ・エントリとログ行を1つずつループします。

      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. ファンクションに書き込むポリシーを作成するように求められた場合は、「作成」をクリックします。

サービス・コネクタが設定され、ロギング・サービスでログが検出されるたびにSumo Logicにログを取得するファンクションがトリガーされます。

Sumo LogicでのOracle Cloud Infrastructureログのビジュアル化

  1. Sumo Logicで、「ソース-カスタム・アプリケーション」メニューを選択して、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ヘルプ・センターを参照してください。