Skip to content

Перейти в файлах конфига к идентификаторам без необходимости кавычек для имен ключей с точками #5

@r3code

Description

@r3code

Сейчас для отделения частей имен ключей с точками в metrics-catalog.yml используются двойные кавычки Attributes."url.path": "/brand/abc-123/sub-1234/".
В коде генерации сделана подмена " на " для совместимости с кодом тестов vector.

Однако сейчас в файле metrics-catalog.yml можно встретить 2 стиля
в ulp_access_log_field_mapping это Attributes."url.path", а в filter: и testdata это Attributes."url.path".

Хочется привести это к одному формату, чтобы не нужно было думать как тут правильно, чтобы подходило и для toml в конфиге vector и тут в yml.

Предложение

Воспользоваться форматом категория:ключ. Так как мы в Ви.Tech используем модель OpenTelemetry Logs Data Model, то в итоге внутри события vector данные хранятся в map (string, string). У нас 2 основных map: Attributes и Resources, остальные простые типы.
Так как имя в map это строка, то нас устроит, например, Attributes:http.response.status_code. В Yaml можно писать это в ключах и значениях. Причем для однообразия можно всегда писать в кавычках "Attributes:http.response.status_code" "http_code" или status: "Attributes:http.response.status_code".
Разбор и преобразование в форму нужную для vector в коде toml тестов просто - сделаем из частей "Attributes"."http.response.status_code". Это решается или в коде по месту {{ "Attributes:http.request.method" | replace(":", "\".\"") | prepend('\"') | append('\"') }} или написанием кастомного модуля к Ansible (filter_plugins/custom_filters.py):

def colon_to_dotted_quotes(value):
    return '"{}"'.format('"."'.join(value.split(':')))

class FilterModule(object):
    def filters(self):
        return {
            'colon_to_dotted_quotes': colon_to_dotted_quotes
        }

Применять: {{ "Attributes:http.request.method" | colon_to_dotted_quotes }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions