от Джейсона Коха, с Мартином Спайером, Бренданом Греггом, Эд Хантером

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

Сегодня мы рады сообщить широкому сообществу о тепловых картах задержки и улучшенной поддержке контейнеров для нашего решения для мониторинга на хосте - Vector. Vector имеет открытый исходный код и используется несколькими компаниями. Эти обновления также приносят другие улучшения взаимодействия с пользователем и более свежий стек технологий.

Что такое вектор?

Vector - это фреймворк для мониторинга производительности на уровне хоста с открытым исходным кодом, который мы используем в течение некоторого времени. Наличие нужных показателей, доступных по запросу и с высоким разрешением, является ключом к пониманию того, как ведет себя система, и помогает быстро устранять проблемы с производительностью. Дополнительную информацию об истории создания и архитектуре Vector и PCP можно найти в нашей предыдущей публикации в техническом блоге Знакомство с Vector.

Почему изменения

Есть два основных триггера обновления:

  • Во-первых, в Netflix мы наблюдаем значительный рост использования нашей контейнерной среды (Titus). Исторически в центре внимания наших инструментов и платформы был AWS EC2, но с увеличением количества пользователей, выполняющих миграцию, нам необходимо обеспечить лучшую поддержку вариантов использования контейнеров.
  • Например, возможность отображать метрики на уровне хоста и контейнера на одной панели мониторинга помогает нам быстро отвечать на вопросы: «Дросселируется ли меня среда выполнения контейнера?» или «Есть ли шумные соседи, мешающие моей работе с контейнером?».
  • Во-вторых, у нас есть набор открытых запросов и проблем, которые было сложно решить с помощью текущего компонента панели инструментов. Невозможно было приостановить графики, чтобы сделать снимки экрана, а легенды диаграмм иногда были выложены, скрывая фактические данные диаграммы.

Представляем визуализацию BCC / eBPF

Команда разработчиков производительности Netflix (особенно мой коллега Брендан) вносит свой вклад в eBPF с начала ее работы в 2014 году, включая разработку многих инструментов повышения производительности с открытым исходным кодом для BCC, таких как execsnoop, biosnoop, biotop, ext4slower, tcplife, runqlat и другие. Это инструменты командной строки, и для того, чтобы они были действительно практичными в облачной среде Netflix, насчитывающей более 100 тысяч экземпляров, они должны запускаться из наших графических интерфейсов самообслуживания, включая Vector. Чтобы это работало, необходим интерфейс PCP для BPF.

Андреас Герстмайр проделал фантастическую работу по разработке PCP PMDA для BCC, позволяя считывать выходные данные инструмента BCC из Vector и добавляя визуализации в Vector для просмотра этих данных. Вектор теперь может отображать их из BCC / eBPF:

  • Тепловые карты задержки блоков и файловой системы (ext4, xfs, zfs)
  • Блокировать основные процессы ввода-вывода
  • Активные данные сеанса TCP, такие как основные пользователи, время сеанса, повторные передачи ..
  • Snoops: блокировать ввод-вывод, exec ()
  • Задержка очереди выполнения планировщика

На диаграмме ниже мы видим демонстрацию работы wget. Как только запускается задание wget, диаграмма «runqlat» показывает повышенную активность планировщика (больше желтых областей на диаграмме) и более длительную задержку очереди для некоторых процессов (синие блоки появляются выше в вертикальной области диаграммы). «Tcptop» также показывает появление нового процесса (wget) с новым TCP-соединением и значительным объемом данных в RX_KB - 10–20 МБ / с (что неудивительно, получение большого количества данных).

Большое спасибо Андреасу за отличную работу над его проектом Google Summer of Code 2018.

Новые функции

Чтобы устранить эти изменения, мы ввели следующие новые функции:

  • Теперь мы можем визуализировать любую комбинацию метрик хоста и контейнера из единого представления. Это позволяет нам создавать более сложные однопанельные информационные панели. Например, отображение ЦП хоста и ЦП контейнера или отображение сетевого ввода-вывода для двух взаимодействующих экземпляров в одной и той же визуализации могут быть простым способом получить более полное представление.
  • Размер диаграмм теперь можно изменять и перемещать.
    Это значительно упрощает инженерам создание диаграмм, которые они хотят упорядочить таким образом, чтобы их можно было сравнить и сосредоточить на требуемых областях. В этом примере загрузка ЦП с двух разных хостов организована таким образом, что корреляция всплесков - или нет - более четко видна.

  • Диаграммы будут продолжать собирать данные, даже если вкладка не отображается.
    Ранее переход на другую вкладку браузера приостанавливал сбор и создание данных графика. Теперь, когда вкладка не отображается, данные все равно будут собираться, даже если рендеринг приостановлен.

Улучшение взаимодействия с пользователем

  • Легенды перемещены в подсказки.
    Это освобождает часть визуального пространства и устраняет проблемы с рендерингом, когда большие легенды занимают область диаграммы, как вы можете видеть здесь:

  • Графики можно приостанавливать и возобновлять.
    Это полезно для создания снимков экрана, при сравнении точек данных на диаграммах или в обсуждениях с другими инженерами. При нажатии кнопки «Пауза» сбор данных продолжается в фоновом режиме и обновляются графики. При повторном нажатии кнопки "Воспроизведение" графики сразу же обновляются и отображаются в реальном времени.
    Здесь вы можете увидеть нажатую кнопку "Пауза", а график приостанавливается, пока пользователь не нажмет кнопку "Воспроизвести".

  • Стили и виджеты
    Введение нового подхода к стилю и настройке. Мы ввели цветовую схему Cividis для тепловых карт.

Внутреннее обновление технологии

Более ранние базовые компоненты приборной панели выполнялись в техническом стеке, который был - для JavaScript - относительно старым развертыванием Angular 1.x с рядом зависимостей компонентов. Ключевой компонент приборной панели больше не поддерживается; новые функции, необходимые для решения проблем, были недоступны без разветвления компонента. Вместо того, чтобы разветвляться и инвестировать в устаревший стек, мы решили обновить стек:

  • Переключитесь с Angular 1.x на React с семантическим пользовательским интерфейсом.
  • Обновите конвейер сборки, перейдя от gulp к webpack.
  • Внедрение Semiotic, который представляет собой мощный слой графического рендеринга над React и частями d3. Попутно мы внесли ряд улучшений производительности в Semiotic и для нашего варианта использования.

Текущее состояние

Этот код теперь доступен для публичного использования и со временем должен поступать в пакеты дистрибутива в их цикле выпуска.

Как всегда, мы очень ценим ваши отзывы и вклад. Лучше всего связаться с нами через Github: http://github.com/netflix/vector или через Slack: https://vectoross.slack.com/.

С нетерпением жду

Vector продолжает обслуживать внутренних пользователей Netflix. В новый инструментарий можно внести ряд улучшений в пользовательский интерфейс. В дополнение к этому продолжающийся переход к контейнерам с акцентом на время запуска контейнеров и недолговечные контейнеры, вероятно, будут способствовать более тесной интеграции с инструментами планирования контейнеров. Мы также рады видеть будущее мониторинга с более разнородными рабочими нагрузками - не только Intel x86, но также ARM, AMD x86, графические процессоры, FPGA и т. Д.

Если вам интересно работать над проблемами производительности и вам нравится идея создания качественных инструментов и визуализаций - свяжитесь с нами, мы ищем!