ОтелДетекторРесурсаКонтейнера
Детектор ресурса контейнера: идентификатор контейнера, в котором запущен процесс.
Описание
Этот детектор вызывает ОтелРесурсы.ИзДетекторов, через неё атрибуты попадают в ресурс автоконфигурации и файловой конфигурации. Самому вызывать детектор нужно, только чтобы получить эти атрибуты отдельно.
| Атрибут | Значение |
|---|---|
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 и возвращает пустой ресурс. Исключение он не выбрасывает.
Конструктор
Новый ОтелДетекторРесурсаКонтейнера(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. Если процесс не в контейнере или идентификатор не определён — пустой ресурс без адреса схемы
Пример
РесурсКонтейнера = Новый ОтелДетекторРесурсаКонтейнера().Обнаружить();
ИдКонтейнера = РесурсКонтейнера.Атрибуты().Получить("container.id");