Supuesto: Envío de datos de log a una instancia de Autonomous Database
Enviar datos de log de Logging a una instancia de Autonomous Database mediante una función (servicio Functions).
Este escenario implica la creación de una función y, a continuación, hacer referencia a esa función en un conector (Connector Hub) para procesar y mover los datos de log de Logging a una instancia de Autonomous Database.
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 de Logging a una instancia de Autonomous Database (JSON).
Antes de crear el conector, debe configurar una instancia de Autonomous JSON Database que desee recibir los datos de log y configurar la función para copiar esos datos de log.
Detalles de configuración de Autonomous JSON Database:
- Aprovisionamiento de Autonomous Database
- Duplique el separador del explorador.
- En el separador duplicado, copie la URL base de ORDS: en la página de detalles de Autonomous Database, 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:
-
Vuelva a la página de detalles de Autonomous Database (separador del explorador original).
-
Seleccione Acciones de base de datos.
-
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.
-
Seleccione SQL.
Se muestra la ventana Acciones de base de datos | SQL.
-
Introduzca el siguiente comando:
soda create logs
-
Seleccione
(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:
- Crear la función
- Desplegar la función
- Defina los valores de configuración de la siguiente manera:
-
ordsbaseurl
Utilice la URL base de ORDS que ha copiado durante la configuración de la base de datos.
-
dbschema
-
dbuser
-
dbpwd
-
collection
Para obtener más información, consulte Transferencia de parámetros de configuración personalizados a funciones.
-
- (Opcional) Llame a la 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.
El siguiente ejemplo de código es para que una función envíe datos de log del servicio Logging a una instancia de Autonomous Database. Para obtener instrucciones sobre la creación y el despliegue de funciones, consulte Creación y despliegue de funciones.
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 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.
En este ejemplo se describe el uso de la consola para crear un conector. En este ejemplo, el conector mueve los datos de log de Logging a una instancia de Autonomous Database mediante la función que ha creado con el ejemplo de código de función.
- Abra el menú de navegación y seleccione Análisis e IA. En Mensajería, seleccione Hub de conector.
- Seleccione el compartimento en el que desea crear el conector de servicio.
- Seleccione Crear conector.
-
En la página Crear conector:
- Escriba un nombre de conector como "Enviar logs a mi instancia de Autonomous Database". 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.
- Si se le solicita que cree una política (requerida para el acceso para crear o actualizar un conector de servicio), seleccione Crear.
- Haga clic en Crear.
Uso de la CLI
En esta sección se describe la creación de un conector mediante la CLI que mueve los datos de log a la función (que, a continuación, mueve los datos a una instancia de Autonomous Database).
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 la función (que, a continuación, mueve los datos a una instancia de Autonomous Database).
Ejemplo de solicitud CreateServiceConnectorPOST /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.