Parca Agent é um criador de perfil de amostragem sempre ativo que usa eBPF para capturar dados brutos de perfil com sobrecarga muito baixa. Ele observa stacktraces do espaço do usuário e do espaço do kernel 19 vezes por segundo e cria perfis formatados em pprof a partir dos dados extraídos. Leia mais detalhes na documentação do projeto.
Os dados coletados podem ser visualizados localmente por meio de endpoints HTTP e então configurados para serem enviados a um servidor Parca para serem consultados e analisados ao longo do tempo.
Consulte os primeiros passos do Kubernetes.
O Parca Agent está continuamente aprimorando seu suporte para vários idiomas. Lista incompleta de idiomas que oferecemos suporte atualmente:
Por favor, verifique nossos documentos para mais informações.
Observação
Mais suporte linguístico chegará nas próximas semanas e meses.
Tipos de perfis disponíveis:
Observação
Por favor, verifique nossos documentos se o seu idioma for compatível.
Os seguintes tipos de perfis requerem instrumentação explícita:
Para depurar possíveis erros, habilite o log de depuração usando --log-level=debug
.
Usage: parca-agent
Flags:
-h, --help Show context-sensitive help.
--log-level="info" Log level.
--log-format="logfmt" Configure if structured logging as JSON or as
logfmt
--http-address="127.0.0.1:7071"
Address to bind HTTP server to.
--version Show application version.
--node="hostname" The name of the node that the process is
running on. If on Kubernetes, this must match
the Kubernetes node name.
--config-path="" Path to config file.
--memlock-rlimit=0 The value for the maximum number of bytes
of memory that may be locked into RAM. It is
used to ensure the agent can lock memory for
eBPF maps. 0 means no limit.
--mutex-profile-fraction=0
Fraction of mutex profile samples to collect.
--block-profile-rate=0 Sample rate for block profile.
--profiling-duration=10s The agent profiling duration to use. Leave
this empty to use the defaults.
--profiling-cpu-sampling-frequency=19
The frequency at which profiling data is
collected, e.g., 19 samples per second.
--profiling-perf-event-buffer-poll-interval=250ms
The interval at which the perf event buffer
is polled for new events.
--profiling-perf-event-buffer-processing-interval=100ms
The interval at which the perf event buffer
is processed.
--profiling-perf-event-buffer-worker-count=4
The number of workers that process the perf
event buffer.
--metadata-external-labels=KEY=VALUE;...
Label(s) to attach to all profiles.
--metadata-container-runtime-socket-path=STRING
The filesystem path to the container runtimes
socket. Leave this empty to use the defaults.
--metadata-disable-caching
Disable caching of metadata.
--local-store-directory=STRING
The local directory to store the profiling
data.
--remote-store-address=STRING
gRPC address to send profiles and symbols to.
--remote-store-bearer-token=STRING
Bearer token to authenticate with store
( $ PARCA_BEARER_TOKEN).
--remote-store-bearer-token-file=STRING
File to read bearer token from to
authenticate with store.
--remote-store-insecure Send gRPC requests via plaintext instead of
TLS.
--remote-store-insecure-skip-verify
Skip TLS certificate verification.
--remote-store-batch-write-interval=10s
Interval between batch remote client writes.
Leave this empty to use the default value of
10s.
--remote-store-rpc-logging-enable
Enable gRPC logging.
--remote-store-rpc-unary-timeout=5m
Maximum timeout window for unary gRPC
requests including retries.
--debuginfo-directories=/usr/lib/debug,...
Ordered list of local directories to search
for debuginfo files.
--debuginfo-temp-dir="/tmp"
The local directory path to store the interim
debuginfo files.
--debuginfo-strip Only upload information needed for
symbolization. If false the exact binary the
agent sees will be uploaded unmodified.
--debuginfo-compress Compress debuginfo files' DWARF sections
before uploading.
--debuginfo-upload-disable
Disable debuginfo collection and upload.
--debuginfo-upload-max-parallel=25
The maximum number of debuginfo upload
requests to make in parallel.
--debuginfo-upload-timeout-duration=2m
The timeout duration to cancel upload
requests.
--debuginfo-upload-cache-duration=5m
The duration to cache debuginfo upload
responses for.
--debuginfo-disable-caching
Disable caching of debuginfo.
--symbolizer-jit-disable Disable JIT symbolization.
--otlp-address=STRING The endpoint to send OTLP traces to.
--otlp-exporter="grpc" The OTLP exporter to use.
--object-file-pool-eviction-policy="lru"
The eviction policy to use for the object
file pool.
--object-file-pool-size=100
The maximum number of object files to keep in
the pool. This is used to avoid re-reading
object files from disk. It keeps FDs open,
so it should be kept in sync with ulimits.
0 means no limit.
--dwarf-unwinding-disable Do not unwind using .eh_frame information.
--dwarf-unwinding-mixed Unwind using .eh_frame information and frame
pointers.
--python-unwinding-disable
Disable Python unwinder.
--ruby-unwinding-disable Disable Ruby unwinder.
--analytics-opt-out Opt out of sending anonymous usage
statistics.
--telemetry-disable-panic-reporting
--telemetry-stderr-buffer-size-kb=4096
--bpf-verbose-logging Enable verbose BPF logging.
--bpf-events-buffer-size=8192
Size in pages of the events buffer.
--verbose-bpf-logging [deprecated] Use --bpf-verbose-logging.
Enable verbose BPF logging.
O Parca Agent oferece suporte à reetiquetagem do Prometheus. As seguintes etiquetas estão sempre anexadas aos perfis:
node
: o nome do nó em que o processo está sendo executado, conforme especificado pelo sinalizador --node
.comm
: o nome do comando do processo cujo perfil está sendo criado. E, opcionalmente, você pode anexar rótulos adicionais usando o sinalizador --metadata-external-labels
.
Usando a reetiquetagem, os seguintes rótulos podem ser anexados aos perfis:
__meta_process_pid
: o ID do processo cujo perfil está sendo criado.__meta_process_cmdline
: os argumentos da linha de comando do processo cujo perfil está sendo criado.__meta_process_cgroup
: O cgroup (principal) do processo cujo perfil está sendo criado.__meta_process_ppid
: o ID do processo pai do processo cujo perfil está sendo criado.__meta_process_executable_file_id
: O ID do arquivo (um hash) do executável do processo cujo perfil está sendo criado.__meta_process_executable_name
: O nome base do executável do processo cujo perfil está sendo criado.__meta_process_executable_build_id
: O ID de compilação do executável do processo cujo perfil está sendo criado.__meta_process_executable_compiler
: O compilador usado para construir o executável do processo cujo perfil está sendo criado.__meta_process_executable_static
: se o executável do processo cujo perfil está sendo criado está vinculado estaticamente.__meta_process_executable_stripped
: se o executável do processo cujo perfil está sendo criado foi removido do debuginfo.__meta_system_kernel_release
: A versão do kernel do sistema.__meta_system_kernel_machine
: A máquina kernel do sistema (normalmente a arquitetura).__meta_thread_comm
: O nome do comando do thread cujo perfil está sendo criado.__meta_thread_id
: O PID do thread cujo perfil está sendo criado.__meta_agent_revision
: A revisão do agente.__meta_kubernetes_namespace
: o namespace do pod em que o processo está sendo executado.__meta_kubernetes_pod_name
: o nome do pod em que o processo está sendo executado.__meta_kubernetes_pod_label_*
: o valor do rótulo *
do pod em que o processo está sendo executado.__meta_kubernetes_pod_labelpresent_*
: se o rótulo *
do pod em que o processo está sendo executado está presente.__meta_kubernetes_pod_annotation_*
: o valor da anotação *
do pod em que o processo está sendo executado.__meta_kubernetes_pod_annotationpresent_*
: se a anotação *
do pod em que o processo está sendo executado está presente.__meta_kubernetes_pod_ip
: o IP do pod em que o processo está sendo executado.__meta_kubernetes_pod_container_name
: o nome do contêiner em que o processo está sendo executado.__meta_kubernetes_pod_container_id
: o ID do contêiner em que o processo está sendo executado.__meta_kubernetes_pod_container_image
: a imagem do contêiner em que o processo está sendo executado.__meta_kubernetes_pod_container_init
: se o contêiner em que o processo está sendo executado é um contêiner init.__meta_kubernetes_pod_ready
: se o pod em que o processo está sendo executado está pronto.__meta_kubernetes_pod_phase
: a fase do pod em que o processo está sendo executado.__meta_kubernetes_node_name
: o nome do nó em que o processo está sendo executado.__meta_kubernetes_pod_host_ip
: o IP do host do pod em que o processo está sendo executado.__meta_kubernetes_pod_uid
: o UID do pod em que o processo está sendo executado.__meta_kubernetes_pod_controller_kind
: o tipo de controlador do pod em que o processo está sendo executado.__meta_kubernetes_pod_controller_name
: o nome do controlador do pod em que o processo está sendo executado.__meta_kubernetes_node_label_*
: O valor do rótulo *
do nó em que o processo está sendo executado.__meta_kubernetes_node_labelpresent_*
: se o rótulo *
do nó em que o processo está sendo executado está presente.__meta_kubernetes_node_annotation_*
: O valor da anotação *
do nó em que o processo está sendo executado.__meta_kubernetes_node_annotationpresent_*
: se a anotação *
do nó em que o processo está sendo executado está presente.__meta_docker_container_id
: o ID do contêiner em que o processo está sendo executado.__meta_docker_container_name
: o nome do contêiner em que o processo está sendo executado.__meta_docker_build_kit_container_id
: o ID do contêiner em que o processo está sendo executado.__meta_containerd_container_id
: o ID do contêiner em que o processo está sendo executado.__meta_containerd_container_name
: o nome do contêiner em que o processo está sendo executado.__meta_containerd_pod_name
: o nome do pod em que o processo está sendo executado.__meta_lxc_container_id
: o ID do contêiner em que o processo está sendo executado. O Parca Agent deve estar em execução como usuário root
(ou CAP_SYS_ADMIN
). Várias precauções de segurança foram tomadas para proteger os usuários que executam o Parca Agent. Veja detalhes em Considerações de Segurança.
Para relatar uma vulnerabilidade de segurança, consulte este guia.
Confira nosso Guia de contribuição para começar!
Código do espaço do usuário: Apache 2
Código do espaço do kernel (criadores de perfil eBPF): Licença Pública Geral GNU, versão 2
Graças a: