Observação:

Integrar alertas do OCI com a API SMS Syniverse

Introdução

Neste tutorial, você criará um alerta com base na utilização da CPU e configurará o Sinverso para enviar um alerta SMS quando atingir o limite definido.

A solução que fornecemos usa o ONS (Oracle Notifications Service) para fornecer notificações de eventos e alarmes para uma Função que possa chamar a API de SMS Syniverse, para enviar a mensagem SMS. Construímos uma solução pronta para produção em que tudo é parametrizado e também incluímos o Object Store, onde armazenamos os números de telefone para enviar o SMS e o Oracle Vaults para armazenar as credenciais da API sinversa.

Criamos ONS com um tópico para receber o alerta de notificação e uma assinatura desse tópico para chamar a função Oracle. Nós configuramos o alarme de monitoramento. Por exemplo, sempre que a Utilização da CPU exceder 70%, uma Função Oracle disparará o ONS para chamar o ponto final Syniverse para enviar o SMS.

O diagrama a seguir mostra como isso funciona.

Criar uma Conta Inversa e uma chave de API

  1. Vá para a Comunidade do Desenvolvedor Autônomo e crie uma conta.

  2. Acesse sua conta do Syniverse, vá até o menu Aplicativos e clique em Criar Novo.

  3. Informe o seguinte:

    • Nome do Aplicativo: oci
    • Descrição: SMS em tempo real com Alertas do OCI ou logs do OCI
    • Conta: Escolha sua conta inicial
  4. Após criar o aplicativo, clique no nome do aplicativo e expanda Chaves de Autenticação para ver os detalhes da API. Usamos essas informações na Função e nos Vaults da Oracle.

Para obter mais informações, verifique aqui.

Criar um Compartimento do OCI

  1. Acesse a Console do OCI como Administrador e, no menu no canto superior esquerdo, selecione Identidade e Compartimentos.

  2. Clique em Criar Compartimento e use o seguinte exemplo para criar o compartimento:

    • Nome: syniverse_compartment
    • Compartimento Pai: Selecione um compartimento (se você quiser torná-lo filho de um compartimento existente, selecione o compartimento pai relevante; caso contrário, aceite o contêiner raiz padrão)

Criar um Oracle Vault

  1. No menu no canto superior esquerdo, selecione Segurança e, em seguida, selecione Vault.

  2. Selecione syniverse_compartment que você criou.

  3. Clique em Criar Vault e crie um vault com o nome syniverse_api_credentials.

  4. Escolha seu vault, clique em Criar Chave e crie uma chave com o syniverse_token name.

  5. Clique no link Segredos em Recursos no painel de navegação esquerdo

  6. Clique em Criar Segredo e use o seguinte exemplo:

    • Nome: secret_token
    • Chave de Criptografia: Selecione syniverse_token que você criou anteriormente
    • Conteúdo do Segredo: aqui você deve adicionar o Token de acesso do Syniverse
  7. Clique no segredo my-secret, copie o OCID secreto e substitua o valor no arquivo func.yaml

Crie um grupo Dinâmico para o Oracle Vault.

  1. No menu no canto superior esquerdo, selecione Identidade e Grupos Dinâmicos.

  2. Clique em Criar Grupo Dinâmico e use o seguinte exemplo:

    • Nome: syniverse-secret-group
    • Regra: qualquer {instance.compartment.id = ''}

Criar um Bucket e Fazer Upload de um Arquivo para o Serviço Object Storage

  1. Criar um Bucket.

    1. No menu no canto superior esquerdo, selecione Infraestrutura Básica e, em seguida, selecione Object Storage.

    2. Selecione o compartimento syniverse_compartment que você criou.

    3. Clique em Criar Bucket e crie um Bucket com o nome syniverse_phone_target_list

  2. Crie e faça upload de um arquivo com o número de telefone. A Função tem uma dependência de armazenamento de objetos porque lê o arquivo com telefones do destinatário para enviar o SMS.

    1. Crie um arquivo local chamado numbers.txt e adicione o número de telefone que você deseja usar para seu caso. O arquivo deve ser delimitado por vírgula sem espaços.

    2. Na tela de detalhes do serviço Object Storage, clique em Fazer Upload de Objetos e selecione o arquivo numbers.txt para fazer upload. Por exemplo, o arquivo number.txt pode conter algo como:

      +3530871231234, +35308712312345
      

      Opcionalmente, você pode adicionar uma Política para restringir o acesso a esse bucket ou arquivo a algumas pessoas.

  3. Crie um grupo dinâmico para o Oracle Function, leia o Object Storage.

    1. No menu no canto superior esquerdo, selecione Identidade e Grupos Dinâmicos.

    2. Clique em Criar Grupo Dinâmico e use o seguinte exemplo:

      • Nome: fn-obj-store-group
      • Regra: TODOS {resource.type = 'fnfunc', resource.compartment.id = ''}
  4. Crie uma Política para este grupo dinâmico.

    1. No menu no canto superior esquerdo, selecione Identidade e Políticas.

    2. Clique em Criar Política e use o seguinte exemplo:

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

      • Instruções: no Policy Builder, clique em Recortar(avançado)

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

