BCC – інструменти трасування для Linux IO, мереж і багато чого іншого

BCC (BPF Compiler Collection) – це потужний набір відповідних інструментів і файлів прикладів для створення ресурсномістких програм трасування та маніпулювання ядром.

Він використовує розширений BPF (Berkeley Packet Filters), спочатку відомий як eBPF, який був однією з нових функцій у Linux 3.15.

Практично, більшість компонентів, що використовуються в BCC, вимагають Linux 4.1 або вище, і серед їхніх особливостей варто відзначити такі:

  • Не потребує сторонніх модулів ядра, оскільки всі інструменти працюють на основі BPF, вбудованого в ядро, а BCC використовує функції, додані в Linux серії 4.x.
  • Дозволяє спостерігати за виконанням програм.
  • Складається з декількох інструментів аналізу продуктивності з файлами прикладів і man-сторінками.

BCC підходить для досвідчених користувачів Linux і дозволяє легко писати BPF-програми, використовуючи інструментарій ядра на C, а також зовнішні інтерфейси на Python і lua.

Крім того, він підтримує безліч завдань, таких як аналіз продуктивності, моніторинг, управління мережевим трафіком і багато іншого.

Як встановити BCC у Linux-системах

Пам’ятайте, що BCC використовує функції, додані в ядро Linux версії 4.1 або вище, і, як вимога, ядро повинно бути скомпільоване зі встановленими нижче прапорами:

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
# [optional, for tc filters]
CONFIG_NET_CLS_BPF=m
# [optional, for tc actions]
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_JIT=y
# [for Linux kernel versions 4.1 through 4.6]
CONFIG_HAVE_BPF_JIT=y
# [for Linux kernel versions 4.7 and later]
CONFIG_HAVE_EBPF_JIT=y
# [optional, for kprobes]
CONFIG_BPF_EVENTS=y
# Need kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=y

Ви можете перевірити всі зазначені прапори конфігурації ядра за допомогою однієї команди grep, вказавши всі імена прапорів як шаблони.

grep -E 'CONFIG_BPF=y|CONFIG_BPF_SYSCALL=y|CONFIG_NET_CLS_BPF=m|CONFIG_NET_ACT_BPF=m|CONFIG_BPF_JIT=y|CONFIG_HAVE_BPF_JIT=y|CONFIG_HAVE_EBPF_JIT=y|CONFIG_BPF_EVENTS=y|CONFIG_IKHEADERS=y' /boot/config-$(uname -r)

Після перевірки прапорів ядра настав час встановити інструменти BCC в Linux-системи.

Встановлення інструментів BCC у Debian

Ви можете знайти bcc і його інструменти у звичайному основному сховищі Debian. Вони походять з вихідного пакета bpfcc і мають назви bpfcc-tools, python3-bpfcc, libbpfcc і libbpfcc-dev.

echo deb http://cloudfront.debian.net/debian sid main >> /etc/apt/sources.list
sudo apt-get install -y bpfcc-tools libbpfcc libbpfcc-dev linux-headers-$(uname -r)

Встановлення інструментів BCC на Ubuntu

Ви можете знайти різні версії bcc у звичайному репозиторії Ubuntu Universe.

sudo apt-get install bpfcc-tools linux-headers-$(uname -r)

Встановлення інструментів BCC на Fedora

Починаючи з Fedora 40, двійкові файли bcc доступні в стандартному репозиторії.

sudo dnf install bcc

Встановлення інструментів BCC на RHEL

Інструмент bcc уже включено в офіційний репозиторій yum під назвою bcc-tools.

sudo yum install bcc-tools

Встановлення інструментів BCC в Arch Linux

bcc доступний у стандартному репозиторії Arch і може бути встановлений за допомогою команди pacman.

pacman -S bcc bcc-tools python-bcc

Встановлення інструментів BCC на openSUSE

Для openSUSE Leap 42.2 (і пізніших версій) і Tumbleweed, bcc вже включено в офіційне репо.

sudo zypper ref
sudo zypper in bcc-tools bcc-examples

Як використовувати інструменти BCC у системах Linux

