シナリオ: Autonomous Databaseへのログ・データの送信
ファンクション(ファンクション・サービス)を使用して、ログ・データをロギングからAutonomous Databaseに送信します。
このシナリオでは、ファンクションを作成してから、コネクタ(コネクタ・ハブ)でそのファンクションを参照して、ログ・データを処理してロギングからAutonomous Databaseに移します。
必要なIAMポリシー
このシナリオの設定
このシナリオでは、コネクタ(コネクタ・ハブ)を作成して、ログ・データをロギングからAutonomous Database (JSON)に送信します。
コネクタを作成する前に、ログ・データを受け取るAutonomous JSON Databaseを設定し、そのログ・データをコピーするファンクションを設定する必要があります。
Autonomous JSON Databaseの設定の詳細:
- Autonomous Databaseのプロビジョニング
- ブラウザ・タブを複製します。
- 「複製」タブで、ORDSベースURLをコピーします: Autonomous Databaseの詳細ページから、「サービス・コンソール」、「開発」、「RESTfulサービスおよびSODA」の下の「コピー」の順に選択します。
- ファンクションおよびコネクタによって移動されるログ・データを格納するログ・コレクションを作成します。
-
Autonomous Databaseの詳細ページ(最初のブラウザ・タブ)に戻ります。
-
「データベース・アクション」を選択します。
-
admin
ユーザーとして、データベース作成時に設定したパスワードを使用してログインします。「データベース・アクション | 起動パッド」ウィンドウが表示されます。
-
「SQL」を選択します。
「データベース・アクション | SQL」ウィンドウが表示されます。
-
次のコマンドを入力します。
soda create logs
-
(「文の実行」)を選択します。
コネクタがログ・データをコピーした後でコレクション内のドキュメントを問合せするには、次のコマンドを入力します:
soda get logs -f {}
-
ファンクションの設定の詳細:
- 関数を作成します
- ファンクションをデプロイします
- 次のように構成値を設定します:
ordsbaseurl
データベースの設定時にコピーしたORDSベースURLを使用します。
dbschema
dbuser
dbpwd
collection
詳細は、ファンクションへのカスタム構成パラメータの引渡しを参照してください。
- (オプション)ファンクションを呼び出します
データベースおよびファンクションを設定したら、コネクタを作成できます。コネクタの作成は、コンソールで行います。または、Oracle Cloud Infrastructure CLIまたはAPIを使用して、各操作を自分で実行できます。
次のコード・サンプルは、ロギング・サービスからAutonomous Databaseにログ・データを送信するファンクションのものです。ファンクションを作成およびデプロイする手順は、ファンクションの作成およびデプロイを参照してください。
次のコード・サンプルは、本番ワークロード向けではありません。本番環境用には更新してください。
import io
import json
import logging
import requests
from fdk import response
# soda_insert uses the Autonomous Database REST API to insert JSON documents
def soda_insert(ordsbaseurl, dbschema, dbuser, dbpwd, collection, logentries):
auth=(dbuser, dbpwd)
sodaurl = ordsbaseurl + dbschema + '/soda/latest/'
bulkinserturl = sodaurl + 'custom-actions/insert/' + collection + "/"
headers = {'Content-Type': 'application/json'}
resp = requests.post(bulkinserturl, auth=auth, headers=headers, data=json.dumps(logentries))
return resp.json()
def handler(ctx, data: io.BytesIO=None):
logger = logging.getLogger()
logger.info("function start")
# Retrieving the Function configuration values
try:
cfg = dict(ctx.Config())
ordsbaseurl = cfg["ordsbaseurl"]
dbschema = cfg["dbschema"]
dbuser = cfg["dbuser"]
dbpwd = cfg["dbpwd"]
collection = cfg["collection"]
except:
logger.error('Missing configuration keys: ordsbaseurl, dbschema, dbuser, dbpwd and collection')
raise
# Retrieving the log entries from Connector Hub as part of the Function payload
try:
logentries = json.loads(data.getvalue())
if not isinstance(logentries, list):
raise ValueError
except:
logger.error('Invalid payload')
raise
# The log entries are in a list of dictionaries. We can iterate over the the list of entries and process them.
# For example, we are going to put the Id of the log entries in the function execution log
logger.info("Processing the following LogIds:")
for logentry in logentries:
logger.info(logentry["oracle"]["logid"])
# Now, we are inserting the log entries in the JSON Database
resp = soda_insert(ordsbaseurl, dbschema, dbuser, dbpwd, collection, logentries)
logger.info(resp)
if "items" in resp:
logger.info("Logs are successfully inserted")
logger.info(json.dumps(resp))
else:
raise Exception("Error while inserting logs into the database: " + json.dumps(resp))
# The function is done. Return empty response.
logger.info("function end")
return response.Response(
ctx,
response_data="",
headers={"Content-Type": "application/json"}
)
コンソールの使用
この項では、コンソールを使用してコネクタを作成する方法について説明します。ファンクションはデプロイする必要があります。
トラブルシューティングに関するヘルプは、コネクタのトラブルシューティングを参照してください。
この例では、コンソールを使用してコネクタを作成する方法を説明します。この例で、コネクタは、ファンクション・コード・サンプルを使用して作成したファンクションを使用して、ログ・データをロギングからAutonomous Databaseに移動します。
- ナビゲーション・メニューを開き、「アナリティクスとAI」をクリックします。「メッセージング」で、「コネクタ・ハブ」をクリックします。
- サービス・コネクタを作成するコンパートメントを選択します。
- 「コネクタの作成」を選択します。
-
「コネクタの作成」ページ:
- 「コネクタ名」に「自分のAutonomous Databaseへのログ送信」などと入力します。機密情報を入力しないでください。
- 新しいコネクタを格納するリソース・コンパートメントを選択します。
- 「コネクタの構成」で、ログ・データをメトリックに移動するソース・サービスおよびターゲット・サービスを選択します:
- ソース: ロギング
- ターゲット: ファンクション
- 「ソース接続の構成」で、「コンパートメント名」、「ログ・グループ」および「ログ」を選択します。
- 「ターゲット接続の構成」で、関数コード・サンプルを使用して作成した関数に対応する「関数アプリケーション」および「関数」を選択します。
- ポリシー(サービス・コネクタを作成または更新するためのアクセス権で必要)の作成を求められた場合は、「作成」を選択します。
- 「作成」を選択します。
CLIの使用
この項では、CLIを使用して、ログ・データを関数に移動するコネクタを作成する手順を説明します(その後、関数はデータをAutonomous Databaseに移動します)。
APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。
-
コネクタを作成します: コマンド・プロンプトを開き、
oci sch service-connector create
コマンドを実行します:oci sch service-connector create --display-name "<display_name>" --compartment-id <compartment_OCID> --source [<source_in_JSON>] --tasks [<tasks_in_JSON>] --target [<targets_in_JSON>]
トラブルシューティングに関するヘルプは、コネクタのトラブルシューティングを参照してください。
APIの使用
この項では、APIを使用してコネクタを作成する手順を説明します。
APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。
次の操作を使用します:
-
CreateServiceConnector: ログ・データを関数に移動するコネクタを作成します(その後、関数はデータをAutonomous Databaseに移動します)。
CreateServiceConnectorリクエストの例POST /20200909/serviceConnectors Host: service-connector-hub.us-phoenix-1.oraclecloud.com <authorization and other headers> { "compartmentId": "<compartment_OCID>", "description": "My connector description", "displayName": "My Connector", "source": { "kind": "logging", "logSources": [ { "compartmentId": "<compartment_OCID>", "logGroupId": "<log_group_OCID>", "logId": "<log_OCID>" } ] }, "target": { "compartmentId": "<compartment_OCID>", "kind": "functions", "functionId": "<function_OCID>" }, "tasks": [] } }
トラブルシューティングに関するヘルプは、コネクタのトラブルシューティングを参照してください。