Szenario: Logdaten an eine Autonomous Database senden
Senden Sie Logdaten von Logging mit einer Funktion (Functions-Service) an eine Autonomous Database.
In diesem Szenario wird eine Funktion erstellt und dann diese Funktion in einem Connector (Connector Hub) referenziert, um Logdaten zu verarbeiten und von Logging in eine Autonomous Database zu verschieben.
Erforderliche IAM-Policy
Wenn Sie Mitglied der Administratorengruppe sind, besitzen Sie bereits den erforderlichen Zugriff zur Ausführung dieses Szenarios. Andernfalls benötigen Sie Zugriff auf Functions .
Der Workflow zum Erstellen des Connectors umfasst eine Standard-Policy, die bei Bedarf Berechtigungen zum Schreiben in den Zielservice erteilen. Informationen zu Policys finden Sie unter Überblick über IAM-Policys.
Szenario einrichten
Bei diesem Szenario wird ein Connector (Connector Hub) erstellt, um Logdaten von Logging an eine Autonomous Database (JSON) zu senden.
Bevor Sie den Connector erstellen können, müssen Sie eine autonome JSON-Datenbank einrichten, die Sie die Logdaten empfangen möchten, und die Funktion so einrichten, dass diese Logdaten kopiert werden.
Details zur Einrichtung der autonomen JSON-Datenbank:
- Autonomous Database bereitstellen
- Duplizieren Sie die Browserregisterkarte.
- Kopieren Sie auf der duplizierten Registerkarte die ORDS-Basis-URL: Wählen Sie auf der Detailseite für Autonomous Database die Option Servicekonsole aus, wählen Sie Entwicklung aus, und wählen Sie unter RESTful-Services und SODA die Option Kopieren aus.
- Erstellen Sie eine "Logs" Collection, um die Logdaten zu speichern, die von der Funktion und vom Connector verschoben werden:
-
Gehen Sie zurück zur Detailseite für Autonomous Database (der ursprünglichen Browserregisterkarte).
-
Wählen Sie Datenbankaktionen aus.
-
Melden Sie sich mit dem Benutzer
admin
und dem Kennwort an, das Sie beim Erstellen der Datenbank festgelegt haben.Das Fenster Datenbankaktionen | Launchpad wird angezeigt.
-
Wählen Sie SQL aus.
Das Fenster Datenbankaktionen | SQL wird angezeigt.
-
Geben Sie folgenden Befehl ein:
soda create logs
-
Wählen Sie
(Anweisung ausführen) aus.
Um Dokumente in der Collection abzufragen, nachdem der Connector Logdaten kopiert hat, geben Sie den folgenden Befehl ein:
soda get logs -f {}
-
Details zum Setup der Funktion:
- Funktion erstellen
- Funktion bereitstellen
- Legen Sie die Konfigurationswerte wie folgt fest:
-
ordsbaseurl
Verwenden Sie die bei der Einrichtung der Datenbank kopierte ORDS-Basis-URL.
-
dbschema
-
dbuser
-
dbpwd
-
collection
Weitere Informationen finden Sie unter Benutzerdefinierte Konfigurationsparameter an Funktionen übergeben.
-
- (Optional) Rufen Sie die Funktion auf.
Nach der Einrichtung von Datenbank und Funktion sind Sie bereit, den Connector zu erstellen. Das Erstellen des Connectors ist in der Konsole einfach. Alternativ können Sie die Oracle Cloud Infrastructure-CLI oder -API verwenden, um die einzelnen Vorgänge selbst auszuführen.
Nachfolgend sehen Sie ein Codebeispiel für eine Funktion zum Senden von Logdaten aus dem Logging-Service an eine autonome Datenbank. Anweisungen zum Erstellen und Bereitstellen von Funktionen finden Sie unter Funktionen erstellen und bereitstellen.
Das folgende Codebeispiel ist nicht für Produktions-Workloads bestimmt. Aktualisieren Sie es für Ihre Produktionsumgebung.
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"}
)
Konsole verwenden
In diesem Abschnitt wird beschrieben, wie Sie einen Connector mit der Konsole erstellen. Ihre Funktion muss bereitgestellt sein.
Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Connectors.
In diesem Beispiel wird beschrieben, wie Sie einen Connector mit der Konsole erstellen. In diesem Beispiel verschiebt der Connector Logdaten mit der Funktion, die Sie mit dem Beispiel für Funktionscode erstellt haben, von Logging in eine Autonomous Database.
- Öffnen Sie das Navigationsmenü , und wählen Sie Analysen und KI aus. Wählen Sie unter Messaging die Option Connector-Hub aus.
- Wählen Sie das Compartment aus, in dem Sie den Service-Connector erstellen möchten.
- Wählen Sie Connector erstellen aus.
-
Gehen Sie auf der Seite Connector erstellen wie folgt vor:
- Geben Sie einen Connector-Namen ein, wie "Logs an meine Autonomous Database senden". Geben Sie dabei keine vertraulichen Informationen ein.
- Wählen Sie das Resource Compartment aus, in dem Sie den neuen Connector speichern möchten.
- Wählen Sie unter Connector konfigurieren den Quell- und Zielservice aus, um Logdaten in eine Metrik zu verschieben:
- Quelle: Logging
- Ziel: Funktionen
- Wählen Sie unter Quellverbindung konfigurieren einen Compartment-Namen, eine Loggruppe und ein Log aus.
- Wählen Sie unter Zielverbindung konfigurieren die Funktionsanwendung und die Funktion aus, die der Funktion entspricht, die Sie mit dem Funktionscodebeispiel erstellt haben.
- Wenn Sie aufgefordert werden, eine Policy zu erstellen (für das Erstellen oder Aktualisieren eines Service-Connectors erforderlich), wählen Sie Erstellen aus.
- Klicken Sie auf Erstellen.
CLI verwenden
In diesem Abschnitt wird beschrieben, wie Sie mit der CLI einen Connector erstellen, der Logdaten in Ihre Funktion verschiebt (der die Daten dann in eine Autonomous Database verschiebt).
Informationen zur Verwendung der API und zu Signieranforderungen finden Sie unter REST-API-Dokumentation und Sicherheitszugangsdaten. Informationen zu SDKs finden Sie unter SDKs und die CLI.
-
Erstellen Sie einen Connector: Öffnen Sie eine Befehlszeile, und führen Sie den Befehl
oci sch service-connector create
aus: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>]
Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Connectors.
API verwenden
In diesem Abschnitt wird beschrieben, wie Sie den Connector mit der API erstellen.
Informationen zur Verwendung der API und zu Signieranforderungen finden Sie unter REST-API-Dokumentation und Sicherheitszugangsdaten. Informationen zu SDKs finden Sie unter SDKs und die CLI.
Verwenden Sie die folgenden Vorgänge:
-
CreateServiceConnector: Erstellen Sie einen Connector, der Logdaten in Ihre Funktion verschiebt (der die Daten dann in eine Autonomous Database verschiebt).
Beispiel für eine CreateServiceConnector-AnforderungPOST /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": [] } }
Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Connectors.