Criação de perfis de aplicações Node.js
Esta página descreve como modificar a sua aplicação Node.js para capturar dados de criação de perfis e enviar esses dados para o seu projeto do Google Cloud. Google CloudPara ver informações gerais acerca da criação de perfis, consulte o artigo Conceitos de criação de perfis.
Tipos de perfis para Node.js:
- Memória
- Tempo entre o início e o fim da tarefa
Versões de linguagem Node.js compatíveis:
- Node.js 14 ou superior
- Para ver a política de lançamento do Node.js, consulte o cronograma de lançamentos.
Versões do agente de criação de perfis suportadas:
- A versão mais recente do agente é suportada. Geralmente, as versões com mais de um ano não são suportadas. Recomendamos que use a versão do agente lançada mais recentemente.
Sistemas operativos compatíveis:
- Linux. A criação de perfis de aplicações Node.js é suportada para kernels Linux cuja biblioteca C padrão seja implementada com
glibc
ou commusl
. Para ver informações de configuração específicas dos kernels do Linux Alpine, consulte o artigo Execução no Linux Alpine.
Ambientes suportados:
- Compute Engine
- Google Kubernetes Engine (GKE)
- Ambiente flexível do App Engine
- Ambiente padrão do App Engine
- Fora de Google Cloud (Para obter informações sobre os requisitos de configuração adicionais, consulte o artigo Criar perfis de aplicações em execução fora de Google Cloud.)
Ativar a API Profiler
Antes de usar o agente de criação de perfis, certifique-se de que a API Profiler subjacente está ativada. Pode verificar o estado da API e ativá-la, se necessário, através da CLI do Google Cloud ou da Google Cloud consola:
CLI gcloud
Se ainda não instalou a CLI do Google Cloud na sua estação de trabalho, consulte a documentação da CLI do Google Cloud.
Execute o seguinte comando:
gcloud services enable cloudprofiler.googleapis.com
Para mais informações, consulte
gcloud services
.
Google Cloud consola
-
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Se for apresentada a mensagem API ativada, significa que a API já está ativada. Caso contrário, clique no botão Ativar.
Conceda a função do IAM à conta de serviço
Se estiver a implementar a sua aplicação em Google Cloud recursos e se estiver a usar a conta de serviço predefinida e não tiver modificado as concessões de funções para essa conta de serviço, pode ignorar esta secção.
Se realizar qualquer uma das seguintes ações, tem de conceder à conta de serviço a função do IAM de
agente do Cloud Profiler (roles/cloudprofiler.agent
):
- Está a usar a conta de serviço predefinida, mas modificou as concessões de funções.
- Está a usar uma conta de serviço criada pelo utilizador.
- Está a usar a identidade da carga de trabalho. Conceda a função de agente do Cloud Profiler à conta de serviço do Kubernetes.
Pode conceder uma função de IAM a uma conta de serviço através da
Google Cloud consola ou da CLI do Google Cloud. Por exemplo, pode usar o comando
gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
--member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudprofiler.agent
Antes de usar o comando anterior, substitua o seguinte:
- GCP_PROJECT_ID: o ID do seu projeto.
- MY_SVC_ACCT_ID: o nome da sua conta de serviço.
Para ver informações detalhadas, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Usar o Cloud Profiler
Em todos os ambientes suportados, usa o Profiler instalando o pacote @google-cloud/profiler
, adicionando uma declaração require
à sua aplicação e, em seguida, implementando a aplicação da forma habitual.
Antes de instalar o @google-cloud/profiler
O pacote @google-cloud/profiler
depende de um módulo incorporado. Estão disponíveis binários pré-criados para este módulo integrado para Linux e Alpine Linux para o Node 14 e 16. Não são necessárias dependências adicionais.
O @google-cloud/profiler
usa o node-pre-gyp
para determinar que ficheiro binário pré-criado instalar.
Quando usar o @google-cloud/profiler
noutros ambientes que não tenham
binários pré-criados, o módulo
node-gyp
é usado para criar binários.
Para obter informações sobre as dependências necessárias para criar ficheiros binários com o
node-gyp
, consulte a documentação de instalação do
node-gyp
.
Instalação
Para instalar a versão mais recente do Cloud Profiler, faça o seguinte:
npm install @google-cloud/profiler
Se também estiver a usar o agente de rastreio, quando modificar a sua aplicação, importe o pacote do Profiler após o pacote do agente de rastreio (@google-cloud/trace-agent
).
Compute Engine
Para o Compute Engine, faça o seguinte:
Instale a versão mais recente do Cloud Profiler:
npm install @google-cloud/profiler
Modifique o código
require
da aplicação para criar um objetoserviceContext
que atribua aservice
o nome do serviço que está a ser analisado. Opcionalmente, pode atribuir à versão do serviço que está a ser analisado.version
Consulte Argumentos de nome e versão do serviço para mais informações sobre estas opções de configuração:
GKE
Para o GKE, faça o seguinte:
Modifique o Dockerfile para instalar o pacote do Profiler:
FROM node:10 ... RUN npm install @google-cloud/profiler
Modifique o código
require
da aplicação para criar um objetoserviceContext
que atribua aservice
o nome do serviço que está a ser analisado. Opcionalmente, pode atribuir à versão do serviço que está a ser analisado.version
Consulte Argumentos de nome e versão do serviço para mais informações sobre estas opções de configuração:
App Engine
Para o ambiente flexível do App Engine e o ambiente padrão do App Engine, o código require
é semelhante ao seguinte:
No App Engine, os parâmetros service
e version
são derivados do ambiente, pelo que não tem de os especificar. Por isso, não precisa de criar um objeto serviceContext
.
Analisar dados
Depois de o Perfilador recolher dados, pode ver e analisar estes dados através da interface do Perfilador.
Na Google Cloud consola, aceda à página Profiler:
Também pode encontrar esta página através da barra de pesquisa.
Argumentos de nome e versão do serviço
Quando carrega o agente do Profiler, especifica um argumento service-name e um argumento service-version opcional para o configurar.
O nome do serviço permite que o Profiler recolha dados de criação de perfis para todas as réplicas desse serviço. O serviço de criação de perfis garante uma taxa de recolha de um perfil por minuto, em média, para cada nome de serviço em todas as combinações de versões e zonas de serviço.
Por exemplo, se tiver um serviço com duas versões em execução em réplicas em três zonas, o criador de perfis cria uma média de 6 perfis por minuto para esse serviço.
Se usar nomes de serviços diferentes para as suas réplicas, o serviço é perfilado com mais frequência do que o necessário, com uma sobrecarga correspondentemente mais elevada.
Ao selecionar um nome do serviço:
Escolha um nome que represente claramente o serviço na arquitetura da sua aplicação. A escolha do nome do serviço é menos importante se executar apenas um único serviço ou aplicação. É mais importante se a sua aplicação for executada como um conjunto de microsserviços, por exemplo.
Certifique-se de que não usa valores específicos do processo, como um ID do processo, na string service-name.
A string service-name tem de corresponder a esta expressão regular:
^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$
Uma boa diretriz é usar uma string estática como imageproc-service
como o nome do serviço.
A versão do serviço é opcional. Se especificar a versão do serviço, o Profiler pode agregar informações de criação de perfis de várias instâncias e apresentá-las corretamente. Pode ser usado para marcar diferentes versões dos seus serviços à medida que são implementadas. A IU do Profiler permite-lhe filtrar os dados por versão do serviço. Desta forma, pode comparar o desempenho de versões mais antigas e mais recentes do código.
O valor do argumento service-version é uma string de forma livre, mas os valores
deste argumento têm normalmente o aspeto de números de versão, por exemplo,
1.0.0
ou 2.1.2
.
Registo do agente
O agente de criação de perfis pode comunicar informações de registo. Para ativar o registo,
defina a opção logLevel
ao iniciar o agente.
Os valores logLevel
suportados são:
0
: desativa todo o registo do agente.1
: ativa o registo de erros.2
: ativa o registo de avisos (predefinição).3
: ativa o registo de informações.4
: ativa o registo de depuração.
Defina o valor logLevel
no mesmo objeto que fornece o contexto do serviço:
require('@google-cloud/profiler').start({
serviceContext: { ... }
logLevel: 3
});
Execução com o Linux Alpine
O agente de criação de perfis do Node.js para o Linux Alpine só é suportado para configurações do Google Kubernetes Engine.
Erro de compilação
Se executar npm install
e a compilação falhar com o seguinte erro, significa que
o seu Dockerfile tem algumas dependências de compilação em falta:
ERR! stack Error: not found: make
Para resolver este problema, adicione a seguinte declaração à fase de compilação do Dockerfile:
RUN apk add python3 g++ make
Erro de autenticação
Se usar imagens do Docker executadas com o
Linux Alpine
(como golang:alpine
ou apenas alpine
),
pode ver o seguinte erro de autenticação:
connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"
Tenha em atenção que, para ver o erro, tem de ter o registo do agente ativado.
O erro indica que as imagens do Docker com o Linux Alpine não têm os certificados SSL de raiz instalados por predefinição. Esses certificados são necessários para que o agente de criação de perfis comunique com a API Profiler. Para resolver este erro, adicione o seguinte comando apk
ao seu Dockerfile:
FROM alpine
...
RUN apk add --no-cache ca-certificates
Em seguida, tem de recriar e voltar a implementar a aplicação.
Problemas conhecidos
O agente de criação de perfis para Node.js interfere com a saída normal do programa. Pode demorar até uma hora para que o programa termine depois de todas as tarefas no programa terem sido concluídas. Quando emite um SIGINT, por exemplo, através de Ctrl-C
, o processo termina de forma adequada.
O que se segue?
- Selecione os perfis a analisar
- Interaja com o gráfico de rastreio em pilhas sobrepostas
- Filtre o gráfico de rastreio em pilhas sobrepostas
- Foque o gráfico de rastreio em pilhas sobrepostas
- Compare perfis