Netto é uma ferramenta de monitoramento de rede baseada em eBPF para Linux que mede o custo de CPU da pilha de rede Linux.
NET_RX_SOFTIRQ
nas funções básicas de rede por meio de perfil baseado em rastreamento de pilha do kernelBPF_MAP_TYPE_TASK_STORAGE
) Construir o Netto como um aplicativo independente geralmente é desencorajado; em vez disso, os usuários devem usar o Dockerfile
fornecido para criar uma imagem de contêiner que simplificará a implantação e o gerenciamento da ferramenta.
Construa Netto em uma imagem de contêiner (aqui marcada como "netto") com:
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
Observe que a imagem resultante precisará do recurso CAP_BPF
CAP_SYS_ADMIN
, o que na maioria das configurações significa que o contêiner deve ser executado no modo --privileged
.
Se ainda preferir construir a ferramenta de forma independente, você precisará de:
Compile e execute com:
cargo xtask run [--release]
$ ./netto -h
eBPF-based network diagnosis tool for Linux
Usage: netto [OPTIONS]
Options:
-f, --frequency Perf-event's sampling frequency in Hz for the NET_RX_SOFTIRQ cost breakdown [default: 1000]
-a, --address Bind address for the web frontend [default: 0.0.0.0]
-p, --port Bind port for the web frontend [default: 8080]
--user-period User-space controller update period in ms [default: 500]
-l, --log-file Path to a log file to which measurements are to be saved. If logging is enabled by providing this argument, any other form of web interface will be disabled
-P, --prometheus Enable Prometheus logging in place of the web interface. The Prometheus-compatible endpoint will be available at `http://address:port`
-h, --help Print help
-V, --version Print version
Por padrão, Netto expõe os resultados em tempo real como uma página da web baseada em Wasm acessível em http://address:port
. Essa interface é ideal para consumir o conteúdo conforme ele é produzido, mas não fornece suporte pronto para uso para armazenar as métricas extraídas para acesso atrasado. Quando o monitoramento em tempo real do host não é a principal preocupação e para melhor integração com pilhas de coleta de métricas existentes (como em ambientes de data center), é recomendado substituir o frontend da web personalizado integrado por um exportador baseado em Prometheus com a opção de linha de comando -P
(ou --prometheus
).
Na maioria dos casos, a forma recomendada de executar o Netto envolve um comando semelhante a:
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
Ou com a entrada de configuração equivalente docker compose
:
services:
netto:
build: https://github.com/miolad/netto.git#perf-event-mmapable-array
image: netto
container_name: netto
privileged: true
command: -P
restart: unless-stopped
...
Com a opção -P
selecionada, Netto pode ser direcionado pelo raspador Prometheus e referenciado diretamente no Grafana. Um exemplo de painel que mostra as principais métricas coletadas pelo Netto está disponível como grafana_dashboard.json
(que assume que a variável "host" é usada para diferenciar entre diferentes hosts monitorados por meio do rótulo "job" do Prometheus, a ser configurado nas configurações do Prometheus) .
Pasta | Conteúdo |
---|---|
images | Imagens usadas neste README |
netto | Caixa binária Rust principal |
netto/src/bpf | Programas BPF-C |
metrics-common | Caixa da biblioteca Bridge Rust para frontend main e web-frontend |
web-frontend | Interface Rust WebAssembly |
www | Arquivos estáticos para o frontend da web |
xtask | Caixa binária utilitária para gerenciar a coordenação entre as outras caixas |