Criar Rede Virtual na Nuvem (VCN)

  1. No menu no canto superior esquerdo, selecione Infraestrutura Básica, selecione Rede e depois Redes Virtuais na Nuvem.

  2. Selecione o compartimento syniverse_compartment que você criou.

  3. Clique em Start VCN Wizard e escolha VCN com conectividade com a internet e clique em Start VCN Wizard.

  4. Adicione um nome de VCN e mantenha todos os valores padrão.

  5. Clique em Próximo e confirmar para criar a VCN.

Criar um Oracle Function

  1. No menu no canto superior esquerdo, selecione Serviço do Desenvolvedor e Funções.

  2. Selecione o compartimento syniverse_compartment que você criou.

  3. Clique em Criar Aplicativo e crie um aplicativo com o nome syniverse_notification. Escolha o compartimento, a VCN e a sub-rede que você criou.

  4. Iniciar o Cloud Shell.

  5. Use o contexto da sua região:

    fn list contextfn list context
    fn use context us-phoenix-1
    
  6. Atualize o contexto com o ID do compartimento da função:

    fn update context oracle.compartment-id <**compartment-id**>
    
  7. Atualize o contexto com o local do registro que você deseja usar:

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

    Substitua o phx pelo código de região de três dígitos.

  8. Clique em Gerar um Token de Autenticação.

    Acesse o Registro usando o Token de Autenticação como senha:

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

    Você será solicitado a especificar as seguintes informações:

    • Nome do Usuário: nome da tenancy/nome do usuário
    • Senha: Crie uma senha

    Observação: se você usar o Oracle Identity Cloud Service, seu nome de usuário será tenancyname/oracleidentitycloudservice/username.

  9. Gere uma função padrão 'hello-world':

    fn init --runtime python syniverse
    

    Esta função criará uma pasta "sinosa" com um exemplo simples de fn python.

    Substitua o conteúdo dos arquivos pelo código abaixo.

    1. Importe os módulos Python necessários, conforme mostrado no seguinte trecho de código:

      import io
      import os
      import oci
      import json
      import requests
      import logging
      import datetime
      import base64
      from fdk import response
      
    2. Defina uma função para analisar os dados regulares e chame a API Syniverse para enviar o 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. Chame a API Syniverse, com o payload necessário.

       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})
      

      A parte de configuração contém as configurações do Armazenamento de Objetos, o namespace, o nome do bucket e o nome do arquivo, juntamente com as configurações do Syniverse, o URL do ponto final do Syniverse e o token para autenticação que você armazenou no vault na Etapa 3.

      func.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
      

      limite de requisitos

      fdk
      requests
      oci
      

      amostra de notificação 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}
      

      Mais detalhes sobre a API Syniverse podem ser encontrados aqui.

  10. Crie o aplicativo:

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

    Altere subnetIds para seu OCID de sub-rede.

  11. Implante sua função:

    fn -v deploy --app syniverse
    
  12. Crie uma Política para a função Oracle.

    1. No menu no canto superior esquerdo, selecione Identidade e Políticas.

    2. Clique em Criar Política e use o seguinte exemplo:

      • Nome: oracle_funcgion_policy
      • Instruções: no Policy Builder, clique em Recortar(avançado)
      allow service FAAS to use virtual-network-family in tenancy
      allow service FAAS to read repos in tenancy
      

Criar uma Instância de Computação

  1. No menu no canto superior esquerdo, selecione Computação e, em seguida, selecione Instâncias.

  2. Clique em Criar Instância e use o seguinte exemplo:

    • Nome: transversal à instância
    • Imagem: Deixe o padrão Oracle Linux 7.8 ou selecione Oracle Linux 6.10
    • Alterar Forma: Selecione sua forma
    • Configurando a rede: Selecione a VCN, o compartimento de sub-rede e a sub-rede que você criou
    • Adicionar chaves SSH: adicione sua chave pública ssh rsa

