Nota:

Integración de alertas de OCI con la API de SMS de Syniverse

Introducción

En este tutorial, creará una alerta basada en el uso de la CPU y configurará Syniverse para enviar una alerta de SMS cuando alcance el umbral definido.

La solución que proporcionamos utiliza Oracle Notifications Service (ONS) para enviar notificaciones de eventos y alarmas a una función que pueda llamar a la API de SMS de Syniverse para enviar el mensaje SMS. Creamos una solución lista para la producción donde todo está parametrizado y también incluimos el almacén de objetos, donde almacenamos los números de teléfono para enviar los SMS y Oracle Vaults para almacenar las credenciales de la API de Syniverse.

Creamos ONS con un tema para recibir la alerta de notificación y una suscripción a ese tema para llamar a la función de Oracle. Configuramos la alarma de supervisión. Por ejemplo, siempre que el uso de CPU supere el 70%, una función de Oracle dispara ONS para llamar al punto final de Syniverse para enviar el SMS.

En el siguiente diagrama se muestra cómo funciona.

Crear una cuenta y una clave de API de Syniverse

  1. Vaya a Syniverse Developer Community y cree una cuenta.

  2. Conéctese a la cuenta de Syniverse, vaya al menú Aplicaciones y haga clic en Crear nuevo.

  3. Introduzca lo siguiente:

    • Nombre de la aplicación: oci
    • Descripción: SMS en tiempo real con logs de OCI o de alerta de OCI
    • Cuenta: seleccione su cuenta inicial
  4. Después de crear la aplicación, haga clic en el nombre de la aplicación y amplíe Claves de autenticación para ver los detalles de la API. Esta información se utiliza en la función de Oracle y en los almacenes.

Para obtener más información, consulte aquí.

Creación de un compartimento de OCI

  1. Conéctese a la consola de OCI como administrador y, en el menú de la esquina superior izquierda, seleccione Identidad y, a continuación, seleccione Compartimentos.

  2. Haga clic en Crear compartimento y utilice el siguiente ejemplo para crear el compartimento:

    • Nombre: syniverse_compartment
    • Compartimento principal: seleccione un compartimento (si desea convertirlo en secundario de un compartimento existente, seleccione el compartimento principal correspondiente; de lo contrario, acepte el contenedor raíz por defecto).

Crear Oracle Vault

  1. En el menú de la esquina superior izquierda, seleccione Seguridad y, a continuación, seleccione Almacén.

  2. Seleccione syniverse_compartment que creó.

  3. Haga clic en Crear almacén y cree un almacén con el nombre syniverse_api_credentials.

  4. Seleccione el almacén, haga clic en Crear clave y cree una clave con nombre syniverse_token.

  5. Haga clic en el enlace Secretos en Recursos en el panel de navegación izquierdo

  6. Haga clic en Crear secreto y utilice el siguiente ejemplo:

    • Nombre: secret_token
    • Clave de cifrado: seleccione la syniverse_token que ha creado anteriormente.
    • Contenido del secreto: aquí debe agregar el token de acceso desde Syniverse
  7. Haga clic en el secreto my-secret, copie el OCID secreto y sustituya el valor del archivo func.yaml

Cree un grupo dinámico para Oracle Vault.

  1. En el menú de la esquina superior izquierda, seleccione Identidad y, a continuación, seleccione Grupos dinámicos.

  2. Haga clic en Crear grupo dinámico y utilice el siguiente ejemplo:

    • Nombre: siniverse-secret-group
    • Regla: cualquier {instance.compartment.id = ''}

