ノート:

DatadogによるOracle Cloud Infrastructureの監視

イントロダクション

Oracle Cloudの監視および管理性プラットフォームは、お客様がいる場所で対応することを目指しています。オラクルでは、一般的なサード・パーティ可観測性ツールを使用して、業務状況を標準化し、これらのツールと相互運用可能にして、お客様がOracle Cloud Infrastructureに投資したツールを使用し続けることができることを理解しています。

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

Datadog APIキーの作成

  1. Datadogアカウントで「統合」を選択し、「API」「APIキーの作成」をクリックします。これによりAPIキーが生成されます。

    データドッグ・メニュー

    データドッグ

取得するログの構成

  1. Oracle Cloud Infrastructureコンソールで、「ナビゲーション」メニューをクリックし、「ロギング」メニューの下にある「ログ・グループ」を選択します。
     

  2. ログ・グループを作成するには、「ログ・グループの作成」をクリックします。

    ログ・グループの作成
     

  3. コンパートメントを選択し、名前data_log_groupおよび説明を追加します。

    新規ログ・グループ
     

  4. ログ・グループを作成した後、左側のメニューで「ログ」を選択します。
     

  5. 「サービス・ログの有効化」をクリックし、ダイアログ・ボックスに情報を入力して「ログの有効化」をクリックします。「サービス」で「ログ・カテゴリ」を選択します。

    • リソース: リソースとして使用するログを入力します。
    • ログ名: ログの名前(datadogなど)を入力します。

    残りのフィールドは適切に入力します。バケット名datadog_logsのOracle Object Storeが表示されているこの例を参照してください。

    サービス・ログ
     

Datadogにログを取り込むためのOracle Functionの構成

  1. ナビゲーション・メニューをクリックし、「ソリューションおよびプラットフォーム」セクションを選択します。「開発者サービス」メニューで「ファンクション」を選択します。
     

  2. 「アプリケーションの作成」をクリックし、datadog01などの名前を入力します。

    アプリケーションの作成 
     

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

    oracle関数  

  4. クラウド・シェルを起動します。

  5. リージョンのコンテキストを使用します。

    fn list contextfn list context
    fn use context us-phoenix-1
    
  6. ファンクションのコンパートメントIDでコンテキストを更新します。

    fn update context oracle.compartment-id <compartment-id>
    
  7. 使用するレジストリの場所でコンテキストを更新します。

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

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

  8. 「認証トークンの生成」をクリックします。

    Auth Tokenをパスワードとして使用してレジストリにログインします。

    docker login phx.ocir.io
    

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

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

    • ユーザー名: <tenancyname>/<username>
    • パスワード: パスワードの作成

    ノート: Oracle Identity Cloud Serviceを使用している場合、ユーザー名は<tenancyname>/oracleidentitycloudservice/<username>です。

  9. 'hello- world'ボイラープレート・ファンクションを生成します。

    fn init --runtime python datadog
    

    fn initコマンドは、datadogというフォルダを生成します。このフォルダには、func.pyfunc.yaml、および requirements.txtという3つのファイルが含まれています。

    func.pyを開き、ファイルの内容を次のコードで置き換えます。

    1. 次のスニペットに示すように、必要なPythonモジュールをインポートします:

      	  import io
      	  import oci
      	  import re
      	  import os
      	  import json
      	  import sys
      	  import requests
      	  import logging
      	  import time
      	  from fdk import response
      
      
    2. ログ・データを解析するファンクションを定義し、Datadog APIを呼び出してログを取り込みます。

      def handler(ctx, data: io.BytesIO=None):
         try:
           logs = json.loads(data.getvalue())
      

      Oracle Cloud Infrastructure Loggingサービスによって生成されるログの形式の詳細は、ロギング・フォーマットの概要を参照してください。

    3. 各ログ・エントリからログ・ソース、タイムスタンプおよびデータを取得します。

      	  if "data" in item:
      	    if type(item.get("data")) is dict:
      		   data = item.get("data", {})
      	    else:
      		   data = item.get("data")
      	  else:
      		data = ""
      
      	  if "source" in item:
      		source = item.get("source")
      	  else:
      		Source = ""
      
      	  if "time" in item:
      		time = item.get("time")
      	  else:
      		time = ""
      
      	  payload = {}
      	  payload.update({"source":source})
      	  payload.update({"time": time})
      	  payload.update({"data":data})
      
      
    4. Datadog APIエンドポイントURLおよび認証トークンを格納する変数を作成します。

      	  datadoghost = os.environ['DATADOG_HOST']
      	  datadogtoken = os.environ['DATADOG_TOKEN']
      
      

      ノート: func.yamlのDATADOG_HOSTおよびDATADOG_TOKENの値を設定します。

    5. 必要なペイロードを使用してDatadog APIを起動します。

      	  headers = {'Content-type': 'application/json', 'DD-API-KEY': datadogtoken}
      	  x = requests.post(datadoghost, data = json.dumps(payload), headers=headers)
      	  logging.getLogger().info(x.text)
      
        except (Exception, ValueError) as ex:
      	  logging.getLogger().info(str(ex))
      	  return
      
      

    構成部分には、ステップ1で取得したDatadogエンドポイントURLおよびトークン・フォーム認証が含まれます。
    RESTエンドポイントはhttps://http-intake.logs.datadoghq.com/v1/inputで、詳細はDatadogのドキュメントを参照してください。

    func.yaml

    schema_version: 20180708
    name: datadogapp
    version: 0.0.1
    runtime: python
    entrypoint: /python/bin/fdk /function/func.py handler
    memory: 1024
    timeout: 120
    config:
    	DATADOG_HOST: https://http-intake.logs.datadoghq.com/v1/input
    	DATADOG_TOKEN: ZZZZZzzzzzzzzzz
    
    

    requirements.txt

    fdk
    datetime
    requests
    oci
    
  10. アプリケーションを作成します。

    fn create app datadog01 --annotation oracle.com/oci/subnetIds='["ocid1.subnet.oc1.phx.aaaaxxxxxxxxxxx"]'
    

    サブネットOCIDのsubnetIDsを変更します。

  11. ファンクションをデプロイします。

    fn -v deploy --app datadog
    

