O TCP-RT é uma ferramenta de monitoramento de TCP instrumentada no kernel que identifica pares de requisição/resposta em conexões TCP e captura métricas de tempo: tempo de upload, tempo de processamento do serviço e tempo de download. Ela funciona com protocolos que utilizam uma única requisição/resposta simultânea por conexão, incluindo HTTP/1.1, MySQL e Redis.
Duas versões estão disponíveis:
|
Versão |
Interface |
Requisito do sistema |
|
tcprt (recomendado) |
|
Alibaba Cloud Linux 3, kernel 5.10.134-17 ou posterior |
|
tcp_rt.ko |
|
Alibaba Cloud Linux 2 (kernel 4.19.91-21.al7 ou posterior) ou Alibaba Cloud Linux 3 |
Use o tcprt sempre que possível. O tcp_rt.ko é mantido para compatibilidade com o Alibaba Cloud Linux 2 e kernels mais antigos do Alibaba Cloud Linux 3.
Limitações
Exclusão mútua: Ambas as versões gravam no mesmo caminho de arquivo de log. Não há suporte para execução simultânea — use apenas uma versão por vez.
Suporte a protocolos: O TCP-RT exige uma única requisição/resposta simultânea por conexão, como HTTP/1.1, MySQL ou Redis.
Requisitos de kernel: O tcprt requer Alibaba Cloud Linux 3 com kernel 5.10.134-17 ou posterior. O tcp_rt.ko suporta Alibaba Cloud Linux 2 (kernel 4.19.91-21.al7 ou posterior) ou qualquer kernel do Alibaba Cloud Linux 3.
Modos de análise: O tcp_rt.ko suporta apenas o modo de análise
default. Os modoshttpehttpsestão disponíveis somente no tcprt.
Funcionamento
O TCP-RT instrumenta o kernel para registrar quatro timestamps por ciclo de requisição/resposta (chamado de TASK):
T0 — o primeiro pacote de requisição chega ao servidor
T1 — o último pacote de requisição chega ao servidor
T2 — o servidor envia o primeiro pacote de resposta
T3 — o servidor recebe o ACK final do cliente
Com base nesses timestamps, o TCP-RT deriva três métricas:
|
Métrica |
Intervalo |
O que mede |
|
|
T0 a T1 |
Tempo para a requisição do cliente chegar |
|
|
T1 a T2 |
Tempo de processamento do servidor |
|
|
T2 a T3 |
Tempo para a resposta alcançar o cliente |
O valor de download_time não aparece diretamente nos registros de log. Calcule-o da seguinte forma:
download_time = total_time - upload_time - process_time
Modo local (perspectiva do servidor)
Quando o TCP-RT é executado no servidor, ele registra os timestamps sob a perspectiva do servidor.
Modo peer (perspectiva do cliente)
Ao monitorar conexões de saída (modo peer), o TCP-RT registra os timestamps sob a perspectiva do cliente. Nesse modo, process_time corresponde ao intervalo entre o envio do último pacote de requisição pelo cliente e o recebimento do primeiro pacote de resposta.
Modos de análise
O modo de análise determina quais detalhes no nível de protocolo o TCP-RT captura:
|
Modo |
Baseado em |
O que adiciona |
|
|
— |
Análise genérica de requisição/resposta TCP (HTTP, Redis, MySQL) |
|
|
|
Métricas de tempo de ida e volta (RTT) e janela de congestionamento; detecta HTTP |
|
|
|
Análise de handshake TLS (Transport Layer Security) e detecção de alerta |
O tcp_rt.ko suporta apenas o modo de análisedefault. Os modoshttpehttpsestão disponíveis somente no tcprt.
Os detalhes sobre o que cada modo registra encontram-se em Formato de saída.
Configure o tcprt
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância executando Alibaba Cloud Linux 3 com versão de kernel 5.10.134-17 ou posterior
Acesso
sudona instância
Instale e inicie o tcprt
-
Instale o pacote tcprt.
sudo yum install -y tcprt -
Abra o arquivo de configuração.
sudo vim /etc/tcprt-bpf/tcprt.yaml Pressione
ipara entrar no modo de edição e configure os parâmetros necessários. Consulte Parâmetros de configuração para obter detalhes.Salve o arquivo: pressione
Esc, digite:wqe pressioneEnter.-
Inicie o serviço.
sudo systemctl start tcprt -
(Opcional) Configure o tcprt para iniciar automaticamente na inicialização do sistema.
sudo systemctl enable tcprt
Parâmetros de configuração
O arquivo de configuração possui três seções: global, per-port e init.
global
Aplica-se a todas as portas, a menos que seja substituído em per-port.
|
Parâmetro |
Descrição |
Valores |
Padrão |
|
|
Modo padrão de correspondência de porta. |
|
(vazio) |
|
|
Ativa a saída de log de estatísticas. |
|
|
|
|
Intervalo de saída das estatísticas. Unidade: segundos. |
Inteiro |
|
|
|
Limiares de bytes para estatísticas de tempo de conclusão. Unidade: byte. |
Lista de até 4 inteiros |
(vazio) |
per-port
Lista de configurações específicas por porta. Cada entrada substitui os padrões globais para essa porta.
|
Parâmetro |
Descrição |
Valores |
Padrão |
|
|
Número da porta ou intervalo (dois inteiros separados por vírgula para um intervalo fechado). |
Inteiro ou |
(obrigatório) |
|
|
Modo de correspondência para esta porta ou intervalo. |
|
Valor global de |
|
|
Modo de análise. |
|
|
|
|
Ativa estatísticas de tempo de conclusão por limiares de bytes. |
|
|
init
Configurações de buffer, ajustáveis apenas na inicialização do serviço.
|
Parâmetro |
Descrição |
Padrão |
|
|
Número de sub-buffers para arquivos de log. Tamanho máximo do log = |
|
|
|
Tamanho de cada sub-buffer de log. Unidade: byte. |
|
|
|
Número de sub-buffers para arquivos de estatísticas. Tamanho máximo das estatísticas = |
|
|
|
Tamanho de cada sub-buffer de estatísticas. Unidade: byte. |
|
Exemplo de configuração
O exemplo abaixo configura duas portas com modos de análise diferentes e ativa estatísticas de tempo de conclusão por limiar de bytes para a porta 443:
global:
peer: false # match local ports by default
stats: disable
stats_interval: 60
first_frame_bytes: [100, 2000, 20000, 0] # byte thresholds for R.F records
per-port:
-
port: 443
mode: https # enables TLS handshake parsing and Close Notify detection
first_frame: enable # appends completion-time steps to R records
-
port: 56789,56800 # monitors port range 56789–56800
mode: default
peer: true # match remote ports for this range
init:
log_buf_num: 8
log_buf_size: 262144
stats_buf_num: 8
stats_buf_size: 16384
As estatísticas de tempo de conclusão ( first_frame ) rastreiam limiares de bytes usando pacotes ACK. Como um único ACK pode confirmar uma grande rajada de dados, os volumes de dados registrados podem exceder os limiares configurados.
Desinstalar o tcprt
sudo yum remove tcprt
Digite y quando solicitado para confirmar.
Configure o tcp_rt.ko
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância executando Alibaba Cloud Linux 2 (kernel 4.19.91-21.al7 ou posterior) ou Alibaba Cloud Linux 3
Acesso
sudona instância
Carregar o módulo
Há duas abordagens disponíveis.
Opção 1: Definir parâmetros durante o carregamento
Carregue o módulo com parâmetros em um único comando. Por exemplo, para monitorar a porta local 80:
sudo modprobe tcp_rt lports=80
Verifique se o parâmetro foi aplicado:
sudo cat /sys/module/tcp_rt/parameters/lports
Opção 2: Carregar o módulo e depois definir parâmetros
-
Carregue o módulo.
sudo modprobe tcp_rt -
Grave os parâmetros em
/sys/module/tcp_rt/parameters/. Por exemplo, para monitorar a porta local 80:sudo sh -c 'echo 80 > /sys/module/tcp_rt/parameters/lports' -
Verifique o parâmetro.
sudo cat /sys/module/tcp_rt/parameters/lports
Parâmetros do módulo
|
Parâmetro |
Descrição |
Padrão |
Comando de exemplo |
|
|
Ativa a saída de estatísticas. |
|
|
|
|
Intervalo de saída das estatísticas. Unidade: segundos. |
|
|
|
|
Portas locais do servidor a serem monitoradas (até 6). |
(nenhum) |
|
|
|
Portas remotas de conexões TCP a serem monitoradas. |
(nenhum) |
|
|
|
Intervalos de portas locais. Dois inteiros por intervalo. |
(nenhum) |
|
|
|
Intervalos de portas remotas. Dois inteiros por intervalo. |
(nenhum) |
|
|
|
Tamanho máximo do log = |
|
|
|
|
Tamanho máximo das estatísticas = |
|
|
Descarregar o módulo
-
Desative o tcp_rt para que novas conexões não o utilizem mais.
sudo echo 1 > /sys/kernel/debug/tcp-rt/deactivate -
Confirme que nenhuma conexão existente está usando o módulo.
lsmodSe a contagem
Used byparatcp_rtfor0, não há conexões ativas. -
Descarregue o módulo.
sudo rmmod tcp_rt
Formato de saída
O TCP-RT gera dois tipos de arquivos em /sys/kernel/debug/tcp-rt via debugfs:
|
Tipo de arquivo |
Padrão de caminho |
Momento da saída |
|
Arquivo de log |
|
Quando a próxima TASK inicia em uma conexão ou quando a conexão é fechada |
|
Arquivo de estatísticas |
|
Periodicamente (padrão: a cada 60 segundos) |
Os arquivos de log residem no sistema de arquivos virtual/syse não consomem espaço em disco. O tamanho exibido porls -lreflete o volume acumulado de logs, não o uso real de disco. Para verificar o tamanho real do log, redirecione a saída para um arquivo comum:cat rt-network-log0 > /tmp/sample.log.
Cada núcleo de CPU possui seu próprio arquivo de log. Em um servidor de 32 núcleos, os arquivos variam de rt-network-log0 a rt-network-log31. Cada arquivo comporta até 2 MB; dados mais antigos são removidos quando o limite é atingido. A leitura de um arquivo de log é destrutiva — os dados são apagados após cada leitura.
Formato do arquivo de log
Cada registro de log começa com oito campos fixos, seguidos por campos específicos do tipo.
Uma linha de log possui a seguinte estrutura:
<version> <type> <time_sec> <time_usec> <remote_ip> <remote_port> <local_ip> <local_port> [type-specific fields...]
Exemplo de registro R:
V6 R 1693382120 450123 10.0.1.5 54321 192.168.1.10 80 1024 85432 312 0 3 12500 580 512 0 1448
Campos em ordem: versão (V6), tipo (R), segundos de início da TASK (1693382120), microssegundos (450123), IP remoto (10.0.1.5), porta remota (54321), IP local (192.168.1.10), porta local (80), seguidos pelos campos específicos de R: dados enviados (1024 bytes), duração total (85432 us), RTT mínimo (312 us), retransmissões (0), número de sequência da TASK (3), atraso do serviço (12500 us), atraso de upload (580 us), dados recebidos (512 bytes), reordenação de recebimento (0), MSS (1448 bytes).
Campos fixos (todos os tipos de registro):
|
Posição |
Campo |
Descrição |
|
1 |
Versão |
|
|
2 |
Tipo de registro |
|
|
3 |
Hora de início da TASK (segundos) |
Timestamp Unix, parte dos segundos |
|
4 |
Hora de início da TASK (microssegundos) |
Parte dos microssegundos |
|
5 |
IP remoto |
Endereço IP remoto da conexão TCP |
|
6 |
Porta remota |
Porta remota da conexão TCP |
|
7 |
IP local |
Endereço IP local da conexão TCP |
|
8 |
Porta local |
Porta local da conexão TCP |
Exemplo de entrada de log:

