Skip to content

ОтелДетекторРесурсаКонтейнера ​

Детектор ресурса контейнера: идентификатор контейнера, в котором запущен процесс.

Описание ​

Этот детектор вызывает ОтелРесурсы.ИзДетекторов, через неё атрибуты попадают в ресурс автоконфигурации и файловой конфигурации. Самому вызывать детектор нужно, только чтобы получить эти атрибуты отдельно.

АтрибутЗначение
container.idИдентификатор контейнера из 64 шестнадцатеричных символов

Идентификатор определяется только на Linux:

  • из /proc/self/cgroup — последний сегмент пути cgroup из 64 шестнадцатеричных символов, в том числе с префиксом среды (docker-, cri-containerd-, crio-, libpod-) и суффиксом .scope; так идентификатор виден при cgroup v1 и при cgroup v2 без собственного пространства имён;
  • если в cgroup его нет — из /proc/self/mountinfo: каталог контейнера Docker (containers/<id>) или podman (containers/overlay-containers/<id>) в точках монтирования; так идентификатор виден при cgroup v2 с собственным пространством имён. Каталог песочницы pod-а Kubernetes (sandboxes/<id>) не берётся: это идентификатор pod-а, а не контейнера.

На Windows и macOS идентификатор контейнера изнутри процесса не определить, детектор возвращает пустой ресурс. Процесс вне контейнера тоже получает пустой ресурс.

Атрибуты образа контейнера (container.image.name, container.image.tags, container.image.repo_digests) детектор не заполняет: изнутри процесса их не узнать, они есть только у среды исполнения контейнеров (Docker API, API Kubernetes). Строковый container.image.name можно задать в OTEL_RESOURCE_ATTRIBUTES (container.image.name=registry.example.com/my-app). container.image.tags и container.image.repo_digests — массивы строк, а OTEL_RESOURCE_ATTRIBUTES задаёт только строки: их задают в resource.attributes файловой конфигурации с типом string_array.

В Kubernetes атрибуты образа может добавить коллектор, процессор k8sattributes, но не по умолчанию: нужные атрибуты перечисляются в его extract.metadata, а контейнер pod-а процессор находит по container.id (его заполняет этот детектор) или k8s.container.name. container.image.repo_digests процессор добавляет, только если дайджест образа передаёт среда исполнения контейнеров (CRI).

Если файл прочитать не удалось, детектор пишет ошибку в лог oscript.lib.opentelemetry.resource.container и возвращает пустой ресурс. Исключение он не выбрасывает.

Конструктор ​

bsl
Новый ОтелДетекторРесурсаКонтейнера(Cgroup, Mountinfo, ТипОС)
ПараметрТипПо умолчаниюОписание
CgroupСтрока/proc/self/cgroupПуть к файлу cgroup процесса
MountinfoСтрока/proc/self/mountinfoПуть к файлу mountinfo процесса
ТипОССтрокаОС текущей машиныТип ОС в значениях os.type: linux, windows, darwin. Идентификатор ищется только при linux

Параметры нужны для тестов; в обычной работе детектор создаётся без параметров.

Методы ​

Обнаружить ​

Определяет идентификатор контейнера.

Возвращает: ОтелРесурс — ресурс без атрибутов по умолчанию: только container.id и адрес схемы https://opentelemetry.io/schemas/1.44.0. Если процесс не в контейнере или идентификатор не определён — пустой ресурс без адреса схемы

Пример ​

bsl
РесурсКонтейнера = Новый ОтелДетекторРесурсаКонтейнера().Обнаружить();
ИдКонтейнера = РесурсКонтейнера.Атрибуты().Получить("container.id");

См. также ​