Como registrar eventos do aplicativo com Ruby

Nesta parte do tutorial do app Bookshelf, ensinamos como um aplicativo pode incorporar registros detalhados para ajudar na detecção, na depuração e no monitoramento de problemas em potencial. O registro de eventos do aplicativo ajuda a identificar e resolver problemas durante o desenvolvimento e na fase de produção.

Esta página faz parte de um tutorial com várias páginas. Para começar do início e ver as instruções de configuração, consulte Aplicativo Bookshelf em Ruby.

Como instalar dependências

Acesse o diretório getting-started-ruby/5-logging e insira o seguinte comando:

bundle install

Como definir as configurações

  1. Copie o arquivo de configurações de exemplo.

    cp config/settings.example.yml config/settings.yml
    
  2. Edite o arquivo settings.yml, como você fez na seção Como autenticar usuários.

    Por exemplo, suponha que o ID do cliente do aplicativo da Web seja XYZCLIENTID, a chave secreta do cliente seja XYZCLIENTSECRET, o nome do projeto seja my-project e o nome do intervalo do Cloud Storage seja my-bucket. Então, a seção padrão do seu arquivo settings.yml ficaria assim:

    default: &default
      project_id: my-project
      gcs_bucket: my-bucket
      oauth2:
        client_id: XYZCLIENTID
        client_secret: XYZCLIENTSECRET
    
  3. Copie o arquivo de exemplo database.

    cp config/database.example.yml config/database.yml
    
  4. Configure o aplicativo de amostra para usar o mesmo banco de dados que você configurou durante a parte Como usar dados estruturados deste tutorial.

    Cloud SQL

    • Edite o arquivo database.yml. Remova os comentários das linhas da parte do Cloud SQL no arquivo.

       mysql_settings: &mysql_settings
         adapter: mysql2
         encoding: utf8
         pool: 5
         timeout: 5000
         username: [MYSQL_USER]
         password: [MYSQL_PASS]
         database: [MYSQL_DATABASE]
         socket: /cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]
      
      • Substitua [MYSQL_USER] e [MYSQL_PASS] pelo nome de usuário e pela senha da instância do Cloud SQL criados anteriormente.

      • Substitua [MYSQL_DATABASE] pelo nome do banco de dados criado anteriormente.

      • Substitua [YOUR_INSTANCE_CONNECTION_NAME] pelo Instance Connection Name da instância do Cloud SQL.

    • Execute as migrações.

      bundle exec rake db:migrate
      

    PostgreSQL

    • Edite o arquivo database.yml. Remova os comentários das linhas da parte do PostgreSQL no arquivo. Substitua os marcadores your-postgresql-* pelos valores do banco de dados e da instância do PostgreSQL. Por exemplo, suponha que seu endereço IPv4 seja 173.194.230.44, seu nome de usuário seja postgres, sua senha seja pword123 e o nome do seu banco de dados seja bookshelf. Então, a parte do PostgreSQL do seu arquivo database.yml seria assim:

      # PostgreSQL Sample Database Configuration
      # ----------------------------------------
        adapter: postgresql
        encoding: unicode
        pool: 5
        username: postgres
        password: pword123
        host: 173.194.230.44
        database: bookshelf
      
    • Crie as tabelas e o banco de dados necessários.

      bundle exec rake db:create
      bundle exec rake db:migrate
      

    Cloud Datastore

    • Edite o arquivo database.yml. Remova os comentários da linha na parte do Cloud Datastore no arquivo. Substitua your-project-id pelo código do projeto do Google Cloud Platform. Por exemplo, se o código do projeto for my-project, a parte do Cloud Datastore do arquivo database.yml será assim:

      # Google Cloud Datastore Sample Database Configuration
      # ----------------------------------------------------
      dataset_id: my-project
      
    • Execute uma tarefa "rake" para copiar os arquivos do projeto de amostra para o Cloud Datastore.

      bundle exec rake backend:datastore
      

Como executar o app na máquina local

  1. Inicie um servidor da Web local.

    bundle exec rails server
    
  2. No navegador da Web, digite este endereço:

    http://localhost:3000

Para sair do servidor da Web local, pressione Control+C.

Como implantar o app no ambiente flexível do App Engine

  1. Compile os recursos do JavaScript para produção.

    RAILS_ENV=production bundle exec rake assets:precompile
    
  2. Implante o app de amostra.

    gcloud app deploy
    
  3. No navegador da Web, digite o endereço a seguir.

    https://[YOUR_PROJECT_ID].appspot.com
    

Atualize o app e implante a versão atualizada com o mesmo comando usado para implantá-lo pela primeira vez. A implantação cria uma nova versão do app e a define como padrão. As versões mais antigas são mantidas, bem como as instâncias de VM associadas. Lembre-se de que essas versões do aplicativo e instâncias de VM são recursos passíveis de cobrança.

Reduza os custos excluindo as versões não padrão do app.

Para excluir uma versão do app:

  1. No Console do Cloud, acesse a página Versões do App Engine.

    Acessar a página "Versões"

  2. Marque a caixa de seleção da versão não padrão do app que você quer excluir.
  3. Clique em Excluir para remover a versão do app.

Para informações detalhadas sobre a remoção de recursos faturáveis, consulte a seção Como fazer a limpeza na etapa final deste tutorial.

Estrutura do app

O diagrama a seguir mostra como o aplicativo processa os registros depois de implantado no ambiente flexível do App Engine.

Como gerar registros da estrutura de exemplo - ambiente flexível do App Engine

Como visualizar registros

Durante a execução do app Bookshelf, ele grava dados da geração de registros coletados e disponibilizados no Console do Google Cloud Platform. É possível utilizar as ferramentas de monitoramento de registros no Console do GCP para analisar os registros diretamente. Se você quiser ver uma análise mais detalhada, use o Console do GCP para fazer streaming ou importar os registros do aplicativo para o BigQuery. Além disso, é possível exportá-los para um intervalo do Cloud Storage.

Como fazer login no Console do GCP

Noções básicas sobre o código

O Rails inclui um eficiente sistema de geração de registros configurável. O aplicativo Bookshelf configura o Rails para colocar os registros no diretório em que o ambiente flexível do App Engine espera encontrá-los.

if Dir.exist? "/var/log/app_engine/custom_logs"
  config.logger = ActiveSupport::TaggedLogging.new Logger.new("/var/log/app_engine/custom_logs/application.log")
end

Além das mensagens padrão fornecidas pelo Rails, é possível registrar tudo o que você quiser usando o objeto logger do Rails.

logger.debug "Debug message."
logger.info "Infomational."
logger.fatal "Fatal error."