Профілі

Реєстрація використання ресурсів на рівні коду.

Стан: Alpha

Профіль — це набір зразків та повʼязаних з ними метаданих, який показує, де застосунки споживають ресурси під час виконання. Зразок фіксує значення, виявлені в певному програмному контексті (зазвичай це трасування стека), яке за бажанням може доповнюватися додатковою інформацією, такою як ідентифікатор трасування, що відповідає запиту вищого рівня.

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

Наприклад, профіль On-CPU містить зразки (агреговані трасування стеків) для коду, який виконувався на процесорі під час захоплення зразків, разом з часовими відбитками та кількістю разів, коли кожне трасування стеку було зафіксовано.

Огляд профілів

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

Профілі надають детальний огляд споживання ресурсів та виконання коду з урахуванням часових параметрів, охоплюючи:

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

  • Профілювання на рівні системи: Надає цілісне уявлення про інфраструктуру, виявляючи проблеми в системних викликах, операціях ядра та введенні/виведенні.

Ця картина продуктивності може призвести до:

  • Швидшого аналізу причин проблем: Швидке визначення точної причини погіршення продуктивності.
  • Проактивної оптимізації: Виявлення потенційних проблем до того, як вони вплинуть на користувачів.
  • Покращеного використання ресурсів: Оптимізації інфраструктури для економії коштів та підвищення ефективності.
  • Підвищення продуктивності розробників: Допомагає розробникам перевіряти продуктивність коду та запобігати регресіям.

Як профілі доповнюють інші сигнали

Кожен сигнал OpenTelemetry відповідає на різне питання:

СигналПитання
ЖурналиЯкі дискретні події відбулися? (інформація про поведінку системи)
МетрикиЩо відбувається на рівні системи? (наприклад, використання CPU 90%)
ТрасуванняЯк запит проходить через розподілену систему?
ПрофіліЯкий код відповідає за споживання ресурсів?

Профілі OpenTelemetry підтримують двосторонні звʼязки з іншими сигналами. Ці кореляції працюють у двох вимірах:

  • Кореляція контексту запитів: Звʼязування даних профілювання з конкретним трасуванням або відрізком, щоб можна було побачити, який код виконувався під час конкретного запиту.

  • Кореляція контексту ресурсів: Звʼязування даних профілювання з тим самим ресурсом, який згенерував відповідні метрики, журнали або трасування, наприклад, з тим самим екземпляром служби.

Профілі стають особливо потужними, коли вони корелюються з іншими сигналами:

  • Журнали та профілі: На основі запису в журналі про нестачу пам’яті визначте шляхи виконання коду, що спричиняють навантаження на пам’ять.
  • Метрики та профілі: При різкому зростанні завантаження процесора або пам’яті переходьте безпосередньо до функцій, які споживають ці ресурси.
  • Трасування та профілі: У разі повільного відрізка в трасуванні перегляньте відповідний профіль, щоб визначити код, який спричиняє затримку.

Типи профілів

Профілювання дозволяє фіксувати різні види використання ресурсів. До поширених типів профілів належать:

  • On-CPU: Які функції споживають процесорний час?
  • Off-CPU: Де потоки заблоковані або очікують (наприклад, блокування, введення/виведення) замість виконання?
  • Heap (памʼять): Які функції виділили памʼять, яка все ще використовується?
  • Allocations (памʼять): Які шляхи коду відповідають за найбільшу кількість виділеної памʼяті (незалежно від того, чи була ця памʼять звільнена)?

Сигнал профілів OpenTelemetry є достатньо гнучким, щоб врахувати всі ці вимоги. Однак конкретні типи профілів, що доступні, залежать від середовища виконання мови та використовуваного профілювальника.

Як працює профілювання

Існує кілька підходів до збирання профілів, і ми розробили профілі OpenTelemetry, щоб підтримувати всі з них:

  • Профілювання на основі вибірки: Профілювальник періодично перериває програму, наприклад, використовуючи переривання на основі таймера, і записує поточний стек викликів. Це найпоширеніший підхід для профілювання CPU. В Linux профілювальники можуть використовувати eBPF для захоплення стеків викликів з ядра без будь-яких змін у застосунках користувачів. Цей підхід дозволяє інструментування без написання жодного рядка коду, профілювання всієї системи (включаючи код, створений компільованими мовами без підтримки середовища виконання) і призначений для безперервного, низьковитратного використання в робочому середовищі.
  • Профілювання на основі інструментування: Хуки середовища виконання або інструментація байткоду фіксують такі події, як виділення пам’яті, отримання блокувань або збирання сміття, разом із відповідними трасуваннями стека.

Незалежно від методу збору, отримані дані серіалізуються у відповідності до загальної моделі даних профілю OpenTelemetry та експортуються через OTLP.

Збирання профілів

OpenTelemetry надає агента профілювання на основі eBPF для Linux, здатного профілювати більшість мов без будь-яких змін у коді.

Додаткові інтеграції профілювання для конкретних мов, які використовують вбудовані фреймворки профілювання середовища виконання, такі як JFR для Java або pprof для Go, також стануть доступними по мірі розвитку сигналу.

Ви можете експортувати профілі через OTLP до OpenTelemetry Collector або безпосередньо до будь-якого сумісного бекенду.

Специфікація

Щоб дізнатися більше про профілі в OpenTelemetry, дивіться специфікацію профілів.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (091c99cf)