Tipos de registro e seus campos adicionais:
R — conclusão normal da TASK (servidor recebe requisição, envia resposta)
Uma única conexão TCP pode ter múltiplos registros R.
|
Campo |
Descrição |
Unidade |
|
Dados enviados |
Bytes enviados pela TASK |
Byte |
|
Duração total |
T0 a T3 (chegada do primeiro segmento de requisição ao ACK final) |
us |
|
RTT mínimo |
Tempo mínimo de ida e volta (RTT) TCP durante a TASK |
us |
|
Retransmissões |
Segmentos TCP retransmitidos durante a TASK |
contagem |
|
Número de sequência da TASK |
Índice baseado em 1; a primeira TASK após o estabelecimento da conexão é 1 |
— |
|
Atraso do serviço ( |
T1 a T2 (último segmento de requisição ao primeiro segmento de resposta) |
us |
|
Atraso de upload ( |
T0 a T1 (primeiro ao último segmento de requisição) |
us |
|
Dados recebidos |
Bytes recebidos pela TASK |
Byte |
|
Reordenação de recebimento |
|
— |
|
MSS |
Tamanho máximo de segmento (MSS) usado durante a TASK |
Byte |
|
RTT suavizado no final |
RTT suavizado ao final da TASK. Relatado apenas no modo |
us |
|
Janela de congestionamento no final |
Tamanho da janela de congestionamento ao final da TASK. Relatado apenas no modo |
segmentos |
Tipos estendidos de registro R (apenas tcprt, V7):
|
Tipo |
Quando aparece |
Significado |
|
|
Modo |
TASK acionada por uma requisição HTTP |
|
|
Modo |
TASK pertence a um handshake TLS 1.3 0-RTT |
|
|
Modo |
TASK contém uma mensagem de alerta TLS |
|
|
Modo |
TASK pertence a uma fase de handshake TLS. Para TLS 1.2 (handshake de quatro vias), dois registros |
|
|
Quando |
Estatísticas de tempo de conclusão por limiares de bytes. Formato do campo final: |
Os tipos estendidos podem ser combinados. Por exemplo, R.AF significa que tanto A quanto F se aplicam.
R.AeR.Cusam o volume de dados de resposta como critério de detecção e podem apresentar pequenos falsos positivos.
P — conclusão de TASK de saída (servidor local atua como cliente)
Registros P aparecem apenas quando pports ou pports_range está configurado. Um único serviço TCP pode ter múltiplos registros P.
|
Campo |
Descrição |
Unidade |
|
Dados enviados |
Bytes enviados pela TASK |
Byte |
|
Duração total |
Do envio da requisição ao recebimento da resposta remota final |
us |
|
RTT mínimo |
RTT TCP mínimo durante a TASK |
us |
|
Retransmissões |
Segmentos TCP retransmitidos |
contagem |
|
Número de sequência da TASK |
Índice baseado em 1 |
— |
|
Tempo de serviço |
Da conclusão da requisição ao recebimento da primeira resposta |
us |
|
Tempo de recebimento da resposta |
Do recebimento do primeiro ao último pacote de resposta |
us |
|
Dados recebidos |
Total de bytes de resposta recebidos |
Byte |
|
Reordenação de recebimento |
|
— |
|
MSS |
Tamanho máximo de segmento usado durante a TASK |
Byte |
E — fechamento de conexão
Cada conexão TCP produz exatamente um registro E. Conexões com pports ou pports_range configurados também geram este registro.
|
Campo |
Descrição |
Unidade |
|
Último número de sequência da TASK |
Número de sequência da TASK final |
— |
|
Total de dados enviados |
Bytes enviados durante todo o ciclo de vida TCP |
Byte |
|
Dados não confirmados |
Bytes enviados mas não confirmados no fechamento; |
Byte |
|
Total de dados recebidos |
Bytes recebidos durante todo o ciclo de vida TCP |
Byte |
|
Retransmissões |
Segmentos TCP retransmitidos durante o ciclo de vida |
contagem |
|
RTT mínimo |
RTT TCP mínimo durante o ciclo de vida |
us |
N — conexão fechada durante o recebimento da requisição
Uma conexão tem no máximo um registro N.
|
Campo |
Descrição |
Unidade |
|
Último número de sequência da TASK |
Número de sequência da TASK final |
— |
|
Duração |
Duração apenas de recebimento (conexão fechada antes do envio de uma resposta) |
us |
|
Dados recebidos |
Bytes recebidos durante o ciclo de vida TCP |
Byte |
|
Reordenação de recebimento |
|
— |
|
MSS |
Tamanho máximo de segmento usado |
Byte |
W — conexão fechada durante a transmissão da resposta
Uma conexão tem no máximo um registro W.
|
Campo |
Descrição |
Unidade |
|
Dados de resposta enviados |
Bytes de dados de resposta já enviados para a última TASK |
Byte |
|
Duração |
Duração parcial (conexão fechada antes da conclusão da resposta) |
us |
|
RTT mínimo |
RTT TCP mínimo para a última TASK |
us |
|
Retransmissões |
Segmentos TCP retransmitidos para a última TASK |
contagem |
|
Último número de sequência da TASK |
Número de sequência da TASK final |
— |
|
Atraso do serviço |
T1 a T2 para a última TASK |
us |
|
Atraso de upload |
T0 a T1 para a última TASK |
us |
|
Dados de resposta não confirmados |
Bytes de resposta enviados mas não confirmados; |
Byte |
|
Reordenação de recebimento |
|
— |
|
MSS |
Tamanho máximo de segmento usado para a última TASK |
Byte |
Para campos de dados enviados: se uma TASK for a última em uma conexão, o tamanho relatado é um byte menor que os bytes realmente enviados (para contabilizar a flag FIN). Se a conexão terminar com um RST após uma TASK concluída, os bytes reais enviados são um byte maiores que o valor exibido. A margem de erro é sempre de um byte.
Formato do arquivo de estatísticas
O arquivo de estatísticas agrega métricas por porta (porta do servidor ou porta do cliente) e é gerado periodicamente. Os campos aparecem da esquerda para a direita:
|
Posição |
Campo |
Unidade |
|
1 |
Timestamp |
— |
|
2 |
Campo reservado (sempre |
— |
|
3 |
Número da porta |
— |
|
4 |
Duração média total da TASK (dos registros R) |
us |
|
5 |
Atraso médio do serviço (dos registros R) |
us |
|
6 |
Taxa de perda de pacotes |
por mil (‰) |
|
7 |
RTT médio |
us |
|
8 |
Taxa de TASKs fechadas durante a transmissão da requisição |
por mil (‰) |
|
9 |
Média de dados enviados por TASK |
Byte |
|
10 |
Atraso médio de upload |
us |
|
11 |
Média de dados recebidos por TASK |
Byte |
|
12 |
Número de TASKs incluídas nas estatísticas |
contagem |
tcprt vs tcp_rt.ko
|
tcprt |
tcp_rt.ko |
|
|
Caminho do arquivo de log |
Igual |
Igual |
|
Formato do log |
Estende o formato V7 (compatível com V6) |
Apenas V6 |
|
Gerenciamento de recursos |
|
|
|
Configuração |
|
|
|
Requisitos do sistema |
Alibaba Cloud Linux 3, kernel >= 5.10.134-17 |
Alibaba Cloud Linux 2 (kernel >= 4.19.91-21.al7) ou Alibaba Cloud Linux 3 |
|
Modos de análise |
|
Apenas |
|
**Recurso |
Suportado |
Não suportado |
Perguntas frequentes
Por que ls -l mostra um tamanho de arquivo maior do que o configurado?
Os arquivos de log residem no sistema de arquivos virtual /sys (via debugfs) e não ocupam espaço em disco. O tamanho relatado por ls -l rastreia o volume acumulado de logs gravados ao longo do tempo, não o uso atual do buffer, portanto ele cresce continuamente e excede o tamanho de buffer configurado. Para verificar o tamanho real do conteúdo do log, redirecione a saída para um arquivo comum e inspecione-o:
cat /sys/kernel/debug/tcp-rt/rt-network-log0 > /tmp/tcprt-sample.log
ls -lh /tmp/tcprt-sample.log
O arquivo redirecionado reflete os dados reais disponíveis (até o limite configurado de 2 MB pelas configurações padrão).
