As métricas no nível de requisição oferecem uma visão detalhada de cada invocação de função e ajudam a entender o desempenho das suas funções. Use essas métricas para detectar e localizar problemas rapidamente, além de analisar gargalos na aplicação. Ative as métricas no nível de requisição para gerenciar e otimizar melhor suas aplicações de funções.
O que são métricas no nível de requisição
As métricas no nível de requisição resumem o status de execução de cada requisição de função. Quando ativadas, o sistema coleta métricas para cada execução da função — incluindo métricas de desempenho, exceção e rastreamento — e as entrega ao Logstore selecionado durante a configuração de log.
Métricas de desempenho: uso de memória, tempo de execução da função, tempo de inicialização, informações de cold start, entre outros.
Métricas de exceção: indicam se a execução falhou e apresentam detalhes do erro.
Métricas de rastreamento: duração da execução do caminho crítico, status da amostragem de rastreamento distribuído e, para funções HTTP, o caminho, código de status e endereço IP do cliente.
Após ativar as métricas no nível de requisição, o Function Compute entrega as métricas de execução de cada requisição ao seu Logstore no seguinte formato.
activeInstances: 0
activeInstancesPerFunction: 0
durationMs: 1.56
functionName: sync-clone
hasFunctionError: false
hostname: sr-65a76c74-1224f354965f43a...
instanceID: c-65a77eb0-15416274-ff5addb...
invocationStartTimestamp: 1705476027407
invocationType: Sync
invokeFunctionLatencyMs: 2.92
invokeFunctionStartTimestamp: 1705476027406
ipAddress: 21.0
isColdStart: false
memoryMB: 512
memoryUsageMB: 8.99
operation: InvokeFunction
qualifier: LATEST
requestId: 1-65a77fbb-157f3f32-e1ee24b17e49
resourceMode: OnDemand
Cenários
-
Use as métricas de requisição para visualizar detalhes de execução da função, métricas de desempenho e informações de erro.
O console fornece uma lista de requisições baseada nas métricas no nível de requisição. Use essa interface para visualizar informações detalhadas de cada requisição, incluindo status de execução, ID da instância, duração da execução, uso de memória e logs de requisição.
Na aba Logs da página de detalhes da função, selecione a subaba Invocation Requests para visualizar a lista de requisições. Os filtros acima da lista incluem Show logs only for the current version or alias, Show only function errors, Show only client errors e Show only cold start requests.
NotaÉ possível visualizar a lista de requisições sem ativar as métricas no nível de requisição, mas os dados podem ser imprecisos nos seguintes cenários.
Quando múltiplos RequestIds idênticos aparecem repetidamente — comum em cenários de nova tentativa de invocação assíncrona — não é possível localizar logs para uma requisição específica.
Em ambientes de runtime personalizado ou runtime de imagem personalizada, se o seu código imprimir tanto
FC Invoke Start RequestId: xxxquantoFC Invoke End RequestId: xxx, uma única invocação aparecerá duas vezes na lista de requisições.
-
Use as métricas de requisição para buscas personalizadas e criação de painéis customizados.
As métricas de requisição são entregues ao seu Logstore no formato
key:val. Crie painéis personalizados com base nas necessidades do seu negócio. Para obter instruções, consulte Criar um painel.
Observações
-
Escopo
Os logs de métricas no nível de requisição são uma configuração no nível da função. Uma vez ativados, aplicam-se à função atual, e cada execução gera uma entrada de log.
-
Custo
A entrega de logs ao Simple Log Service gera taxas de armazenamento. Para detalhes de preços, consulte Preços.
Ativar métricas no nível de requisição
Ativar métricas no nível de requisição no console
Pré-requisitos
-
Function Compute
-
Simple Log Service (SLS)
Procedimento
Faça login no console do Function Compute. No painel de navegação à esquerda, selecione .
Na barra de menu superior, selecione uma região. Na página Functions, clique em na função desejada.
Na página de configuração da função, selecione a aba Configuration.
-
Localize Advanced Settings e clique em Modify à direita. No painel Advanced Configuration, vá até a seção Logging, ative Instance-level Metrics e clique em Deploy.
A tabela a seguir descreve os principais itens de configuração. Mantenha todas as outras configurações com seus valores padrão.
Item de configuração
Descrição
Valor de exemplo
Logging
Define se os logs de invocação da função serão armazenados no Simple Log ServiceSLS. Para mais informações, consulte Configurar logging.
Enabled
Log project
Selecione um projeto de log existente.
aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba***
Logstore
Selecione um Logstore existente.
function-log
Log segmentation rule
Define se a segmentação de log será ativada. Se ativada, o Function Compute divide os logs em vários segmentos conforme a regra e grava cada segmento no SLS.
Enabled
Request-level metrics
Define se as métricas no nível de requisição serão coletadas. Se ativado, as métricas de cada invocação de função são coletadas e entregues ao Logstore especificado na configuração de log.
Enabled
Instance-level metrics
Define se as métricas no nível de instância serão ativadas. Se ativado, as métricas da instância são entregues ao Logstore especificado na configuração de log.
Enabled
Ativar métricas no nível de requisição usando Serverless Devs
Pré-requisitos
Procedimento
-
Crie um diretório de código com a seguinte estrutura.
. ├── code │ └── index.js └── s.yamlNo exemplo, o campo enableRequestMetrics configura as métricas no nível de requisição. Antes de ativá-lo, ative primeiro o logging e defina logstore e project como um Logstore e um projeto de log existentes na sua conta.
edition: 3.0.0 name: hello-world-app access: "default" vars: # Global variables region: "cn-hangzhou" resources: hello_world: component: fc3 # Component name props: region: ${vars.region} functionName: "start-nodejs-****" description: 'hello world by serverless devs' runtime: "nodejs16" code: ./code handler: index.handler memorySize: 128 timeout: 30 logConfig: # Update logstore and project to match your setup. Alternatively, use logConfig:auto to auto-create them. enableInstanceMetrics: true enableRequestMetrics: true # Enable request-level metrics to collect execution metrics for every invocation logBeginRule: DefaultRegex logstore: 'your-logstore' project: 'your-project' -
Execute o comando a seguir para implantar a aplicação.
sudo s deploy -yApós a implantação bem-sucedida, faça login no console do Function Compute para confirmar que as métricas no nível de requisição estão ativadas para a função implantada.
Consulta de log
Formato de log
Os logs de métricas no nível de requisição usam o formato de tópico: FCRequestMetrics:/functionName. No Simple Log Service, use a condição de consulta __topic__: "FCRequestMetrics:/functionName" para filtrar todos os logs de métricas no nível de requisição. Para mais informações, consulte Guia rápido de consulta e análise.
Campos de métrica
As métricas no nível de requisição registram as seguintes informações.
|
Nome da métrica |
Descrição |
Valor de exemplo |
Registrado em toda invocação? |
|
functionName |
Nome da função. |
my-function |
Sim |
|
versionId |
Nome da versão. |
12 |
Sim |
|
qualifier |
Alias do serviço. O padrão é LATEST. |
prod |
Sim |
|
requestId |
ID da requisição. |
db72ce53-ccbe-4216-af55-642622e01494 |
Sim |
|
operation |
Nome da ação. |
InvokeFunction |
Sim |
|
invocationType |
Existem dois tipos de chamada. Sync: chamada síncrona Async: invocação assíncrona |
Sync |
Sim |
|
memoryMB |
Limite de memória da função. |
512 |
Sim |
|
memoryUsageMB |
Memória consumida durante a execução da função. |
410 |
Sim |
|
durationMs |
Tempo de execução da requisição. |
20.20 |
Sim |
|
isColdStart |
Indica se houve um cold start. Nota
Um cold start ocorre quando o Function Compute recebe uma requisição, mas não possui nenhuma instância de função pronta para atendê-la. O sistema precisa criar uma nova instância, baixar o código e inicializar o ambiente de runtime. Definimos uma requisição de cold start como aquela que passa por todo o processo de criação de instância, download de código e inicialização do runtime. O Function Compute otimiza os cold starts pré-aquecendo instâncias. Se uma requisição chegar enquanto uma instância está sendo criada e encontrar uma instância pré-aquecida pronta, ela não será considerada um cold start. |
false |
Sim |
|
instanceEvent |
Evento da instância. Atualmente apenas ColdStart, registrado para requisições de cold start. |
ColdStart |
Não |
|
hasFunctionError |
Indica se a execução da função encontrou um erro. |
false |
Sim |
|
errorType |
Os erros de função se enquadram nos três tipos a seguir:
|
FunctionUnhandledError |
Não. Registrado apenas quando |
|
invokeFunctionLatencyMs |
Tempo de execução da função. |
99.00 |
Sim. Registrado em toda invocação. |
|
traceContext |
Contexto de rastreamento distribuído. |
371d3ff242fcee9:371d3ff242fcee9:0:1 |
Não. Registrado apenas quando o rastreamento distribuído está configurado. |
|
isSampled |
Indica se a requisição foi amostrada para rastreamento distribuído. |
true |
Não. Registrado apenas quando o rastreamento distribuído está configurado. |
|
resourceMode |
Tipo de instância usado para a requisição:
|
OnDemand |
Sim |
|
instanceID |
ID da instância. |
c-65603d8c-37e1bf7123054a77**** |
Sim |
|
hostname |
Hostname da instância. |
c-65603d8c-37e1bf7123054a77**** |
Sim |
|
ipAddress |
Endereço IP da instância. Observação: Este é o IP interno usado para distinguir instâncias, não o endereço IP público. |
21.0.XX.XX |
Sim |
|
activeInstances |
Número de instâncias ativas. |
1 |
Sim |
|
activeInstancesPerFunction |
Número de instâncias ativas para esta função. |
1 |
Sim |
|
scheduleLatencyMs |
Latência de agendamento. Maior durante cold starts. |
10.07 |
Sim |
|
coldStartStartTimestamp |
Timestamp de início do cold start. |
1700806029167 |
Não. Registrado apenas durante cold starts. |
|
coldStartLatencyMs |
Duração do cold start. |
487.65 |
Não. Registrado apenas durante cold starts. |
|
prepareCodeStartTimestamp |
Timestamp de início do download de código. Timestamp UNIX de 13 dígitos, precisão em milissegundos. |
1700806029167 |
Não. Registrado apenas durante cold starts. |
|
prepareCodeLatencyMs |
Duração do download de código. |
0.18 |
Não. Registrado apenas durante cold starts. |
|
runtimeInitializationStartTimestamp |
Timestamp de início da inicialização do runtime. |
1700806029168 |
Não. Registrado apenas durante cold starts. |
|
runtimeInitializationMs |
Duração da inicialização do runtime. |
487.37 |
Não. Registrado apenas durante cold starts. |
|
asyncAttemptStartTimestamp |
Para invocações assíncronas, execuções com falha são tentadas novamente até 3 vezes por padrão. Este parâmetro é o timestamp de início da ${retryCount}-ª nova tentativa. |
1700806028084 |
Não. Registrado apenas para invocações assíncronas. |
|
asyncAttemptLatencyMs |
Para invocações assíncronas, execuções com falha são tentadas novamente até 3 vezes por padrão. Este parâmetro é a duração da ${retryCount}-ª nova tentativa. |
1688.74 |
Não. Registrado apenas para invocações assíncronas. |
|
asyncMode |
Modo de invocação assíncrona:
|
Stateful |
Não. Registrado apenas para invocações assíncronas. |
|
retryCount |
Número de novas tentativas. |
0 |
Não. Registrado apenas para invocações assíncronas. |
Recuperar logs
Para recuperar logs, são necessários índices. O console do Function Compute configura os índices automaticamente. Após a indexação, use instruções SQL no console do Simple Log Service para pesquisar e filtrar requisições no seu Logstore. Especifique o tópico para limitar os resultados aos logs de métricas no nível de requisição.
Por exemplo, para encontrar requisições com tempo de execução superior a 1 segundo, use esta instrução SQL.
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction and durationMs>1000
Para sintaxe avançada de consulta, consulte Guia rápido de consulta e análise.
Criar um painel personalizado
Para criar um gráfico com tempo (t) no eixo x e valores de métrica no eixo y, use uma instrução SQL como esta.
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction | select __time__ - __time__ % 60 as t, count(*) as invocations, avg(durationMs) as avgDurationMs group by t order by t
Para mais informações sobre a criação de painéis personalizados, consulte Criar um painel.