Перейти к основному содержимому

Маскирование

Маскирование предоставляет возможность скрывать часть информации в логах без изменения самих логов в seq-db.

Маскирование применяется к операциям поиска, экспорта и агрегирования.

Смотрите раздел handlers.seq_api.masking в конфигурации.

Примеры

Простой

Все поля лога будут замаскированы. Маски будут применяться последовательно.

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
mode: 'mask'
- re: '@[a-z]+'
mode: 'mask'

До:

{
"message": "request from @host123",
"user": "@ivan",
"phone": "123-456-7890"
}

После:

{
"message": "request from ********",
"user": "*****",
"phone": "************"
}

Обрабатываемые/Игнорируемые поля

Вы можете указать список полей, которые будут обрабатываться/игнорироваться во время маскирования. Список может быть как глобальным для всех масок, так и локальным для каждой отдельной маски (локальный имеет более высокий приоритет).

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
mode: 'mask'
process_fields:
- 'private_phone'

До:

{
"public_phone": "098-765-4321",
"fake_phone": "123-456-7890",
"private_phone": "123-456-7890"
}

После:

{
"public_phone": "098-765-4321",
"fake_phone": "123-456-7890",
"private_phone": "************"
}

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
mode: 'mask'
ignore_fields:
- 'fake_phone'
process_fields:
- 'fake_phone'

До:

{
"public_phone": "098-765-4321",
"fake_phone": "123-456-7890",
"private_phone": "123-456-7890"
}

После:

{
"public_phone": "************",
"fake_phone": "123-456-7890",
"private_phone": "************"
}

Группы

Для частичного маскирования используется поле groups.

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
groups: [1, 3]
mode: 'mask'

До:

{
"phone": "123-456-7890"
}

После:

{
"phone": "***-456-****"
}

Режимы маскирования

Существует 3 режима маскирования: mask, replace и cut. В приведенных выше примерах использовался режим mask.

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
mode: 'replace'
replace_word: <phone>

До:

{
"phone": "123-456-7890"
}

После:

{
"phone": "<phone>"
}

masking:
masks:
- re: '(\d{3})-(\d{3})-(\d{4})'
mode: 'cut'

До:

{
"message": "phone: 123-456-7890;"
}

После:

{
"message": "phone: ;"
}

Фильтрация по полям

Фильтрация по полям предоставляет возможность применять маски только для тех событий, поля которых попадают под условия фильтрации.

Набор фильтров по полям

Набор фильтров по полям - это набор фильтров, которые связаны между собой логическим условием (or, and, not). Даже если вам нужно применить только один фильтр, вы должны задать condition, но в этом случае оно игнорируется (за исключением not).

masking:
masks:
- ...
field_filters:
- condition: 'or'
filters: [<filter1>, <filter2>, ...]

Примеры

masking:
masks:
- ...
field_filters:
condition: 'or'
filters:
- filed: 'level'
mode: 'equal'
values: ['0', '1', '2', '3']
- field: 'message'
mode: 'contains'
vaules: ['error', 'panic']

Будет замаскировано:

{
"level": "3",
"message": "request failed"
}
{
"level": "6",
"message": "parsing error occured"
}

Не будет замаскировано:

{
"level": "4",
"message": "request failed"
}

masking:
masks:
- ...
field_filters:
condition: 'not'
filters:
- filed: 'version'
mode: 'suffix'
values: ['test', 'rc']

Будет замаскировано:

{
"version": "1.23.4"
}

Не будет замаскировано:

{
"version": "1.23.4-test"
}
{
"version": "1.23.4-rc"
}