Усі інструменти BCC встановлюються в каталог /usr/share/bcc/tools. Однак ви можете запустити їх із сховища BCC на Github у каталозі /tools, де вони закінчуються розширенням .py.

ls /usr/share/bcc/tools

Ми розглянемо кілька прикладів – моніторинг загальної продуктивності системи Linux і роботи в мережі.

Трасування системних викликів open() у Linux

Давайте почнемо з відстеження всіх викликів open() за допомогою інструменту opensnoop. Це дасть нам змогу дізнатися, як працюють різні додатки, визначивши їхні файли даних, конфігураційні файли та багато іншого:

cd /usr/share/bcc/tools 
sudo ./opensnoop

Аналіз затримки дискового введення-виведення в Linux

У цьому прикладі показано узагальнений розподіл затримок дискового вводу-виводу за допомогою інструменту biolatency. Після виконання команди зачекайте кілька хвилин і натисніть Ctrl-C, щоб завершити її та переглянути результати.

sudo ./biolatency

Відстеження нових процесів у Linux

У цьому розділі ми перейдемо до відстеження нових процесів у процесі виконання за допомогою інструменту execsnoop. Щоразу, коли процес форкується системними викликами fork() і exec(), він відображається у виводі. Однак не всі процеси вдається відстежити.

sudo ./execsnoop

Відстеження повільних операцій файлової системи Ext4

За допомогою ext4slower можна відстежити загальні операції файлової системи ext4, які виконуються повільніше за 10 мс, щоб допомогти нам виявити незалежні повільні операції введення-виведення з диска через файлову систему.

Він виводить лише ті операції, які перевищують порогове значення:

sudo ./ext4slower

Дослідження активності дискового введення-виведення за допомогою biosnoop

Далі давайте за допомогою інструменту biosnoop роздрукуємо рядок щосекундних дискових операцій введення-виведення з такими подробицями, як ідентифікатор процесу, сектор, байт, затримка тощо:

sudo ./biosnoop

Аналіз продуктивності системного кешу

Далі ми використовуємо інструмент cachestat для відображення одного рядка зведеної статистики системного кешу щосекунди. Це дає змогу виконувати операції з налаштування системи, відзначаючи низький коефіцієнт потрапляння в кеш і високий відсоток промахів:

sudo ./cachestat

Моніторинг TCP-з’єднань у Linux

Щосекундний моніторинг TCP-з’єднань за допомогою інструменту tcpconnect. Його висновок містить адресу джерела та призначення, а також номер порту. Цей інструмент корисний для відстеження несподіваних TCP-з’єднань, допомагаючи тим самим виявити неефективність конфігурації програми або зловмисника.

sudo ./tcpconnect

Усі перераховані вище інструменти можна використовувати з різними опціями, наприклад, щоб увімкнути сторінку довідки для цього інструменту, використовуйте опцію -h:

sudo ./tcpconnect -h

Відстеження невдалих системних викликів exec()s

Щоб відстежити невдалі системні виклики exec()s, використовуйте опцію -x в opensnoop, як показано нижче:

sudo ./opensnoop -x

Трасування особливих функцій процесу

Останній приклад нижче демонструє, як виконати користувацьку операцію трасування. Ми відстежуємо конкретний процес, використовуючи його PID.

Спочатку визначте ідентифікатор процесу:

pidof firefox

Пізніше запустіть користувацьку команду трасування. Наведена нижче команда -p вказує ідентифікатор процесу, do_sys_open() – це функція ядра, яка відстежується динамічно, включаючи другий аргумент у вигляді рядка.

sudo ./trace -p 4095 'do_sys_open "%s", arg2'

Анотація

BCC – це потужний і простий у використанні набір інструментів для розв’язання різноманітних завдань системного адміністрування, як-от відстеження продуктивності системи, відстеження вводу-виводу блокових пристроїв, функцій TCP, операцій із файловою системою, системних викликів, пробок Node.js і багатьох інших. Важливо відзначити, що в комплект постачання входить кілька файлів прикладів і man-сторінок для інструментів, що робить його зручним і надійним.

Поділіться своєю любов'ю

Залишити відповідь

0 комментариев
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x