Creación de un cubo y carga de un archivo en Object Storage

  1. Creación de un cubo.

    1. En el menú de la esquina superior izquierda, seleccione Infraestructura básica y, a continuación, seleccione Object Storage.

    2. Seleccione el compartimento syniverse_compartment que ha creado.

    3. Haga clic en Crear cubo y cree un cubo con el nombre syniverse_phone_target_list

  2. Cree y cargue un archivo con el número de teléfono. La función tiene una dependencia de almacén de objetos porque lee el archivo con teléfonos de destinatario para enviar el SMS.

    1. Cree un archivo local denominado numbers.txt y agregue el número de teléfono que desea utilizar para su caso. El archivo debe estar delimitado por comas sin espacios.

    2. En la pantalla de detalles de Object Storage, haga clic en Cargar objetos y seleccione el archivo numbers.txt que desea cargar. Por ejemplo, el archivo number.txt puede contener algo como:

      +3530871231234, +35308712312345
      

      Opcionalmente, puede agregar una política para restringir el acceso a este cubo o archivo a algunas personas.

  3. Cree un grupo dinámico para Oracle Function Read Object Storage.

    1. En el menú de la esquina superior izquierda, seleccione Identidad y, a continuación, seleccione Grupos dinámicos.

    2. Haga clic en Crear grupo dinámico y utilice el siguiente ejemplo:

      • Nombre: fn-obj-store-group
      • Regla: TODOS {resource.type = 'fnfunc', resource.compartment.id = ''}
  4. Cree una política para este grupo dinámico.

    1. En el menú de la esquina superior izquierda, seleccione Identidad y, a continuación, seleccione Políticas.

    2. Haga clic en Crear política y utilice el siguiente ejemplo:

      • Nombre: fn-obj-store-list-policy

      • Sentencias: en Policy Builder, haga clic en Cutmomize (avanzado)

        allow dynamic-group fn-obj-store-list to manage all-resources in compartment my-compartment
        

Creación de una red virtual en la nube (VCN)

  1. En el menú de la esquina superior izquierda, seleccione Infraestructura básica, seleccione Red y, a continuación, seleccione Redes virtuales en la nube.

  2. Seleccione el compartimento syniverse_compartment que ha creado.

  3. Haga clic en Iniciar asistente de VCN, seleccione VCN con conectividad a Internet y haga clic en Iniciar asistente de VCN.

  4. Agregue un nombre de VCN y mantenga todos los valores por defecto.

  5. Haga clic en Siguiente y confirmar para crear la VCN.

