Слогер Создать блог
Разработка

Мониторинг контейнерных бэкендов на eBPF: трассировка задержек без sidecar-ов

Как с помощью eBPF-программ в ядре Linux получать данные о межсервисных задержках, TCP-ретрансмиссиях и профилях системных вызовов в Kubernetes — без изменения кода и без лишних затрат.

В этой статье мы разберём, как запустить лёгкий eBPF DaemonSet, который собирает информацию о TCP-задержках между сервисами, количестве повторных передач и профилях системных вызовов внутри подов Kubernetes. Никаких изменений в приложениях, никаких Envoy sidecar-ов и никакого взрывного роста бюджета.

Проблема observability с sidecar-ами

Многие команды сразу выбирают Envoy или Istio, не оценив затраты. Sidecar-контейнер сервисной сетки добавляет 50–200 мс холодного старта, ~50 МБ памяти на под и нагрузку на CPU, которая растёт при горизонтальном масштабировании. Для стартапа с 40 микросервисами на среднем Kubernetes-кластере это уже существенная статья расходов.

eBPF полностью меняет подход.

Что такое eBPF и как он работает

eBPF (Extended Berkeley Packet Filter) — это программы, которые выполняются в ядре Linux в изолированной JIT-компилируемой виртуальной машине. Они подключаются к tracepoint, kprobes и uprobes, получая прямой доступ к сетевым событиям, решениям планировщика и системным вызовам — без какой-либо инструментации в пользовательском пространстве.

Для трассировки межсервисных задержек мы подключаемся к функциям ядра tcp_sendmsg и tcp_recvmsg и связываем временные метки через BPF-карты — разделяемые структуры памяти, доступные как из ядра, так и из пользовательского пространства.

Архитектура BPF-карт

BPF-карты типизированы, имеют ограниченный размер и управляются ядром. Для многосервисного Kubernetes-окружения хэш-карта с ключом (pid, container_id) позволяет связать задержку с конкретным подом без пересечения данных.

Тип картыНазначениеСложность поиска
BPF_MAP_TYPE_HASHСвязывание PID и временной меткиO(1) в среднем
BPF_MAP_TYPE_PERF_EVENT_ARRAYПотоковая передача событий в userspaceO(1) на CPU
BPF_MAP_TYPE_RINGBUFЭкспорт трасс с высокой пропускной способностьюLock-free, меньше издержек
BPF_MAP_TYPE_LRU_HASHОтслеживание соединений в масштабеАвтоудаление устаревших записей

Для обнаружения TCP-ретрансмиссий подключаемся к tracepoint tcp_retransmit_skb и агрегируем счётчики по (src_ip, dst_ip, dport) в LRU-хэше. Так мы получаем сигнал на уровне сети без участия приложения.

CO-RE: переносимость между версиями ядра

Исторически главным барьером для внедрения eBPF была фрагментация версий ядра. CO-RE (Compile Once, Run Everywhere) с BTF (BPF Type Format) и libbpf решает эту проблему. eBPF-объектный файл содержит информацию о типах, а загрузчик подменяет смещения полей во время загрузки в соответствии с BTF работающего ядра.

Практический workflow: скомпилировать один раз в CI, упаковать .o файл в образ контейнера и загружать на ядрах от 5.4 до 6.x без перекомпиляции. Это делает eBPF пригодным для гетерогенных облачных сред, где версии ядер различаются между пулами узлов.

Интеграция с Grafana и Tempo

При ограниченном бюджете мы используем следующий пайплайн:

  1. eBPF-демон (Go + библиотека cilium/ebpf) читает события из ring buffer.
  2. OpenTelemetry Collector получает спаны по OTLP, батчирует и сжимает их.
  3. Grafana Tempo сохраняет трейсы в объектном хранилище (S3/GCS) — примерно $0.02/ГБ в месяц против $0.10–$0.30 в управляемых APM.
  4. Grafana отображает карты сервисов на основе данных трейсов — без Jaeger или Zipkin.

По сравнению с полной сеткой Istio этот стек работает как один DaemonSet-под на узел, потребляя ~30 МБ RAM и <0.5% CPU на ядро. Вы получаете 90% ценности observability при ~15% инфраструктурных затрат.

Сравнение подходов к observability

ПодходИзменения кодаПотребление памятиВидимость ядраСложность настройки
Envoy sidecar (Istio)Нет~50 МБ/подТолько L7Высокая
Ручной SDK (OTel)ДаМинимальноТолько приложениеСредняя
eBPF DaemonSetНет~30 МБ/узелL3–L7 + syscallsСредняя
Без инструментацииНетНетНетН/Д

Подводные камни

Ключи BPF-карт. Используйте (netns_ino, pid) как ключ, а не просто PID. В общем ядре Kubernetes PID могут пересекаться между контейнерами. Пространство имён по inode сетевого namespace предотвращает утечку данных между подами.

Маршрутизируйте через OTel Collector. Не отправляйте eBPF-события напрямую в Tempo. Collector даёт батчинг, повторные попытки и возможность сменить бэкенд без изменения BPF-кода.

