Scénario : envoi de données de journal à une instance Autonomous Database
Envoyez les données de journal à partir de Logging vers une instance Autonomous Database à l'aide d'une fonction (service Functions).
Ce scénario implique la création d'une fonction, puis le référencement de cette fonction dans un connecteur (Hub de connecteurs) pour traiter et déplacer les données de journal de Logging vers une instance Autonomous Database.
Stratégie IAM requise
Si vous êtes membre du groupe d'administrateurs, vous disposez déjà de l'accès requis pour exécuter ce scénario. Sinon, vous devez avoir accès à Functions .
Le workflow de création du connecteur inclut une stratégie par défaut lorsque nécessaire afin de fournir des droits d'accès en écriture au service cible. Si vous ne connaissez pas les stratégies, reportez-vous à Présentation des stratégies IAM.
Configuration de ce scénario
Ce scénario implique la création d'un connecteur (Hub de connecteurs) pour envoyer les données de journal à partir de Logging vers une instance Autonomous Database (JSON).
Pour pouvoir créer le connecteur, vous devez configurer une base de données JSON autonome devant recevoir les données de journal et configurer la fonction de copie de ces données de journal.
Détails de configuration de la base de données JSON autonome :
- Provisionnement d'Autonomous Database
- Dupliquez l'onglet du navigateur.
- Dans l'onglet dupliqué, copiez l'URL de base ORDS : sur la page de détails de l'instance Autonomous Database, sélectionnez Console de service, sélectionnez Développement, puis Copier sous RESTful Services et SODA.
- Créez une collection "journaux" pour stocker les données de journal qui seront déplacées par la fonction et le connecteur :
-
Revenez à la page de détails de l'instance Autonomous Database (onglet de navigateur d'origine).
-
Sélectionnez Database Actions.
-
Connectez-vous avec l'utilisateur
admin
et le mot de passe que vous avez définis lors de la création de la base de données.La fenêtre Database Actions | Lancement apparaît.
-
Sélectionnez SQL.
La fenêtre Database Actions | SQL apparaît.
-
Entrez la commande suivante :
soda create logs
-
Sélectionnez
(Exécuter l'instruction).
Pour interroger les documents de la collection après la copie des données de journal par le connecteur, saisissez la commande suivante :
soda get logs -f {}
-
Détails de configuration de la fonction :
- Créer la fonction
- Déployez la fonction.
- Définissez les valeurs de configuration comme suit :
-
ordsbaseurl
Utilisez l'URL de base ORDS que vous avez copiée lors de la configuration de la base de données.
-
dbschema
-
dbuser
-
dbpwd
-
collection
Pour plus d'informations, reportez-vous à Transmission de paramètres de configuration personnalisés à des fonctions.
-
- (Facultatif) Appelez la fonction.
Une fois la base de données et la fonction configurées, vous êtes prêt à créer le connecteur. La création du connecteur dans la console est simple. Vous pouvez également utiliser l'interface de ligne de commande ou l'API Oracle Cloud Infrastructure, qui vous permettent d'exécuter les différentes opérations vous-même.
L'exemple de code suivant permet à une fonction d'envoyer les données de journal du service Logging vers une base de données autonome. Pour obtenir des instructions sur la création et le déploiement de fonctions, reportez-vous à Création et déploiement de fonctions.
L'exemple de code suivant n'est pas destiné aux charges globales de production. Mettez-le à jour pour votre environnement de production.
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"}
)
Utilisation de la console
Cette section explique comment créer un connecteur à l'aide de la console. La fonction doit être déployée.
Pour plus d'informations sur le dépannage, reportez-vous à la section Dépannage des connecteurs.
Cet exemple explique comment utiliser la console pour créer un connecteur. Dans cet exemple, le connecteur déplace les données de journal de Logging vers une instance Autonomous Database à l'aide de la fonction que vous avez créée à l'aide de l'exemple de code de fonction.
- Ouvrez le menu de navigation et sélectionnez Analytiques et IA. Sous Messagerie, sélectionnez Hub de connecteurs.
- Choisissez le compartiment dans lequel créer le connecteur de service.
- Sélectionnez Créer un connecteur.
-
Sur la page Créer un connecteur, procédez comme suit :
- Saisissez un nom de connecteur tel que "Send Logs to My Autonomous Database". Evitez de saisir des informations confidentielles.
- Sélectionnez le compartiment de ressource dans lequel stocker le nouveau connecteur.
- Sous Configurer un connecteur, sélectionnez les services source et cible pour déplacer les données de journal vers une mesure :
- Source : Logging
- Cible : Functions
- Sous Configurer une connexion source, sélectionnez un nom de compartiment, un groupe de journaux et un journal.
- Sous Configurer la connexion cible, sélectionnez l'application de fonction et la fonction correspondant à la fonction que vous avez créée à l'aide de l'exemple de code de fonction.
- Si vous êtes invité à créer une stratégie (requis pour accéder à la création ou à la mise à jour d'un connecteur de service), sélectionnez Créer.
- Sélectionnez Créer.
Utilisation de l'interface de ligne de commande
Cette section parcourt la création d'un connecteur à l'aide de l'interface de ligne de commande qui déplace les données de journal vers votre fonction (qui les déplace ensuite vers une instance Autonomous Database).
Pour plus d'informations sur l'utilisation de l'API et la signature des demandes, reportez-vous à la documentation relative à l'API REST et à Informations d'identification de sécurité. Pour plus d'informations sur les kits SDK, reportez-vous à Kits SDK et interface de ligne de commande.
-
Créez un connecteur : ouvrez une invite de commande et exécutez la commande
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>]
Pour plus d'informations sur le dépannage, reportez-vous à la section Dépannage des connecteurs.
Utilisation de l'API
Cette section explique comment créer le connecteur à l'aide de l'API.
Pour plus d'informations sur l'utilisation de l'API et la signature des demandes, reportez-vous à la documentation relative à l'API REST et à Informations d'identification de sécurité. Pour plus d'informations sur les kits SDK, reportez-vous à Kits SDK et interface de ligne de commande.
Utilisez les opérations suivantes :
-
CreateServiceConnector : créez un connecteur qui déplace les données de journal vers votre fonction (qui les déplace ensuite vers une instance Autonomous Database).
Exemple de demande 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": [] } }
Pour plus d'informations sur le dépannage, reportez-vous à la section Dépannage des connecteurs.