Criar um Tópico e uma Assinatura para o Oracle Notification Service

  1. No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações.

  2. Clique em Criar Tópico e crie um tópico com o nome Syniverse_SNS_Notification.

  3. Escolha seu tópico, clique em Criar Assinatura e use o seguinte exemplo:

    • Protocolo: função
    • Compartimento de Função: Selecione o compartimento syniverse_compartment que você criou
    • Aplicativo da Função: syniverse_notification
    • Função: sinônimo

Criar uma Definição de Alarme

  1. No menu no canto superior esquerdo, selecione Monitoramento e Definições de alarme.

  2. Clique em Criar Alarme e use o seguinte exemplo:

    • Nome do Alarme: 70% de Utilização da CPU
    • Prioridade do alarme: Crítico
    • Corpo do alarme: Alarme do OCI: sinônimo. CpuUtilization: 70
  3. Em Descrição da métrica, selecione o compartimento syniverse_compartment, selecione Namespace de métricas como oci_computeagent, Nome da métrica como CpuUtilization, Intervalo como 1m e Estatística como Máximo

  4. Na Regra do acionador, selecione Valor maior que 70

  5. Em Notificação, selecione Serviço de destino como serviço de notificação, selecione o compartimento syniverse_compartment e selecione Tópico como Syniverse_SMS_Notification

Instale Ferramentas de Estresse para fazer um Teste de Estresse na sua Instância do Compute.

  1. SSH para sua instância de computação:

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

    sudo yum install stress
    
  3. Execute o comando para iniciar o estresse: Isso inicia o fluxo de demonstração completo.

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

Solução de Problemas

Esta seção mostra como usar um alerta de e-mail simples para monitorar o status de sua solução.

Função

Para obter mais detalhes sobre o serviço Functions, consulte a documentação técnica.

Criar um Tópico e uma Assinatura para o Serviço de Notificação

  1. No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações

  2. Clique em Criar Tópico e crie um tópico com o nome my_function_status

  3. Escolha seu tópico, clique em Criar Assinatura e use o seguinte exemplo:

    • Protocolo: Envie um e-mail e adicione a criação de uma assinatura com seu e-mail
  4. A assinatura será criada com o status "Pendente". Você receberá um e-mail de confirmação e precisará clicar no link do e-mail para confirmar seu endereço de e-mail.

Verificar Métricas e Criar uma Definição de Alarme com Base em Métricas

  1. No menu no canto superior esquerdo, selecione Serviços do Desenvolvedor e, em seguida, selecione Funções

  2. Escolha o aplicativo e a função que você deseja monitorar

  3. Na página Métricas, vá para o gráfico "Erros de Funções", clique em Opções e Criar um Alarme nesta Consulta

  4. adicione um nome e, em Notificação, selecione Serviço de destino como serviço de notificação, selecione o compartimento your_compartment e selecione Tópico como my_function_status

Notificação

Esta seção mostra como você pode usar um alerta de e-mail simples para monitorar o status de nosso ONS (Oracle Notification Service).

Para obter mais detalhes, consulte a documentação técnica.

Criar um tópico e uma assinatura para o Serviço de Notificação

  1. No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações

  2. Clique em Criar Tópico e crie um tópico com o nome my_ons_status

  3. Escolha seu tópico, clique em Criar Assinatura e use o seguinte exemplo:

    • Protocolo: Envie um e-mail e adicione a criação de uma assinatura com seu e-mail
  4. A assinatura será criada com o status "Pendente". Você receberá um e-mail de confirmação e precisará clicar no link do e-mail para confirmar seu endereço de e-mail.

Verificar Métricas e Criar uma Definição de Alarme com Base em Métricas

  1. No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificação

  2. Escolha a notificação que você deseja monitorar e clique no link métricas em recursos no painel de navegação esquerdo

  3. No gráfico que você deseja adicionar o alarme, por exemplo, "Contagem de Mensagens com Falha", clique em Opções e Criar um Alarme nesta Consulta

  4. adicione um nome e, em Notificação, selecione Serviço de destino como serviço de notificação, selecione o compartimento your_compartment e selecione Tópico como my_ons_status

Conclusão

Este tutorial mostra como os clientes do Oracle Cloud Infrastructure e da Syniverse podem configurar uma solução altamente escalável com sobrecarga baixa para criar e enviar SMS de alertas do Oracle Cloud Infrastructure usando o Oracle Functions.

Agradecimentos

Autor - Igor Aragao de Souza

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.