ロギングからログを読み取ってファンクションをトリガーするためのサービス・コネクタの作成

  1. 「ナビゲーション」メニューをクリックし、「ソリューションおよびプラットフォーム」セクションを選択します。「ロギング」メニューで「サービス・コネクタ」を選択します。
     

  2. 「コネクタの作成」をクリックし、ソースをロギング、ターゲットをファンクションとして選択します。
     

  3. 「ソース接続の構成」で、コンパートメント名、ログ・グループdatadog_log_groupおよびログdatadogを選択します。
     

  4. 監査ログを使用する場合は、+Anotherログ・ボタンをクリックしてコンパートメントを選択し、ログ・グループに_Auditを追加します。

    監査

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

サービス・コネクタが設定され、ロギング・サービスでログが見つかるたびにDatadogにログを取り込む関数がトリガーされます。

DatadogでのOCI監査ログのビジュアル化

  1. Datadogで、「ログ」メニューをクリックして、OCIから収集されたログを表示します。

    データドッグ・ダッシュボード

トラブルシューティング

この項では、単純なEメール・アラートを使用してソリューションのステータスを監視する方法を示します。

機能

詳細は、テクニカル・ドキュメンテーションを参照してください。

通知サービスのトピックおよびサブスクリプションの作成

  1. 左上隅のメニューから、「アプリケーション統合」「通知」の順に選択します

  2. 「トピックの作成」をクリックし、my_function_status名でトピックを作成します

  3. トピックを選択し、「サブスクリプションの作成」をクリックして、次の例を使用します:

    • プロトコル: 電子メールを送信し、電子メールを使用してサブスクリプションを作成
  4. サブスクリプションは「保留中」ステータスで作成されます。確認の電子メールが届きます。電子メール内のリンクをクリックして、電子メール・アドレスを確認する必要があります。

メトリックを確認し、メトリックからアラーム定義を作成します

  1. 左上隅のメニューから、「開発者サービス」「ファンクション」の順に選択します

  2. モニターするアプリケーションおよび機能を選択します

  3. 「メトリック」ページから、「関数エラー」チャートに移動し、「オプション」をクリックしてこの問合せにアラームを作成します

  4. 名前を追加し、「通知」で通知サービスとして「宛先サービス」を選択し、コンパートメントyour_compartmentを選択して、my_function_statusとして「トピック」を選択します

サービス・コネクタ・ハブ

この項では、単純なEメール・アラートを使用してサービス・コネクタ・ハブ(SCH)のステータスをモニターする方法を示します。

詳細は、テクニカル・ドキュメンテーションを参照してください。

通知サービスのトピックおよびサブスクリプションの作成

  1. 左上隅のメニューから、「アプリケーション統合」「通知」の順に選択します

  2. 「トピックの作成」をクリックし、my_sch_status名でトピックを作成します

  3. トピックを選択し、「サブスクリプションの作成」をクリックして、次の例を使用します:

    • プロトコル: 電子メールを送信し、電子メールを使用してサブスクリプションを作成
  4. サブスクリプションは「保留中」ステータスで作成されます。確認の電子メールが届きます。電子メール内のリンクをクリックして、電子メール・アドレスを確認する必要があります。

メトリックを確認し、メトリックからアラーム定義を作成します

  1. 左上隅のメニューから、「ロギング」「サービス・コネクタ」の順に選択します

  2. モニターするコネクタを選択し、左側のナビゲーション・ペインの「リソース」の下にある「メトリック」リンクをクリックします

  3. アラームe.g「サービス・コネクタ・ハブ・エラー」を追加するメトリック・チャートから、「オプション」をクリックし、この問合せにアラームを作成します

  4. 名前を追加し、「通知」で通知サービスとして「宛先サービス」を選択し、コンパートメントyour_compartmentを選択して、my_sch_statusとして「トピック」を選択します

まとめ

このチュートリアルでは、Oracle Cloud InfrastructureおよびDatadogのお客様が、サービス・コネクタのハブおよびファンクションを使用して、ログをOracle Cloud Infrastructure LoggingからDatadogに移動するための低オーバーヘッドでスケーラブルなソリューションを構成する方法を示します。

謝辞

著者 - Igor Aragao de Souza(プリンシパル・ビッグ・データ・コンサルタント)

その他の学習リソース

docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。