Creación de una función de Oracle

  1. En el menú de la esquina superior izquierda, seleccione Servicio de desarrollador y, a continuación, seleccione Funciones.

  2. Seleccione el compartimento syniverse_compartment que ha creado.

  3. Haga clic en Crear aplicación y cree una aplicación con el nombre syniverse_notification. Seleccione el compartimento, la VCN y la subred que ha creado.

  4. Inicie Cloud Shell.

  5. Utilice el contexto de su región:

    fn list contextfn list context
    fn use context us-phoenix-1
    
  6. Actualice el contexto con el ID de compartimento de la función:

    fn update context oracle.compartment-id <**compartment-id**>
    
  7. Actualice el contexto con la ubicación del registro que desea utilizar:

    fn update context registry phx.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]
    

    Sustituya phx por el código de región de tres dígitos.

  8. Haga clic en Generar un token de autenticación.

    Inicie sesión en el registro utilizando el token de autenticación como contraseña:

    docker login phx.ocir.io <-- Replace phx with the three-digit region code
    

    Se le pedirá la siguiente información:

    • Nombre de usuario: tenancyname/username
    • Contraseña: cree una contraseña

    Nota: si utiliza Oracle Identity Cloud Service, el nombre de usuario es nombre de arrendamiento/oracleidentitycloudservice/nombre de usuario.

  9. Genere una función de texto fijo "hola mundo":

    fn init --runtime python syniverse
    

    Esta función creará una carpeta "syniverse" con un simple ejemplo de fn python.

    Sustituya el contenido de los archivos por el siguiente código.

    1. Importe los módulos de Python necesarios, como se muestra en el siguiente fragmento:

      import io
      import os
      import oci
      import json
      import requests
      import logging
      import datetime
      import base64
      from fdk import response
      
    2. Defina una función para analizar los datos alart y llame a la API de Syniverse para enviar el SMS.

       if "body" in log:
           body = log.get("body")
       else:
           body = ""
      
       if "timestampEpochMillis" in log:
           time_in_millis = log.get("timestampEpochMillis") / 1000.0
           dt = datetime.datetime.fromtimestamp(time_in_millis).strftime('%Y-%m-%d %H:%M')
           body = body + "\ntime " + dt
       else:
           body = body + ""
      
    3. Llame a la API de Syniverse con la carga útil necesaria.

       secret_token = os.environ['SYNIVERSE_TOKEN']
       response_token = read_secret_value(secret_client, secret_token)
       response_host = os.environ['SYNIVERSE_HOST']
       response_channel = os.environ['SYNIVERSE_CHANNEL']
      
       syniversehost = response_host
       syniversetoken = "Bearer " + response_token
       syniversechannel = "channel:" + response_channel
      
       payload = {}
       payload.update({"from":syniversechannel})
       payload.update({"to":phone})
       payload.update({"body":body})
      

      La parte de configuración contiene las configuraciones del almacén de objetos, el espacio de nombres, el nombre del cubo y el nombre de archivo junto con las configuraciones de Syniverse, la URL de punto final de Syniverse y el token de autenticación que ha almacenado en el almacén en el paso 3.

      Función.yaml

          schema_version: 20180708
          name: syniverse
          version: 0.0.335
          runtime: python
          entrypoint: /python/bin/fdk /function/func.py handler
          memory: 1024
          timeout: 120
          config:
      SYNIVERSE_TOKEN: <i><paste OCID secret_token here></i>
      SYNIVERSE_HOST: https://api.syniverse.com/scg-external-api/api/v1/messaging/message_requests
      SYNIVERSE_CHANNEL: <Syniverse API channel>
      SYNIVERSE_NAMESPACE: <OCI tenancy name>
      SYNIVERSE_BUCKET_NAME: synivese_phone
      SYNIVERSE_OBJECT_NAME: numbers.txt
      

      requisitos.txt

      fdk
      requests
      oci
      

      ejemplo de notificación json

      {"dedupeKey":"8303d9fb-e3b8-4d49-a888-64bef88f3dbd","title":"syniverse","body":"High CPU usage alert in \\"syniverse\\" instance","type":"OK_TO_FIRING","severity":"CRITICAL","timestampEpochMillis":1605622680000,"alarmMetaData":[{"id":"<i><paste OCID.alarm.oc1.phx.xxxxxxxxxxxxxxxxxxx></i>","status":"FIRING","severity":"CRITICAL","query":"CpuUtilization[1m]{resourceDisplayName = \\"instance-syniverse\\"}.max() > 70","totalMetricsFiring":1,"dimensions":[{"instancePoolId":"Default","resourceDisplayName":"instance-syniverse","faultDomain":"FAULT-DOMAIN-2","resourceId":"*<paste OCID here>*","availabilityDomain":"YVsm:PHX-AD-1","imageId":"<i><paste ocid1.image.oc1.phx.yyyyyyyyyyyyyyy></i>","region":"us-phoenix-1","shape":"VM.Standard.E3.Flex"}]}],"version":1.0}
      

      Puede obtener más información sobre la API de Syniverse aquí.

  10. Cree la aplicación:

    fn create app syniverse --annotation oracle.com/oci/subnetIds= '["ocid1.subnet.oc1.phx.aaaaxxxxxxxxxxx"]'
    

    Cambie subnetIds para el OCID de subred.

  11. Desplegar su función:

    fn -v deploy --app syniverse
    
  12. Cree una política para la función de Oracle.

    1. En el menú de la esquina superior izquierda, seleccione Identidad y, a continuación, seleccione Políticas.

    2. Haga clic en Crear política y utilice el siguiente ejemplo:

      • Nombre: oracle_funcgion_policy
      • Sentencias: en Policy Builder, haga clic en Cutmomize (avanzado)
      allow service FAAS to use virtual-network-family in tenancy
      allow service FAAS to read repos in tenancy
      

Crear una instancia informática

  1. En el menú de la esquina superior izquierda, seleccione Recursos informáticos y, a continuación, seleccione Instancias.

  2. Haga clic en Crear instancia y utilice el siguiente ejemplo:

    • Nombre: siniverso de instancia
    • Imagen: deje el valor por defecto de Oracle Linux 7.8 o seleccione Oracle Linux 6.10
    • Cambiar unidad: seleccione la unidad
    • Configuración de redes: seleccione la VCN, el compartimento de subred y la subred que ha creado.
    • Agregar claves SSH: agregue la clave pública ssh rsa

Creación de un Tema y una Suscripción para Oracle Notification Service

  1. En el menú de la esquina superior izquierda, seleccione Integración de aplicación y, a continuación, seleccione Notificaciones.

  2. Haga clic en Crear tema y cree un tema con el nombre Syniverse_SNS_Notification.

  3. Seleccione el tema, haga clic en Crear suscripción y utilice el siguiente ejemplo:

    • Protocolo: función
    • Compartimento de función: seleccione el compartimento syniverse_compartment que ha creado
    • Aplicación de función: syniverse_notification
    • Función: siniverso

