Преобразование входных данных
На данный момент Monium поддерживает прием данных только в формате OpenTelemetry
Поскольку модель данных OpenTelemetry не полностью соответствует логической модели данных в Monium, например нет разделения на labels и meta, используется ряд правил и преобразований.
Преобразования атрибутов
Атрибуты из ресурсов (ResourceLogs.resource.attributes), instrumentation scope (ScopeLogs.scope.attributes) и строчек лога (LogRecord.attributes) объединяются и переносятся в метки (labels) и метаинформацию (meta) по следующему алгоритму:
- На каждом уровне (resource/scope/log) собираются атрибуты и распределяются на
labelsиmeta:- Атрибуты, имена которых начинаются с
labels., попадут вlabels(префиксlabels.будет удален). - Атрибуты, имена которых начинаются с
meta., будут записаны вmeta(префиксmeta.будет удален). - Все остальные атрибуты попадут в
meta, за исключением известных атрибутов. - Атрибуты, ключи которых начинаются с символа подчеркивания
_или содержат непечатные символы, будут отброшены. Количество отброшенных атрибутов будет отражено в метрике.
- Атрибуты, имена которых начинаются с
labelsиmetaсо всех уровней (resource/scope/log) объединяются, наибольший приоритет имеют атрибуты уровня log, меньший приоритет у атрибутов уровня scope, самый низкий — у атрибутов уровня resource. Подробнее в таблице приоритетов.- Значения в атрибутах с типом
int64илиdoubleостаются числами. Остальные типы приводятся к строкам:- Bool — строка со значением
trueилиfalse. - Байты сериализуются как base64-строка (RFC 4648
). - Массивы и словари сериализуются аналогично формату JSON.
- Bool — строка со значением
- Атрибуты из
labels, не удовлетворяющие ограничениям на лейблы, переносятся на уровеньmeta(существующий атрибут удаляется). - Атрибуты из
meta, не удовлетворяющие ограничениям на метаинформацию, отбрасываются. Количество отброшенных атрибутов будет отражено в метрике.
Приоритеты
Приоритеты для атрибутов в labels
| Атрибут | Resource | Scope | Log |
|---|---|---|---|
валидное значение лейбла labels.abc |
2 | 1 | 0 |
(0 — наибольший приоритет, 2 — самый низкий приоритет)
Приоритеты для атрибутов в meta
| Атрибут | Resource | Scope | Log |
|---|---|---|---|
abc |
8 | 6 | 4 |
meta.abc |
7 | 5 | 3 |
невалидное значение лейбла labels.abc |
2 | 1 | 0 |
(0 — наибольший приоритет, 8 — самый низкий приоритет)
Известные атрибуты
Некоторые системные атрибуты считаются метками без префикса labels.:
projectclusterservice,service.namehost,host.name,hostnameservice.componentservice.versiondeployment.environmentdc
Важно
Атрибут request_id также считается известной меткой, но в будущем будет мигрировать на meta.
Важно
Системные атрибуты project, cluster, service, host ожидаются на уровне ресурса.
Особенности преобразования зарезервированных меток:
Если значение найдено по первому (самому приоритетному) ключу из списка и оно не пустое и не null, оно записывается в соответствующую метку атрибута. Использованный ключ удаляется. Сохранение остальных ключей из списка не гарантируется.
| Метка в otel формате (ключ атрибута) | Преобразуется в (лейбл атрибута) |
|---|---|
service/service.name |
service |
host/host.name/hostname |
host |
labels.component/service.component |
component |
labels.version/service.version |
version |
labels.env/deployment.environment |
env |
labels.dc/dc |
dc |
Невалидные атрибуты
Атрибуты, которые не удовлетворяют ограничениям, будут удалены и не попадут в долгосрочное хранилище. Остальная информация из строчки лога будет сохранена.
Поддерживаемые поля OTLP
Уровень Scope
Поля уровня Scope
- Поле
nameв атрибутscope.name; - Поле
versionв атрибутscope.version.
Полученные атрибуты имеют наименьший приоритет.
Уровень Log
Идентификаторы трейса и спана
Поля trace_id и span_id являются опциональными. Значения полей должны иметь длину:
trace_id— 16-байтовый идентификатор;span_id— 8-байтовый идентификатор.
Валидные идентификаторы будут сохранены в систему в HEX-формате в trace.id и span.id соответственно.
Подробное описание см. в спецификации
В формате JSON представление trace_id и span_id зависит от протокола:
| Протокол | Представление |
|---|---|
| HTTP+JSON | HEX-строка |
| GRPC+JSON | Base64-строка |