Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta grátis, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
-
Vá para a Comunidade do Desenvolvedor Autônomo e crie uma conta.
-
Acesse sua conta do Syniverse, vá até o menu Aplicativos e clique em Criar Novo.
-
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
-
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
-
Acesse a Console do OCI como Administrador e, no menu no canto superior esquerdo, selecione Identidade e Compartimentos.
-
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
-
No menu no canto superior esquerdo, selecione Segurança e, em seguida, selecione Vault.
-
Selecione syniverse_compartment que você criou.
-
Clique em Criar Vault e crie um vault com o nome syniverse_api_credentials.
-
Escolha seu vault, clique em Criar Chave e crie uma chave com o syniverse_token name.
-
Clique no link Segredos em Recursos no painel de navegação esquerdo
-
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
-
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.
-
No menu no canto superior esquerdo, selecione Identidade e Grupos Dinâmicos.
-
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
-
Criar um Bucket.
-
No menu no canto superior esquerdo, selecione Infraestrutura Básica e, em seguida, selecione Object Storage.
-
Selecione o compartimento syniverse_compartment que você criou.
-
Clique em Criar Bucket e crie um Bucket com o nome syniverse_phone_target_list
-
-
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.
-
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.
-
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.
-
-
Crie um grupo dinâmico para o Oracle Function, leia o Object Storage.
-
No menu no canto superior esquerdo, selecione Identidade e Grupos Dinâmicos.
-
Clique em Criar Grupo Dinâmico e use o seguinte exemplo:
- Nome: fn-obj-store-group
- Regra: TODOS {resource.type = 'fnfunc', resource.compartment.id = '
'}
-
-
Crie uma Política para este grupo dinâmico.
-
No menu no canto superior esquerdo, selecione Identidade e Políticas.
-
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)
-
No menu no canto superior esquerdo, selecione Infraestrutura Básica, selecione Rede e depois Redes Virtuais na Nuvem.
-
Selecione o compartimento syniverse_compartment que você criou.
-
Clique em Start VCN Wizard e escolha VCN com conectividade com a internet e clique em Start VCN Wizard.
-
Adicione um nome de VCN e mantenha todos os valores padrão.
-
Clique em Próximo e confirmar para criar a VCN.
Criar um Oracle Function
-
No menu no canto superior esquerdo, selecione Serviço do Desenvolvedor e Funções.
-
Selecione o compartimento syniverse_compartment que você criou.
-
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.
-
Iniciar o Cloud Shell.
-
Use o contexto da sua região:
fn list contextfn list context fn use context us-phoenix-1
-
Atualize o contexto com o ID do compartimento da função:
fn update context oracle.compartment-id <**compartment-id**>
-
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.
-
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.
-
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.
-
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
-
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 + ""
-
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.
-
-
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.
-
Implante sua função:
fn -v deploy --app syniverse
-
Crie uma Política para a função Oracle.
-
No menu no canto superior esquerdo, selecione Identidade e Políticas.
-
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
-
No menu no canto superior esquerdo, selecione Computação e, em seguida, selecione Instâncias.
-
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
-
No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações.
-
Clique em Criar Tópico e crie um tópico com o nome Syniverse_SNS_Notification.
-
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
-
No menu no canto superior esquerdo, selecione Monitoramento e Definições de alarme.
-
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
-
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
-
Na Regra do acionador, selecione Valor maior que 70
-
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.
-
SSH para sua instância de computação:
ssh -i ~/path/for/ssh-key.key opc@your_machine_ip
-
Instale stress:
sudo yum install stress
-
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
-
No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações
-
Clique em Criar Tópico e crie um tópico com o nome my_function_status
-
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
-
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
-
No menu no canto superior esquerdo, selecione Serviços do Desenvolvedor e, em seguida, selecione Funções
-
Escolha o aplicativo e a função que você deseja monitorar
-
Na página Métricas, vá para o gráfico "Erros de Funções", clique em Opções e Criar um Alarme nesta Consulta
-
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
-
No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificações
-
Clique em Criar Tópico e crie um tópico com o nome my_ons_status
-
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
-
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
-
No menu no canto superior esquerdo, selecione Integração de Aplicativos e, em seguida, selecione Notificação
-
Escolha a notificação que você deseja monitorar e clique no link métricas em recursos no painel de navegação esquerdo
-
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
-
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.
Integrate OCI alerts with Syniverse SMS API
F51370-01
December 2021
Copyright © 2021, Oracle and/or its affiliates.