Creación de una definición de alarma

  1. En el menú de la esquina superior izquierda, seleccione Supervisión y, a continuación, seleccione Definiciones de alarma.

  2. Haga clic en Crear alarma y utilice el siguiente ejemplo:

    • Nombre de alarma: uso de CPU del 70%
    • Gravedad de la alarma: Crítica
    • Cuerpo de la alarma: Alarma de OCI: siniverso. CpuUtilization: 70
  3. En Descripción de métrica, seleccione el compartimento syniverse_compartment, seleccione Espacio de nombre de métrica como oci_computeagent, Nombre de métrica como CpuUtilization, Intervalo como 1m y Estadística como máximo.

  4. En Regla de disparador, seleccione un valor mayor que 70

  5. En Notificación, seleccione Servicio de destino como servicio de notificación, seleccione el compartimento syniverse_compartment y seleccione Tema como Syniverse_SMS_Notification

Instale las herramientas de estrés para realizar una prueba de estrés en la instancia informática.

  1. SSH a su instancia informática:

    ssh -i ~/path/for/ssh-key.key opc@your_machine_ip
    
  2. Instale stress:

    sudo yum install stress
    
  3. Ejecute el comando para iniciar el esfuerzo: esto inicia el flujo de demostración completo.

    stress --cpu 20 --io 4 --vm 4 --vm-bytes 1024M --timeout 60s
    

Solución de problemas

En esta sección se muestra cómo puede utilizar una alerta de correo electrónico simple para supervisar el estado de la solución.

Función

Para obtener más información sobre Functions, consulte la documentación técnica.

Creación de un tema y una suscripción para el servicio de notificación

  1. En el menú de la esquina superior izquierda, seleccione Integración de aplicación y, a continuación, seleccione Notificaciones.

  2. Haga clic en Crear tema y cree un tema con el nombre my_function_status

  3. Seleccione el tema, haga clic en Crear suscripción y utilice el siguiente ejemplo:

    • Protocolo: envíe un correo electrónico y agregue una suscripción a su correo electrónico.
  4. La suscripción se creará en estado "Pendiente". Recibirá un correo electrónico de confirmación y deberá hacer clic en el enlace del correo electrónico para confirmar su dirección de correo electrónico.

Comprobar métricas y crear una definición de alarma a partir de métricas

  1. En el menú de la esquina superior izquierda, seleccione Servicios para desarrolladores y, a continuación, seleccione Funciones.

  2. Seleccione la aplicación y la función que desea supervisar

  3. En la página Métricas, vaya al gráfico "Errores de funciones", haga clic en Opciones y cree una alarma en esta consulta.

  4. agregue un nombre y, en Notificación, seleccione Servicio de destino como servicio de notificación, seleccione el compartimento your_compartment y seleccione Tema como my_function_status

Notificación

En esta sección se muestra cómo puede utilizar una alerta de correo electrónico simple para supervisar el estado de Oracle Notification Service (ONS).

Para obtener más información, consulte la documentación técnica.

Crear un tema y una suscripción para el servicio de notificación

  1. En el menú de la esquina superior izquierda, seleccione Integración de aplicación y, a continuación, seleccione Notificaciones.

  2. Haga clic en Crear tema y cree un tema con el nombre my_ons_status

  3. Seleccione el tema, haga clic en Crear suscripción y utilice el siguiente ejemplo:

    • Protocolo: envíe un correo electrónico y agregue una suscripción a su correo electrónico.
  4. La suscripción se creará en estado "Pendiente". Recibirá un correo electrónico de confirmación y deberá hacer clic en el enlace del correo electrónico para confirmar su dirección de correo electrónico.

Comprobar métricas y crear una definición de alarma a partir de métricas

  1. En el menú de la esquina superior izquierda, seleccione Integración de aplicación y, a continuación, seleccione Notificación.

  2. Seleccione la notificación que desea supervisar y haga clic en el enlace métricas en recursos en el panel de navegación izquierdo.

  3. En el gráfico que desea agregar la alarma, por ejemplo, "Recuento de mensajes fallidos", haga clic en Opciones y cree una alarma en esta consulta.

  4. agregue un nombre y, en Notificación, seleccione Servicio de destino como servicio de notificación, seleccione el compartimento your_compartment y seleccione Tema como my_ons_status

Conclusión

En este tutorial se muestra cómo los clientes de Oracle Cloud Infrastructure y Syniverse pueden configurar una solución con una alta capacidad de ampliación y una baja sobrecarga para crear y enviar SMS desde alertas de Oracle Cloud Infrastructure con Oracle Functions.

Agradecimientos

Author - Igor Aragao de Souza

Más recursos de aprendizaje

Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.

Para obtener documentación sobre los productos, visite Oracle Help Center.