1. Introdução
Neste codelab, você vai aprender a usar as ferramentas de geração de registros e monitoramento disponíveis para todos os desenvolvedores que trabalham com o Cloud Functions. As ferramentas vêm com todas as funções do Cloud que você implanta em todas as linguagens compatíveis e ajudam a aumentar a produtividade ao escrever e operar seu código sem servidor.

Você vai usar uma função do Cloud acionada por HTTP, mas tudo o que você aprender também se aplica a outras linguagens e a funções do Cloud acionadas por outros eventos.
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Cloud Shell
Embora o Cloud Functions e os recursos de geração de registros e monitoramento possam ser usados remotamente em seu laptop, você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
O Cloud Shell é uma máquina virtual com base em Debian que contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Isso significa que tudo que você precisa para este codelab é um navegador (sim, funciona em um Chromebook).
- Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell
. Leva apenas alguns instantes para provisionar e se conectar ao ambiente.
Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto estará configurado com seu PROJECT_ID.
gcloud auth list
Resposta ao comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se, por algum motivo, o projeto não estiver definido, basta emitir o seguinte comando:
gcloud config set project <PROJECT_ID>
Quer encontrar seu PROJECT_ID? Veja qual ID você usou nas etapas de configuração ou procure-o no painel do Console do Cloud:
O Cloud Shell também define algumas variáveis de ambiente por padrão, o que pode ser útil ao executar comandos futuros.
echo $GOOGLE_CLOUD_PROJECT
Resposta ao comando
<PROJECT_ID>
- Defina a zona padrão e a configuração do projeto:
gcloud config set compute/zone us-central1-f
É possível escolher uma variedade de zonas diferentes. Para mais informações, consulte Regiões e zonas.
3. Implantar uma função simples do Cloud
Para ter algo para monitorar, crie uma função do Cloud "Hello, World". No menu à esquerda do console do Google Cloud, clique em Cloud Functions e depois em Criar função.

Insira "hello-monitor" como o nome da nova função do Cloud Functions.

Mantenha todos os padrões do código-fonte. No entanto, você pode escolher outra linguagem/outro tempo de execução, se quiser.

Por fim, clique em Criar.

Sua função do Cloud vai aparecer com uma marca de seleção verde ao lado, o que significa que ela está pronta para ser invocada.

4. Testar a função do Cloud e enviar tráfego usando um gerador de carga
Agora que a Função do Cloud foi implantada com sucesso, teste-a na linha de comando.
Primeiro, use o Cloud Shell para emitir o seguinte comando:
$ gcloud functions describe hello-monitor
Isso vai retornar uma descrição da função do Cloud, incluindo um URL para httpsTrigger, que é o endpoint HTTP(S) para invocar a função do Cloud. Ele vai ficar assim: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Agora, acionar a função do Cloud é tão simples quanto usar o comando curl nesse URL.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Agora use o Vegeta, uma ferramenta simples de teste de carga HTTP. Para instalar, basta digitar o seguinte comando no Cloud Shell :
$ go get -u github.com/tsenart/vegeta
Para enviar algum tráfego para sua função do Cloud (cinco solicitações por segundo por alguns minutos), use o seguinte comando:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Navegar pelos registros
Na visualização de detalhes da função do Cloud, clique em Ver registros.

Isso vai levar você à seção do Stackdriver Logging do seu projeto, mostrando apenas os registros do Cloud Functions.

Todas as solicitações à sua função do Cloud Functions precisam retornar um código de status 200.
Ao visualizar os registros, é possível fazer o seguinte:
- Filtre por nível de registro. No seu caso, todos os registros estão no nível
debug. - Selecione um período específico (relativo ou absoluto).
- Ative o streaming de registros (com Play
na parte de cima da tela). - Copie um link para a entrada de registro (para compartilhar com membros da equipe).
- Mostra uma entrada de registro no contexto do recurso.
- Fixar uma entrada de registro (como uma dica visual).
- Exporte registros para o BigQuery, Cloud Storage ou Pub/Sub ou simplesmente faça o download deles como arquivos JSON ou CSV.
6. Atualizar a função
No console do Cloud, navegue até a visualização Detalhes da função e observe o pico que você criou com o testador de carga no número de invocações por segundo e no tempo de execução.

Outra ferramenta mais detalhada para observar a latência e as chamadas RPC é o Stackdriver Trace, mas antes de usá-lo, você precisa fazer algumas mudanças no Cloud Functions. Faça o seguinte:
- Adicione o pacote
node-emoji, que salva vidas, como uma dependência. - Atualize o código da função para usar o módulo node-emoji e introduza alguma latência.
- Adicione uma variável de ambiente para ativar o Stackdriver Trace para o Cloud Functions.
Em Detalhes da função, clique em Editar para modificar a função.

Edite o arquivo package.json para adicionar uma dependência do pacote node-emoji.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Edite a função mudando o conteúdo de index.js para o seguinte:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
Isso adiciona um emoji aleatório à mensagem retornada pela função do Cloud depois de uma pausa de 300 milissegundos.
Por fim, adicione uma variável de ambiente do Cloud Functions chamada GOOGLE_CLOUD_TRACE_ENABLED e defina como true da seguinte maneira:

Clique em Salvar.
Volte ao Cloud Shell e execute o comando para gerar alguma carga na função do Cloud recém-implantada:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Agora você pode observar a lista de rastreamentos produzidos sem outros requisitos de configuração e sem uma biblioteca de rastreamento específica no seu código.
7. Rastrear a função do Cloud atualizada
No menu à esquerda, navegue até Lista de rastreamento (em Stackdriver Trace).

Você vai ver algo parecido com a seguinte captura de tela:

Isso deve deixar bem claro que a latência introduzida na sua função do Cloud é medida em 300 milissegundos.
Cada ponto no gráfico é uma solicitação para a qual você pode ver informações detalhadas, como carimbo de data/hora, método e status HTTP, rótulos, um link para a entrada de registro correspondente e qualquer chamada RPC subsequente feita pela função do Cloud.

Para aumentar o zoom, clique e arraste no gráfico. 
Para diminuir o zoom, clique em Desfazer zoom na parte de cima da página.
Como você implantou uma única função do Cloud, o gráfico mostra apenas solicitações GET no URI hello-monitor. No entanto, é possível filtrar rastreamentos por método HTTP (GET, POST, DELETE), status HTTP (2XX, 3XX) ou usando o filtro de solicitação.
Acesse Visão geral no menu à esquerda:

Nessa página de visão geral, você encontra rastreamentos recentes e outros insights.

Também é possível criar relatórios personalizados com base em uma combinação de um filtro de solicitação de URI, um método HTTP, um status HTTP e um período. Ele ainda permite comparar os valores gerados com um período de referência.

Se você conseguir configurar os períodos corretos com pontos de dados suficientes, poderá gerar um relatório que mostre a mudança importante de latência entre a função inicial do Cloud Functions e a nova.


Esse relatório personalizado pode ser usado para descobrir quando um problema de desempenho foi introduzido e para rastrear um indicador de nível de serviço (SLI), como a latência de solicitação do usuário final.
8. Hora de limpar os recursos
Isso conclui o codelab.
Embora o Cloud Functions e as ferramentas do Stackdriver sejam plataformas sem servidor que não geram custos quando não estão em uso, seja um bom cidadão da nuvem e exclua sua função do Cloud Functions. Basta selecionar hello-monitor em Visão geral em Cloud Functions e clicar em Excluir.

9. A seguir
Confira mais informações:
/