BCC: herramientas de seguimiento dinámico para la supervisión del rendimiento de Linux, redes y más

BCC: herramientas de seguimiento dinámico para la supervisión del rendimiento de Linux, redes y más

BCC. ( Colección de compiladores BPF. es un poderoso conjunto de herramientas apropiadas y archivos de ejemplo para crear programas ingeniosos de rastreo y manipulación del kernel. Utiliza BPF. extendidos ( filtros de paquetes de Berkeley. , inicialmente conocido como eBPF. que era una de las nuevas funciones de Linux 3.15 .

 BCC/BPF: herramientas de seguimiento dinámico para la supervisión del rendimiento de Linux  BCC/BPF: herramientas de seguimiento dinámico para Linux Monitorización del rendimiento BCC/BPF: herramientas de seguimiento dinámico para la monitorización del rendimiento de Linux

Prácticamente, la mayoría de los componentes utilizados por BCC. requieren Linux 4.1. o superior, y yo Sus características notables incluyen:

  1. No requiere un módulo de kernel de terceros, ya que todas las herramientas funcionan basadas en BPF que está integrado en el kernel y BCC usa características agregadas en la serie Linux 4.x.
  2. Permite la observación de la ejecución del software.
  3. Consta de varias herramientas de análisis de rendimiento con archivos de ejemplo y páginas de manual.

Lectura sugerida: 20 herramientas de línea de comandos para monitorear el rendimiento de Linux

Más adecuado para usuarios avanzados de Linux, BCC. facilita la escritura de programas BPF. utilizando instrumentación del kernel en C. y front-end en Python. y lua. Además, admite múltiples tareas como análisis de rendimiento, monitoreo, control de tráfico de red y mucho más.

Cómo instalar BCC en sistemas Linux

Recuerde que BCC. usa características agregadas en la versión 4.1. o superior del kernel de Linux, y como requisito, el kernel debería haber sido compilado con las banderas establecidas a continuación:

CONFIG_BPF. = y. CONFIG_BPF_SYSCALL. = y. # [opcional, para filtros tc] CONFIG_NET_CLS_BPF = m. # [opcional, para acciones tc] CONFIG_NET_ACT_BPF. = m. CONFIG_BPF_JIT. = y. CONFIG_HAVE_BPF_JIT. = y. # [opcional, para kprobes] CONFIG_BPF_EVENTS. = y.

Para verificar las banderas de su kernel, vea el archivo /proc/config. gz. o ejecute los comandos como en los siguientes ejemplos:

[email protected] ~ $. grep CONFIG_BPF =/boot/config-` uname-r` CONFIG_BPF. = y. [correo electrónico protegido] ~ $. grep CONFIG_BPF_SYSCALL =/boot/config-`uname-r` CONFIG_BPF_SYSCALL. = y. [correo electrónico protegido] ~ $. grep CONFIG_NET_CLS_BPF =/boot/config-`una me-r` CONFIG_NET_CLS_BPF. = m. [correo electrónico protegido] ~ $. grep CONFIG_NET_ACT_BPF =/boot/config-`uname-r` CONFIG_NET_ACT_BPF. = m. [correo electrónico protegido] ~ $. grep CONFIG_BPF_JIT =/boot/config-`uname-r` CONFIG_BPF_JIT. = y. [email protected] ~ $. grep CONFIG_HAVE_BPF_JIT =/boot/config-`uname-r` CONFIG_HAVE_BPF_JIT. = y. [correo electrónico protegido] ~ $. grep CONFIG_BPF_EVENTS =/boot/config-`uname-r` CONFIG_BPF_EVENTS. = y. freestar.config.enabled_slots.push

Después de verificar las banderas del kernel, es hora para instalar herramientas BCC. en sistemas Linux.

En Ubuntu 16.04

Solo se crean los paquetes nocturnos para Ubuntu 16.04. pero las instrucciones de instalación son muy sencillas. No es necesario actualizar el kernel ni compilarlo desde el código fuente.

$ echo “deb [confiable = sí] https://repo.iovisor.org/apt/xenial xenial-nightly main” | sudo tee/etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-get install bcc-tools En Ubuntu 14.04

Empiece por instalar un 4.3+. Kernel de Linux, de http://kernel.ubuntu.com/~kernel-ppa/mainline.

Como ejemplo, escriba un pequeño script de shell “ bcc-install.sh. ”Con el contenido a continuación.

Nota. actualice el valor PREFIX. a la última fecha y también explore los archivos en la URL PREFIX. proporcionada para obtener el valor REL. real, sustitúyalos en el script de shell.

#!/bin/bash VER = 4.5.1-040501 PREFIX = http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5.1-wily/REL = 201604121331 wget $ PREFIX/linux-headers-$ VER-generic _ $ VER. $ REL _amd64.deb wget $ PREFIX/linux-headers-$ VER _ $ VER. $ REL _all.deb wget $ PREFIX/linux-image-$ VER-generic_ $ VER. $ REL _amd64.deb sudo dpkg-i linux-* $ VER. $ REL *. Deb

Guarde el archivo y salga. Hágalo ejecutable, luego ejecútelo como se muestra:

$ chmod + x bcc-install.sh $ sh bcc-install.sh

Luego, reinicie su sistema.

$ reboot

A continuación, ejecute los siguientes comandos para instalar paquetes BCC firmados:

$ sudo apt-key adv–keyserver keyserver.ubuntu.com–recv-keys D4284CDD $ echo “deb https://repo.iovisor.org/apt trusty principal “| sudo tee/etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-get install binutils bcc bcc-tools libbcc-examples python-bcc En Fedora 24-23

Instale un núcleo 4.2+. de http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug, si su sistema tiene una versión inferior a la requerida. A continuación se muestra un ejemplo de cómo hacerlo:

$ sudo dnf config-manager–add-repo = http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug/fedora-rawhide-kernel-nodebug.repo $ sudo dnf update $ reboot

Después de eso, agregue el repositorio de herramientas BBC. actualice su sistema e instale las herramientas ejecutando la siguiente serie de comandos:

$ echo-e ‘[iovisor] \ nbaseurl = https://repo.iovisor.org/yum/nightly/f23/$basearch \ nenabled = 1 \ ngpgcheck = 0’ | sudo tee/etc/yum.repos.d/iovisor.repo $ sudo dnf update $ sudo dnf install bcc-tools En Arch Linux-AUR

Debe comenzar actualizando su kernel al menos a la versión 4.3.1-1. posteriormente instale los paquetes a continuación utilizando cualquier administrador de paquetes de Arch, como pacaur. yaourt. cower. etc.

bcc bcc-tools python-bcc python2-bcc

Cómo utilizar las herramientas BCC en sistemas Linux

Todas las herramientas BCC. se instalan en/usr/share/bcc/directorio de herramientas. Sin embargo, puede ejecutarlos alternativamente desde el repositorio BCC Github. en/tools donde terminan con una extensión .py.

$ ls/usr/share/bcc/tools. argdist capaz filetop offwaketime stackcount vfscount bashreadline cpudist funccount old stacksnoop vfsstat biolatency dcsnoop funclatency oomkill statsnoop wakeuptime biosnoop dcstat gethostlatency opensnoop syncsnoop xfsdistir perfil biqcsopcpecpecpecspid sincronoop xfsstat ext. runqlat tcpconnlat zfsslower btrfsslower ext4slower memleak softirqs tcpretrans cachestat filelife mysqld_qslower solisten tplist cachetop fileslower offcputime sslsniff trace

Cubriremos algunos ejemplos a continuación: supervisión de ge Rendimiento y redes neral del sistema Linux.

Rastree las llamadas al sistema open ()

Comencemos rastreando todas las llamadas al sistema open () usando opensnoop. Esto nos permite decirnos cómo funcionan varias aplicaciones identificando sus archivos de datos, archivos de configuración y muchos más:

$ cd/usr/share/bcc/tools. $ sudo ./opensnoop PID COMM FD ERR PATH 1 systemd 35 0/proc/self/mountinfo 2797 udisksd 13 0/proc/self/mountinfo 1 systemd 35 0/sys/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2: 0: 0/2: 0: 0: 0/block/sda/sda1/uevent 1 systemd 35 0/run/udev/data/b8: 1 1 systemd-1 2/etc/systemd/system/sys-kernel-debug-tracing.mount 1 systemd-1 2/run/systemd/system/sys-kernel-debug-tracing.mount 1 systemd-1 2/run/systemd/generator/sys-kernel-debug-tracing.mount 1 systemd-1 2/usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount 2247 systemd 15 0/proc/self/mountinfo 1 systemd-1 2/lib/systemd/system/sys-kernel-debug-tracing.mount 1 systemd-1 2/usr/lib/s ystemd/system/sys-kernel-debug-tracing.mount 1 systemd-1 2/run/systemd/generator.late/sys-kernel-debug-tracing.mount 1 systemd-1 2/etc/systemd/system/sys-kernel-debug-tracing.mount.wants 1 systemd-1 2/etc/systemd/system/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/run/systemd/system/sys-kernel-debug-tracing.mount.wants 1 systemd-1 2/run/systemd/system/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/run/systemd/generator/sys-kernel-debug-tracing.mount. quiere 1 systemd-1 2/run/systemd/generator/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount. quiere 1 systemd-1 2/usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/lib/systemd/system/sys-kernel-debug-tracing.mount. quiere 1 systemd-1 2/lib/systemd/system/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/usr/lib/systemd/system/sys-kernel-debug-tracing.mount.wants 1 systemd-1 2/usr/lib/systemd/system/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/run/systemd/generator.late/sys-kernel-debug-tracing.mount.wants 1 systemd-1 2/run/systemd/generator.late/sys-kernel-debug-tracing.mount.requires 1 systemd-1 2/etc/systemd/system/sys-kernel-debug-tracing.mount.d 1 systemd-1 2/run/systemd/system/sys-kernel-debug-tracing.mount.d 1 systemd-1 2/run/systemd/generator/sys-kernel-debug-tracing.mount.d …. Resumir dispositivo de bloque I/O Latency

En este ejemplo, muestra una distribución resumida de la latencia de E/S del disco usando biolatecncy. Después de ejecutar el comando, espere unos minutos y presione Ctrl-C. para finalizarlo y ver el resultado.

$ sudo ./biolatecncy. Trazando el bloque de E/S del dispositivo … Presione Ctrl-C para finalizar. ^ C usecs: distribución de recuento 0-> 1: 0 | | 2-> 3: 0 | | 4-> 7: 0 | | 8-> 15: 0 | | 16-> 31: 0 | | 32-> 63: 0 | | 64-> 127: 0 | | 128-> 255: 3 | ************************************** | 256-> 511: 3 | ************************************** | 512-> 1023: 1 | ************* | Rastrear nuevos procesos a través de exec () Syscalls

En esta sección, pasaremos a rastrear nuevos procesos en ejecución usando la herramienta execsnoop. Cada vez que un proceso es bifurcado por fork () y exec () syscalls, se muestra en la salida. Sin embargo, no se capturan todos los procesos.

$ sudo ./execsnoop. PCOMM PID PPID RET ARGS gnome-screenho 14882 14881 0/usr/bin/gnome-screenshot–gapplication-service systemd-hostnam 14892 1 0/lib/systemd/systemd-hostnamed nautilus 14897 2767-2/home/tecmint/bin/net usershare info nautilus 14897 2767-2/home/tecmint/.local/bin/net usershare info nautilus 14897 2767-2/usr/local/sbin/net userhare info nautilus 14897 2767-2/usr/local/bin/net userhare info nautilus 14897 2767-2/usr/sbin/net userhare info nautilus 14897 2767-2/usr/bin/net userhare info nautilus 14897 2767-2/sbin/net usershare info nautilus 14897 2767-2/bin/net userhare info nautilus 14897 2767-2/usr/games/net userhare info nautilus 14897 2767-2/usr/local/games/net información de uso compartido de usuarios nautilus 14897 2767-2/snap/bin/net usershar e info compiz 14899 14898-2/home/tecmint/bin/libreoffice–calc compiz 14899 14898-2/home/tecmint/.local/bin/libreoffice–calc compiz 14899 14898-2/usr/local/sbin/libreoffice–calc compiz 14899 14898-2/usr/local/bin/libreoffice–calc compiz 14899 14898-2/usr/sbin/libreoffice–calc libreoffice 14899 2252 0/usr/bin/libreoffice–calc dirname 14902 14899 0/usr/bin/dirname/usr/bin/libreoffice basename 14903 14899 0/usr/bin/basename/usr/bin/libreoffice … Trace Slow ext4 Operations

Usando ext4slower. para rastrear el ext4. operaciones comunes del sistema de archivos que son más lentas que 10ms. para ayudarnos a identificar las E/S de disco lentas de forma independiente a través del sistema de archivos.

Lectura sugerida: 13 herramientas de supervisión del rendimiento de Linux

Solo genera aquellas operaciones que exceden un umbral:

$ sudo ./execslower. Rastreando operaciones ext4 más lentas que 10 ms TIME COMM PID T BYTES OFF_KB LAT (ms) NOMBRE DE ARCHIVO 11:59:13 upstart 2252 W 48 1 10.76 dbus.log 11:59:13 gnome-screenh 14993 R 144 0 10.96 settings.ini 11:59:13 gnome-screenh 14993 R 28 0 16.02 gtk.css 11:59 : 13 gnome-screenh 14993 R 3389 0 18.32 gtk-main.css 11:59:25 rs: main Q: Reg 1826 W 156 60 31.85 syslog 11:59:25 pool 15002 R 208 0 14.98 .xsession-errors 11:59 : 25 grupo 15002 R 644 0 12.28 .ICEauthority 11:59:25 grupo 15002 R 220 0 13.38 .bash_logout 11:59:27 dconf-service 2599 S 0 0 22. 75 usuario.BHDKOY 11:59:33 compiz 2548 R 4096 0 19.03 firefox.desktop 11:59:34 compiz 15008 R 128 0 27.52 firefox.sh 11:59:34 firefox 15008 R 128 0 36.48 firefox 11:59:34 zeitgeist-daem 2988 S 0 0 62.23 activity.sqlite-wal 11:59:34 zeitgeist-fts 2996 R 8192 40 15.67 postlist.DB 11:59:34 firefox 15008 R 140 0 18.05 dependenlibs.list 11:59:34 zeitgeist-fts 2996 S 0 0 25.96 position.tmp 11:59:34 firefox 15008 R 4096 0 10.67 libplc4.so 11:59:34 zeitgeist-fts 2996 S 0 0 11.29 termlist.tmp … Trace Block Device I/O con PID y Latencia

A continuación, profundicemos en la impresión de una línea por E/S de disco cada segundo, con detalles como ID de proceso, sector, bytes, latencia, entre otros, usando biosnoop:

$ sudo ./opensnoop-x. PID COMM FD ERR PATH 15414 pool-1 2/home/.hidden 15415 (ostnamed)-1 2/sys/fs/cgroup/cpu/system.slice/systemd-hostnamed.service/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/cpu/system.slice/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/cpuacct/system.slice/systemd-hostnamed.service/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/cpuacct/system.slice/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/blkio/system.slice/systemd-hostnamed.service/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/blkio/system.slice/cgroup.procs 15415 ( ostnamed)-1 2/sys/fs/cgroup/memory/system.slice/systemd-hostnamed.service/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/memory/system.slice/cgroup.procs 15415 (ostnamed)-1 2/sys/fs/cgroup/pids/system.slice/systemd-hostnamed.serv ice/cgroup.procs 2548 compiz-1 2 15416 systemd-cgroups-1 2/run/systemd/container 15416 systemd-cgroups-1 2/sys/fs/kdbus/0-system/bus 15415 systemd-hostnam-1 2/ejecutar/systemd/container 15415 systemd-hostnam-1 13/proc/1/environment 15415 systemd-hostnam-1 2/sys/fs/kdbus/0-system/bus 1695 dbus-daemon-1 2/run/systemd/users/0 15415 systemd-hostnam-1 2/etc/machine-info 15414 pool-1 2/home/tecmint/.hidden 15414 pool-1 2/home/tecmint/Binary/.hidden 2599 dconf-service-1 2/run/user/1000/dconf/user … Funciones de proceso particulares de seguimiento

El último ejemplo a continuación demuestra cómo ejecutar una operación de seguimiento personalizada. Estamos rastreando un proceso en particular usando su PID.

Lectura sugerida: Netdata: una herramienta de supervisión del rendimiento en tiempo real para Linux

Primero, determine el ID del proceso:

$ pidof firefox. 15437

Más adelante, ejecute el comando trace. personalizado. En el siguiente comando:-p especifica el ID del proceso, do_sys_open () es una función del kernel que se rastrea dinámicamente incluyendo su segundo argumento como una cadena.

$ sudo./trace-p 4095 ‘do_sys_open “% s”, arg2’. TIME PID COMM FUNC-12:17:14 15437 firefox do_sys_open/run/user/1000/dconf/user 12:17:14 15437 firefox do_sys_open/inicio/tecmint/.config/dconf/user 12:18:07 15437 firefox do_sys_open/run/user/1000/dconf/user 12:18:07 15437 firefox do_sys_open/home/tecmint/.config/dconf/user 12:18 : 13 15437 firefox do_sys_open/sys/devices/system/cpu/present 12:18:13 15437 firefox do_sys_open/dev/urandom 12:18:13 15437 firefox do_sys_open/dev/urandom 12:18:14 15437 firefox do_sys_open/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf 12:18:14 15437 firefox do_sys_open/usr/share/fonts/truetype/liberation/L iberationSans-Italic.ttf 12:18:14 15437 firefox do_sys_open/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf 12:18:14 15437 firefox do_sys_open/sys/dispositivos/system/cpu/present 12:18 : 14 15437 firefox do_sys_open/dev/urandom 12:18:14 15437 firefox do_sys_open/dev/urandom 12:18:14 15437 firefox do_sys_open/dev/urandom 12:18:14 15437 firefox do_sys_open/dev/urandom 12:18:15 15437 firefox do_sys_open/sys/devices/system/cpu/present 12:18:15 15437 firefox do_sys_open/dev/urandom 12:18:15 15437 firefox do_sys_open/dev/urandom 12:18:15 15437 firefox do_sys_open/sys/devices/system/cpu/present 12:18:15 15437 firefox do_sys_open/dev/urandom 12:18:15 15437 firefox do_sys_open/dev/urandom ….

Resumen

BCC. es un conjunto de herramientas potente y fácil de usar para diversas tareas de administración del sistema, como el sistema de seguimiento m supervisión del rendimiento, seguimiento de E/S de dispositivos de bloques, funciones TCP, operaciones del sistema de archivos, llamadas al sistema, sondas de Node.js y mucho más. Es importante destacar que viene con varios archivos de ejemplo y páginas de manual para las herramientas que lo guiarán, haciéndolo fácil de usar y confiable.

Por último, pero no menos importante, puede comunicarse con nosotros compartiendo sus pensamientos sobre el tema, haga preguntas, haga sugerencias útiles o cualquier comentario constructivo a través de la sección de comentarios a continuación.

Para obtener más información y uso, visite: https://iovisor.github.io/bcc/