Observação:

Mover logs do Oracle Cloud Infrastructure para o Sumo Logic

Introdução

A plataforma de Observabilidade e Gerenciabilidade do Oracle Cloud visa atender nossos clientes onde estão. Entendemos que eles padronizaram suas posturas operacionais com ferramentas de observabilidade de terceiros populares e queremos ser interoperáveis com essas ferramentas para que nossos clientes possam continuar usando as ferramentas nas quais investiram com o Oracle Cloud Infrastructure (OCI).

Neste tutorial, você verá como é possível mover logs do OCI para o Sumo Logic. O Sumo Logic é uma ferramenta de observabilidade popular que fornece serviços de monitoramento e segurança que oferecem total visibilidade de seus aplicativos.

Nossa arquitetura de solução em um alto nível é a seguinte:

Criar um Coletor de Origem HTTP Personalizado no Sumo Logic

Na sua conta do Sumo Logic, você precisa criar um aplicativo coletor personalizado HTTP, conforme descrito nas etapas abaixo.

  1. Clique em Assistente de Configuração.

  2. Clique em Iniciar dados de streaming no Sumo Logic.

  3. Clique em Seu Aplicativo Personalizado.

  4. Clique em Origem HTTPS.

  5. Configure sua origem HTTP conforme mostrado abaixo.

    Observação: A origem HTTP é uma tag de metadados, armazenada com os logs ingeridos e é útil ao pesquisar e filtrar logs posteriormente no Sumo Logic. Cada linha de log que vamos ingerir começará com um timestamp de sua ocorrência de evento. Portanto, selecione a opção Usar fuso horário do arquivo de log.

    À medida que você vai para a próxima tela, obtemos o ponto final HTTPS para que nossos logs façam upload do OCI, usando uma chamada POST HTTP. Anote esse ponto final, pois vamos configurar nossa função para usar esse ponto final para fazer upload de logs para o Sumo Logic.

Configurar os Logs que Você Deseja Capturar

Você pode configurar quaisquer logs como entrada para o Service Connector Hub e, portanto, ingerir no Sumo Logic. Para simplificar este tutorial, capturaremos os logs gerados do OCI (Oracle Cloud Infrastructure) para eventos de gravação em um bucket arbitrário da sua escolha.

  1. Na Console do Oracle Cloud, clique no menu de navegação, selecione Registro em Log e, em seguida, selecione Grupos de Logs.

  2. Para criar um grupo de logs, clique em Criar Grupo de Logs.

  3. Selecione seu compartimento, adicione LogGroupForBucketActivity para o nome e adicione uma descrição. Clique em Criar.

  4. Selecione Logs no menu Log. Você verá uma tela semelhante a abaixo.

  5. Clique em Ativar log de serviço e especifique as seguintes informações:

    • Serviço: Selecionar Object Storage
    • Recurso: escolha um bucket arbitrário (por exemplo, BucketForSumoLogic) que você gostaria de observar com os logs.
    • Categoria de Log: Selecione Escrever Eventos de Acesso
    • Nome do Log: Informe um nome para o log, por exemplo, logForBucketActivity.
    • Grupo de Logs: Selecione o grupo de logs LogGroupForBucketActivity para o log que você acabou de criar na etapa anterior
  6. Clique em Ativar Log.

    Agora, toda vez que um objeto for submetido a upload para o bucket BucketForSumoLogic, uma entrada de log será adicionada ao log logForBucketActivity.

Configurar o Oracle Functions para Ingerir Logs no Sumo Logic

  1. Na Console do Oracle Cloud, clique no menu de navegação e selecione Solução e Plataforma. Selecione Funções no menu Serviços do Desenvolvedor.

  2. Clique em Criar Aplicativo e informe um nome, por exemplo, SumoLogicFnApp.

  3. Depois de criar o aplicativo, clique no nome do aplicativo e selecione Conceitos Básicos no menu Recursos.

  4. Iniciar o Cloud Shell.

  5. Use o contexto da sua região.

    fn list context
    fn use context us-ashburn-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 iad.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]
    

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

  8. Supondo que você já tenha criado o Token de Autorização, faça log-in no registro usando o Token de Autorização como senha.

    docker login iad.ocir.io
    

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

    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ê estiver usando o Oracle Identity Cloud Service, seu nome de usuário será <tenancyname>/oracleidentitycloudservice/<username>.

    Verifique sua configuração listando os aplicativos no compartimento.

    fn list apps
    
  9. Gere uma função padrão 'hello-world'.

    fn init --runtime python sumologicfn
    

    O comando fn init gerará uma pasta chamada SumoLogicfn com três arquivos dentro: func.py, func.yaml e requirements.txt.

    Abra func.py e substitua o conteúdo do arquivo pelo seguinte código.

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

      import io
      import json
      import logging
      import os
      
      import requests
      from fdk import response
      
    2. Defina uma função para analisar os dados de log e chamar a API do Sumo Logic para ingerir os logs.

      # This method is the entrypoint for your Function invokation 
      # aka the method invoked by the OCI Fn platform
      # it will receive the list of log entries from OCI as input in the form of bytestream
      # the method name will be defined in func.yml
      def handler(ctx, data: io.BytesIO = None):
          logger = logging.getLogger()
          logger.info("function start")
      
          # Sumologic endpoint URL to upload OCI logs to HTTP custom app.
          # this value will be defined defined in func.yaml
          sumologic_endpoint = os.environ['SUMOLOGIC_ENDPOINT']
      

      Para obter informações sobre o formato dos logs gerados pelo serviço Oracle Cloud Infrastructure Logging, consulte Visão Geral do Formato de Log.

    3. Recupere as entradas de log do Hub Conector do Serviço recebidas por nossa função sumologicfn como seu payload de chamada. Percorra essas entradas de log e linhas de log uma a uma.

      try:
          logentries = json.loads(data.getvalue()) # deserialize the bytesstream input as JSON array
          if not isinstance(logentries, list):
              logger.error('Invalid connector payload. No log queries detected')
              raise
      
          # Optional...log the input to the function as human readble JSON. 
          # Not to be used in production
          logger.info("json input from SCH")
          logger.info(data.getvalue()) 
      
          for logEntry in logentries: 
              logger.info("Extracting/Parse log details from the log entry json")
              event_name = logEntry["data"]["requestResourcePath"] + '\t'
              time_of_event = logEntry["time"] + '\t'
              cmpt_name = logEntry["data"]["compartmentName"] + '\t'
              bucket_namespace = logEntry["data"]["namespaceName"] + '\t'
              bucket_name = logEntry["data"]["bucketName"] + '\t'
              request_action = logEntry["data"]["requestAction"]
      
              log_line = time_of_event + event_name + cmpt_name + \
                          bucket_namespace + bucket_name + request_action
      
              # Call the Sumologic with the payload and ingest the OCI logs
              headers = {'Content-type': 'text/plain'}
              response_from_sumologic = requests.post(sumologic_endpoint,
                                                      data=log_line,
                                                      headers=headers)
              logging.getLogger().info(response_from_sumologic.text)
      
          logger.info("function end")
          return
      
      except Exception as e:
           logger.error("Failure in the function: {}".format(str(e)))
           raise
      
  10. Substitua o conteúdo de func.yml da seguinte forma. Certifique-se de colocar o valor de SumoLogic_ENDPOINT que obtivemos na etapa anterior.

    schema_version: 20180708
    name: sumologicfn
    version: 0.0.1
    runtime: python
    entrypoint: /python/bin/fdk /function/func.py handler
    memory: 1024
    timeout: 120
    config:
      SUMOLOGIC_ENDPOINT: [YOUR SUMOLOGIC API ENDPOINT URL HERE]
    
  11. Substitua o conteúdo de requirements.txt da seguinte forma.

    fdk
    requests
    
  12. Implante sua função.

    fn -v deploy --app sumologicFnApp --no-bump
    
  13. Opcionalmente, você pode testar sua função SumoLogicfn com uma entrada de exemplo da seguinte maneira:

    curl -O https://raw.githubusercontent.com/mayur-oci/sumologicfn/main/example.json
    fn invoke sumologicFnApp sumologicfn < example.json
    

Criar um Conector de Serviço para Ler Logs do Log e Acionar a Função

  1. Na Console do Oracle Cloud, clique no menu de navegação e selecione Solução e Plataforma. Selecione Conectores de Serviço no menu Log.

  2. Clique em Criar Conector e, na lista drop-down Origem, selecione Log e, na lista drop-down Funções, selecione Destino.

  3. Em Configurar Conexão de Origem, selecione o nome do compartimento, o grupo de logs LogGroupForBucketActivity e os logs logForBucketActivity.

  4. Se você quiser usar logs de auditoria, clique em +Another log, escolha seu compartimento e adicione _Audit para Grupo de Logs.

  5. Se for solicitado a criar uma política para gravar em Funções, clique em Criar.

O Conector de Serviço agora está configurado e acionará a função para ingerir logs no Sumo Logic toda vez que encontrar logs no serviço de Log.

Visualizar Logs do Oracle Cloud Infrastructure no Sumo Logic

  1. No Sumo Logic, selecione o menu Origem - Aplicativo Personalizado para ver os logs ingeridos do OCI (Oracle Cloud Infrastructure) usando nossa função SumoLogicfn.

Solução de Problemas

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

Para obter mais detalhes, consulte Visão Geral do Serviço Functions.

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

  1. Na Console do Oracle Cloud, no menu de navegação no canto superior esquerdo, selecione Integração de Aplicativos e 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 de navegação no canto superior esquerdo, selecione Serviços do Desenvolvedor e 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, em seguida, clique em Criar um Alarme nesta Consulta.

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

Monitorar o Hub Conector do Serviço de Status

Esta seção mostra como você pode usar um alerta de e-mail simples para monitorar o status do Hub Conector do Serviço (SCH).

Para obter mais detalhes, consulte Visão Geral do Service Connector Hub.

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

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

  2. Clique em Criar Tópico e crie um tópico com o nome my_sch_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 de navegação no canto superior esquerdo, selecione Log e, em seguida, selecione Conectores de Serviço.

  2. Escolha o conector que você deseja monitorar e, na lista Recursos no painel de navegação esquerdo, selecione Métricas.

  3. No gráfico de métricas ao qual você deseja adicionar o alarme, por exemplo, "Erros do Service Connector Hub", clique em Opções e Criar um Alarme nesta Consulta.

  4. Adicione um nome e, em Notificação, selecione Serviço de destino como o serviço de notificação, selecione your_compartment e, em seguida, selecione Tópico como my_sch_status.

Conclusão

Este tutorial mostrou como os clientes Oracle Cloud Infrastructure e Sumo Logic podem configurar uma solução altamente escalável com pouca sobrecarga para mover logs do Oracle Cloud Infrastructure Logging para o Sumo Logic usando o Service Connector Hub e o Oracle Functions.

Agradecimentos

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.