Parca Agent es un generador de perfiles de muestreo siempre activo que utiliza eBPF para capturar datos de perfiles sin procesar con muy poca sobrecarga. Observa los seguimientos de pila del espacio del usuario y del espacio del kernel 19 veces por segundo y crea perfiles con formato pprof a partir de los datos extraídos. Lea más detalles en la documentación de diseño.
Los datos recopilados se pueden ver localmente a través de puntos finales HTTP y luego configurarse para enviarse a un servidor de Parca para ser consultados y analizados a lo largo del tiempo.
Consulte Introducción a Kubernetes.
Parca Agent mejora continuamente su soporte para múltiples idiomas. Lista incompleta de idiomas que admitimos actualmente:
Consulte nuestros documentos para obtener más información.
Nota
En las próximas semanas y meses habrá más soporte lingüístico.
Tipos de perfiles que están disponibles:
Nota
Consulte nuestros documentos si su idioma es compatible.
Los siguientes tipos de perfiles requieren instrumentación explícita:
Para depurar errores potenciales, habilite el registro de depuración 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.
Parca Agent admite el reetiquetado de Prometheus. Las siguientes etiquetas siempre están adheridas a los perfiles:
node
: el nombre del nodo en el que se ejecuta el proceso según lo especificado por el indicador --node
.comm
: el nombre del comando del proceso que se está perfilando. Y, opcionalmente, puede adjuntar etiquetas adicionales utilizando la marca --metadata-external-labels
.
Mediante el reetiquetado se pueden adjuntar las siguientes etiquetas a los perfiles:
__meta_process_pid
: El ID del proceso del que se está perfilando.__meta_process_cmdline
: los argumentos de la línea de comando del proceso que se está perfilando.__meta_process_cgroup
: El cgroup (principal) del proceso que se está perfilando.__meta_process_ppid
: ID del proceso principal del proceso del que se está perfilando.__meta_process_executable_file_id
: el ID del archivo (un hash) del ejecutable del proceso que se está perfilando.__meta_process_executable_name
: el nombre base del ejecutable del proceso que se está perfilando.__meta_process_executable_build_id
: el ID de compilación del ejecutable del proceso que se está perfilando.__meta_process_executable_compiler
: el compilador utilizado para crear el ejecutable del proceso que se está perfilando.__meta_process_executable_static
: si el ejecutable del proceso que se está perfilando está vinculado estáticamente.__meta_process_executable_stripped
: si el ejecutable del proceso que se está perfilando se elimina de la información de depuración.__meta_system_kernel_release
: la versión del kernel del sistema.__meta_system_kernel_machine
: La máquina del núcleo del sistema (normalmente la arquitectura).__meta_thread_comm
: el nombre del comando del hilo que se está perfilando.__meta_thread_id
: el PID del subproceso que se está perfilando.__meta_agent_revision
: La revisión del agente.__meta_kubernetes_namespace
: el espacio de nombres del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_name
: el nombre del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_label_*
: el valor de la etiqueta *
del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_labelpresent_*
: si la etiqueta *
del pod en el que se ejecuta el proceso está presente.__meta_kubernetes_pod_annotation_*
: el valor de la anotación *
del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_annotationpresent_*
: si la anotación *
del pod en el que se ejecuta el proceso está presente.__meta_kubernetes_pod_ip
: la IP del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_container_name
: el nombre del contenedor en el que se ejecuta el proceso.__meta_kubernetes_pod_container_id
: el ID del contenedor en el que se ejecuta el proceso.__meta_kubernetes_pod_container_image
: la imagen del contenedor en el que se ejecuta el proceso.__meta_kubernetes_pod_container_init
: si el contenedor en el que se ejecuta el proceso es un contenedor de inicio.__meta_kubernetes_pod_ready
: si el pod en el que se ejecuta el proceso está listo.__meta_kubernetes_pod_phase
: la fase del pod en la que se ejecuta el proceso.__meta_kubernetes_node_name
: el nombre del nodo en el que se ejecuta el proceso.__meta_kubernetes_pod_host_ip
: la IP del host del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_uid
: el UID del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_controller_kind
: el tipo de controlador del pod en el que se ejecuta el proceso.__meta_kubernetes_pod_controller_name
: el nombre del controlador del pod en el que se ejecuta el proceso.__meta_kubernetes_node_label_*
: el valor de la etiqueta *
del nodo en el que se ejecuta el proceso.__meta_kubernetes_node_labelpresent_*
: si la etiqueta *
del nodo en el que se ejecuta el proceso está presente.__meta_kubernetes_node_annotation_*
: el valor de la anotación *
del nodo en el que se ejecuta el proceso.__meta_kubernetes_node_annotationpresent_*
: si la anotación *
del nodo en el que se ejecuta el proceso está presente.__meta_docker_container_id
: el ID del contenedor en el que se ejecuta el proceso.__meta_docker_container_name
: el nombre del contenedor en el que se ejecuta el proceso.__meta_docker_build_kit_container_id
: el ID del contenedor en el que se ejecuta el proceso.__meta_containerd_container_id
: el ID del contenedor en el que se ejecuta el proceso.__meta_containerd_container_name
: el nombre del contenedor en el que se ejecuta el proceso.__meta_containerd_pod_name
: el nombre del pod en el que se ejecuta el proceso.__meta_lxc_container_id
: el ID del contenedor en el que se ejecuta el proceso. Se requiere que Parca Agent se ejecute como usuario root
(o CAP_SYS_ADMIN
). Se han tomado varias precauciones de seguridad para proteger a los usuarios que ejecutan Parca Agent. Consulte los detalles en Consideraciones de seguridad.
Para informar una vulnerabilidad de seguridad, consulte esta guía.
¡Consulte nuestra Guía de contribución para comenzar!
Código de espacio de usuario: Apache 2
Código de espacio del kernel (perfiladores eBPF): Licencia pública general GNU, versión 2
Gracias a: