1. Introdução
Neste codelab, você vai aprender a aproveitar as ferramentas de geração de registros e monitoramento disponíveis para todos os desenvolvedores que trabalham com o Cloud Functions. As ferramentas são fornecidas com todas as funções do Cloud implantadas em todas as linguagens com suporte e devem permitir que você seja mais produtivo ao escrever e operar seu código sem servidor.
Você vai usar uma função do Cloud acionada por HTTP, mas tudo o que foi abordado também se aplica a outras linguagens e ao Cloud Functions acionado 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 dele possam ser usados remotamente no 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 um "Hello, World" função do Cloud. No menu à esquerda do console do Google Cloud, clique em Cloud Functions e, depois, em Criar função.
Digite "hello-monitor". como o nome da nova função do Cloud.
Mantenha todos os padrões do código-fonte. No entanto, você pode escolher um idioma/ambiente de execução diferente, se quiser.
Por fim, clique em Criar.
Você verá a função do Cloud listada 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, teste-a na linha de comando.
Primeiro, usando o Cloud Shell, emita o seguinte comando:
$ gcloud functions describe hello-monitor
Isso 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 tem a seguinte aparência: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Acionar a função do Cloud agora será 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, no Cloud Shell, basta digitar o seguinte comando :
$ 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 levará você à seção "Stackdriver Logging" do projeto, que mostra apenas os registros da função do Cloud.
Todas as solicitações para a função do Cloud retornarão um código de status 200.
Ao visualizar os registros, é possível fazer o seguinte:
- filtrar por nível de registro (no seu caso, todos os registros são de nível
debug
); - Selecione um período específico (relativo ou absoluto).
- Ative o streaming de registros (com Reproduzir
na parte superior da tela).
- Copie um link para a entrada de registro (para compartilhar com os membros da equipe).
- Mostra uma entrada de registro no contexto do recurso.
- Fixe uma entrada de registro (como uma sugestão visual).
- Exporte os registros para o BigQuery, Cloud Storage ou Pub/Sub (ou faça o download deles como arquivos JSON ou CSV).
6. Atualizar a função
No console do Cloud, acesse 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.
O Stackdriver Trace é outra ferramenta mais detalhada para observar a latência e as chamadas RPC, mas, antes de usá-lo, você precisa fazer algumas alterações 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 de emoji de nó e introduzir um pouco de 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 ao pacote node-emoji
.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Edite a função real 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 após uma pausa de 300 milissegundos.
Por fim, adicione uma variável de ambiente da função do Cloud chamada GOOGLE_CLOUD_TRACE_ENABLED
e defina como true
da seguinte maneira:
Clique em Salvar.
Volte ao Cloud Shell e recupere o comando para gerar 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 está tudo pronto para você observar a lista de traces produzidos sem outros requisitos de configuração nem com bibliotecas de rastreamento específicas no código.
7. Rastrear a função do Cloud atualizada
Usando o menu à esquerda, navegue até Lista de traces (em Stackdriver Trace).
Você verá algo semelhante à captura de tela abaixo:
Isso deve deixar bem claro que a latência introduzida no Cloud Functions é de fato medida em 300 milissegundos.
Cada ponto no gráfico é uma solicitação com informações detalhadas, como carimbo de data/hora, método e status HTTP, os 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, basta clicar e arrastar 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
, mas é possível filtrar os traces por método HTTP (GET, POST, DELETE) pelo 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, é possível encontrar traces recentes e outros insights.
Também é possível criar relatórios personalizados com base em uma combinação de filtro de solicitação de URI, método HTTP, status HTTP e período. É possível até mesmo comparar os valores gerados com um valor de referência de tempo.
Se você conseguir configurar os períodos corretos com pontos de dados suficientes, será possível produzir um relatório que mostra a importante mudança de latência entre a função do Cloud inicial e a nova.
Esse relatório personalizado pode ser usado para descobrir quando um problema de desempenho foi introduzido e rastrear um indicador de nível de serviço (SLI), como a latência das solicitações 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. Basta selecionar hello-monitor
em Visão geral, em Cloud Functions, e clicar em Excluir.
9. A seguir
Aqui está uma leitura complementar:
/