BTF должен быть включён. Проверьте командой ls /sys/kernel/btf/vmlinux. Если файла нет, CO-RE не сработает.

Начинайте с cilium/ebpf на Go. У этой библиотеки лучшая поддержка CO-RE, активное сопровождение и чистый API для работы с картами и ring buffer.

Заключение

eBPF даёт observability на уровне ядра — TCP-задержки, ретрансмиссии, профили syscall — при доле памяти и CPU, потребляемых сервисной сеткой. Сочетание CO-RE, BPF ring buffer и лёгкого пайплайна OTel → Tempo → Grafana готово к production и работает на стартап-инфраструктуре.

Istio стоит использовать только тогда, когда действительно нужно управление трафиком. Для чистой observability eBPF — лучший выбор по умолчанию.

По материалам: dev. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

Маркетинг

Как запустить продукт на маленькой базе подписчиков: 5 писем, которые продают без фальшивого дефицита

Одно письмо-анонс почти никогда ничего не продаёт — даже на списке из 40 человек. Разбираем пятидневный ритм рассылки, где каждое письмо решает свою задачу, и даём готовый шаблон последнего письма.

Слогер 28.10.2026 ▲ 1
Разработка

Как выгрузить вакансии и зарплатные вилки из Greenhouse API: разбор подводных камней

Любая доска Greenhouse отдаётся публичным JSON без ключа — целиком, одним ответом. Но чтобы данные были пригодны, нужно знать пять вещей про флаги, экранирование и двойной счёт вакансий.

Слогер 28.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Маркетинг

Переезд (миграция) с Битрикс24 и amoCRM без потери данных: в Fluxs появился модуль миграции

4 000 контактов в Битрикс24. Сотни сделок. Задачи за несколько лет. И всё это нужно перенести в новую CRM? Раньше такой переезд мог занять несколько дней. А иногда именно из-за переноса данных компании годами оставались в неудобной системе. Мы решили эту проблему. 🚀 В Fluxs появился модуль «Миграция данных». Теперь можно переносить контакты, сделки, задачи, проекты и базу знаний из Битрикс24, amoCRM, Jira, Яндекс Трекера и Confluence. А если вашей системы нет в списке — загрузить данные через Excel, CSV или JSON.

fluxs.ru 27.10.2026 ▲ 1
Карьера

Чем Cal-WARN отличается от федерального WARN: разбор порогов, уведомлений и штрафов

Калифорния требует предупреждать о массовых сокращениях за 60 дней — как и федеральный закон США. Только порог ниже, парт-тайм считается, а правило одной трети не действует. Разбираем, что это меняет для работника и работодателя.

Слогер 27.10.2026 ▲ 0
Карьера

WARN Act: кто считается работодателем при массовом сокращении — разбор для дочек, холдингов и франшиз

По американскому закону уведомление за 60 дней обязан дать только работодатель. Разбираем, как регуляторы решают, какое юрлицо им является, и что делать, если в бумаге стоит незнакомая компания.

Слогер 27.10.2026 ▲ 0
Разработка

Разбор: почему профессию разработчика хоронят каждые 20 лет и как работать, когда всё меняется

Паника вокруг ИИ — не первая волна перемен в отрасли: похожие прогнозы звучали и в 1961 году, и в 2011-м. Разбираем, что в нынешней тревоге реально, а что стоит воспринимать как фоновый шум.

Слогер 27.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Страх провала и страх свидетелей: чем они отличаются и как начинать новое, когда страшно

«Я пока недостаточно хорош» — честная и бесполезная фраза. Обычно дело не в навыке, а в конкретных людях, которые увидят вашу первую попытку. Разбираем, как уменьшить ставку и всё-таки начать.

Слогер 26.10.2026 ▲ 0
Карьера

Почему удалёнка платит меньше — и в каких профессиях всё наоборот: разбор 8 049 вакансий

Медианная вилка на удалёнке ниже офисной на 6,5%. Но внутри функций разрыв меняет знак: безопасность и продажи получают премию за удалёнку, data/ML — самую большую скидку. Показываю, как читать эти цифры на переговорах.

Слогер 26.10.2026 ▲ 0
Личный опыт

Как заказать командную вышивку без минимальной партии: разбор и чек-лист

Малая команда редко может позволить себе стартовый тираж на 30 вещей. Разбираем схему, при которой вышивка делается по одной штуке — и при этом логотип у всех выглядит одинаково.

Слогер 26.10.2026 ▲ 0
Маркетинг

Автоматизация бизнеса за 15 000 или 170 000 рублей в год: в чём разница?

Автоматизация бизнеса за 15 000 или 170 000 ₽ в год. За что такая разница? 🤔 Представьте: компании нужно всего несколько вещей — принимать заявки, согласовывать счета и контролировать задачи сотрудников. А ей предлагают целую цифровую экосистему: CRM, телефонию, маркетинг, аналитику, десятки дополнительных функций… Но что, если половина из этого бизнесу вообще не нужна?

Слогер 25.10.2026 ▲ 1
Fluxs lenta
Реклама · fluxs.ru