Scenario: invio dei dati di log a un Autonomous Database

Invia i dati di log da Logging a un Autonomous Database utilizzando una funzione (servizio Functions).

Questo scenario prevede la creazione di una funzione e quindi il riferimento a tale funzione in un connettore (Connector Hub) per elaborare e spostare i dati di log da Logging a un Autonomous Database.

Criteri IAM necessari

Se si è membri del gruppo Administrators, si dispone già dell'accesso necessario per eseguire questo scenario. In caso contrario, è necessario accedere alle funzioni.

Il workflow per la creazione del connettore include un criterio predefinito quando necessario per fornire l'autorizzazione per la scrittura nel servizio di destinazione. Per informazioni nuove sui criteri, vedere Panoramica dei criteri IAM.

Impostazione di questo scenario

Questo scenario prevede la creazione di un connettore (Connector Hub) per inviare i dati di log dal log a un Autonomous Database (JSON).

Prima di poter creare il connettore, è necessario impostare un Autonomous JSON Database che si desidera ricevere i dati di log e impostare la funzione per copiare i dati di log.

Dettagli di impostazione di Autonomous JSON Database:

  • Provisioning di Autonomous Database
  • Duplica la scheda del browser.
  • Nella scheda duplicata, copiare l'URL di base ORDS: nella pagina dei dettagli per Autonomous Database, selezionare Console del servizio, selezionare Sviluppo, quindi selezionare Copia in RESTful Servizi e SODA.
  • Creare una raccolta "log" per memorizzare i dati di log che verranno spostati dalla funzione e dal connettore:
    1. Tornare alla pagina dei dettagli di Autonomous Database (la scheda del browser originale).

    2. Selezionare Azioni database.

    3. Eseguire il login con l'utente admin e la password impostata al momento della creazione del database.

      Viene visualizzata la finestra Azioni database | Launchpad.

    4. Selezionare SQL.

      Viene visualizzata la finestra Azioni database | SQL.

    5. Immettere il seguente comando:

      soda create logs
    6. Selezionare Esegui istruzione (Esegui istruzione).

    Per eseguire una query sui documenti della raccolta dopo che il connettore copia i dati di log, immettere il comando seguente:

    soda get logs -f {}

Dettagli impostazione funzione:

Dopo aver impostato il database e la funzione, è possibile creare il connettore. La creazione del connettore è semplice nella console. In alternativa, puoi utilizzare l'interfaccia CLI o l'API di Oracle Cloud Infrastructure, che ti consente di eseguire manualmente le singole operazioni.

Esempio di codice funzione

L'esempio di codice seguente consente a una funzione di inviare i dati di log dal servizio di log a un Autonomous Database. Per istruzioni sulla creazione e la distribuzione di funzioni, vedere Creazione e distribuzione di funzioni.

Nota

Il seguente esempio di codice non è destinato ai carichi di lavoro di produzione. Aggiornarlo per l'ambiente di produzione.
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"}
    )

Utilizzo di Console

In questa sezione viene descritto come creare un connettore utilizzando la console. La funzione deve essere distribuita.

Per assistenza nella risoluzione dei problemi, vedere Risoluzione dei problemi dei connettori.

Crea un connettore

In questo esempio viene descritto come utilizzare la console per creare un connettore. In questo esempio, il connettore sposta i dati di log da Log ad Autonomous Database utilizzando la funzione creata utilizzando l'esempio di codice funzione.

  1. Aprire il menu di navigazione e selezionare Analytics e AI. In Messaggistica, selezionare Hub connettore.
  2. Scegliere il compartimento in cui si desidera creare il connettore servizio.
  3. Selezionare Crea connettore.
  4. Nella pagina Crea connettore:

    • Digitare un nome del connettore, ad esempio "Invia log a My Autonomous Database". Evitare di inserire informazioni riservate.
    • Selezionare il compartimento delle risorse in cui si desidera memorizzare il nuovo connettore.
    • In Configura connettore, selezionare i servizi di origine e di destinazione per spostare i dati di log in una metrica:
      • Origine: log
      • Destinazione: funzioni
    • In Configura connessione di origine selezionare un nome compartimento, un gruppo di log e un log.
    • In Configura connessione di destinazione selezionare l'applicazione funzione e la funzione corrispondenti alla funzione creata utilizzando l'esempio di codice funzione.
  5. Se viene richiesto di creare un criterio (necessario per l'accesso per creare o aggiornare un connettore del servizio), selezionare Crea.
  6. Selezionare Crea.

Uso dell'interfaccia CLI

In questa sezione viene descritto come creare un connettore utilizzando l'interfaccia CLI che sposta i dati di log nella funzione in uso, quindi sposta i dati in un Autonomous Database.

Per informazioni sull'uso dell'API e delle richieste di firma, consulta la documentazione dell'API REST e le credenziali di sicurezza. Per informazioni sugli SDK, vedere SDK e l'interfaccia CLI.

  • Creare un connettore: aprire un prompt dei comandi ed eseguire il comando 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>]

Per assistenza nella risoluzione dei problemi, vedere Risoluzione dei problemi dei connettori.

Uso dell'API

In questa sezione viene descritto come creare il connettore mediante l'API.

Per informazioni sull'uso dell'API e delle richieste di firma, consulta la documentazione dell'API REST e le credenziali di sicurezza. Per informazioni sugli SDK, vedere SDK e l'interfaccia CLI.

Utilizzare le operazioni descritte di seguito.

  • CreateServiceConnector: crea un connettore che sposta i dati di log nella funzione in uso, quindi sposta i dati in un Autonomous Database.

    Esempio di richiesta 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": []
      }
    }

Per assistenza nella risoluzione dei problemi, vedere Risoluzione dei problemi dei connettori.