Escenario: Envío de datos de log a una base de datos de IA autónoma

Envíe datos de log desde Logging a una base de datos de IA autónoma mediante una función (servicio Functions).

Este escenario implica la creación de una función y, a continuación, hacer referencia al mismo en un conector (Connector Hub) para procesar y mover datos de log de Logging a una base de datos de IA autónoma.

Política de IAM necesaria

Si es miembro del grupo Administradores, ya tendrá el acceso necesario para ejecutar este escenario. De lo contrario, necesita acceso a Functions.

El flujo de trabajo para crear el conector incluye una política por defecto cuando es necesario para proporcionar permiso para escribir en el servicio de destino. Si no conoce las políticas, consulte Visión general de las políticas de IAM.

Configuración de este escenario

Este escenario implica la creación de un conector (connector Hub) para enviar datos de log desde Logging a una base de datos de IA autónoma (JSON).

Antes de crear el conector, debe configurar una base de datos JSON de IA autónoma que desee recibir los datos de log y configurar la función para copiar dichos datos de log.

Detalles de configuración de Autonomous AI JSON Database:

  • Aprovisionamiento de una base de datos de IA autónoma
  • Duplique el separador del explorador.
  • En el separador duplicado, copie la URL base de ORDS: en la página de detalles de la base de datos de IA autónoma, seleccione Consola de servicio, seleccione Desarrollo y, a continuación, seleccione Copiar en RESTful Servicios y SODA".
  • Cree una recopilación "logs" para almacenar los datos de log que moverá la función y el conector:
    1. Vuelva a la página de información de Autonomous AI Database (separador del explorador original).

    2. Seleccione Acciones de base de datos.

    3. Conéctese con el usuario admin y la contraseña definida al crear la base de datos.

      Se muestra la ventana Acciones de base de datos | Pantalla de inicio.

    4. Seleccione SQL.

      Se muestra la ventana Acciones de base de datos | SQL.

    5. Introduzca el siguiente comando:

      soda create logs
    6. Seleccione Ejecutar sentencia (Ejecutar sentencia).

    Para consultar los documentos en la recopilación después de que el conector copie datos de log, introduzca el siguiente comando:

    soda get logs -f {}

Detalles de configuración de función:

Una vez configuradas la base de datos y la función, estará listo para crear el conector. La creación del conector es sencilla en la consola. También puede utilizar la CLI o API de Oracle Cloud Infrastructure, que permite ejecutar las operaciones individuales.

Ejemplo de código de función

El siguiente ejemplo de código es para que una función envíe datos de log del servicio Logging a una base de datos de IA autónoma. Para obtener instrucciones sobre la creación y el despliegue de funciones, consulte Creación y despliegue de funciones.

Nota

El siguiente ejemplo de código no está pensado para cargas de trabajo de producción. Actualícela para su entorno de producción.
import io
import json
import logging
import requests

from fdk import response

# soda_insert uses the Autonomous AI 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"}
    )

Uso de la consola

En esta sección se describe la creación de un conector mediante la consola. Se debe desplegar la función.

Para obtener ayuda con la solución de problemas, consulte Solución del problema de conectores.

Crear un conector

En este ejemplo se describe el uso de la consola para crear un conector. En este ejemplo, el conector mueve datos de log de Logging a una base de datos de IA autónoma mediante la función que ha creado con el ejemplo del código de la función.

  1. Abra el menú de navegación y seleccione Análisis e IA. En Mensajería, seleccione Hub de conector.
  2. Seleccione el compartimento en el que desea crear el conector de servicio.
  3. Seleccione Crear conector.
  4. En la página Crear conector:

    • Escriba un nombre de conector como "Enviar logs a mi base de datos de IA autónoma". Evite introducir información confidencial.
    • Seleccione el compartimento de recursos en el que desea almacenar el nuevo conector.
    • En Configurar conector, seleccione los servicios de origen y destino para mover los datos de log a una métrica:
      • Origen: Logging
      • Destino: Functions
    • En Configurar conexión de origen, seleccione un nombre de compartimento, un grupo de logs y un log.
    • En Configurar conexión de destino, seleccione la aplicación de función y la función correspondientes a la función creada mediante el ejemplo de código de función.
  5. Si se le solicita que cree una política (requerida para el acceso para crear o actualizar un conector de servicio), seleccione Crear.
  6. Haga clic en Crear.

Uso de la CLI

En esta sección se describe el proceso de creación de un conector mediante la CLI que mueve datos de log a su función (que, a continuación, mueve datos a una base de datos de IA autónoma).

Para obtener más información sobre el uso de la API y la firma de solicitudes, consulte la documentación de la API de REST y Credenciales de seguridad. Para obtener información sobre los SDK, consulte Los SDK y la CLI.

  • Cree un conector: abra un símbolo del sistema y ejecute el 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>]

Para obtener ayuda con la solución de problemas, consulte Solución del problema de conectores.

Uso de la API

En esta sección se describe la creación del conector mediante la API.

Para obtener más información sobre el uso de la API y la firma de solicitudes, consulte la documentación de la API de REST y Credenciales de seguridad. Para obtener información sobre los SDK, consulte Los SDK y la CLI.

Utilice las siguientes operaciones:

  • CreateServiceConnector: cree un conector que mueva los datos de log a su función (que, a continuación, mueve los datos a una base de datos de IA autónoma).

    Ejemplo de solicitud 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": []
      }
    }

Para obtener ayuda con la solución de problemas, consulte Solución del problema de conectores.