Системный журнал#

Для ППО SOWA существует три источника журнальной информации:

Для СПО SOWA логи установки будут расположены в директории /sowa/distrib/logs.

Очистка файлов логирования рассмотрена в разделе Очистка файлов логирования.

Настройка рoтации файлов логирования приведена в разделе Рoтация файлов логирования.

События системного журнала перечислены в разделе Основные события.

Настройка системного журнала#

Журналирование событий конфигуратора#

Журнал событий конфигуратора находится в файле:

/sowalogs/sowa-config.log

По умолчанию события конфигуратора пишутся в syslog и перенаправляются в вышеуказанный файл посредством правила в rsyslog.conf:

if ($programname startswith "sowa-config") then {
    action(type="omfile" file="/sowalogs/sowa-config.log" flushOnTXEnd="on")
    stop
}

Для явного указания типа логирования используется ключ --log-type:

--log-type file|syslog

Если используется тип логирования syslog, дополнительно можно указать хост и порт с помощью директив --host (по умолчанию localhost) и --port (по умолчанию 514).

Журналирование событий профиля#

Настройка уровня и типа логирования#

Уровень и тип логирования профиля указывается разделе system\optional конфигурационного файла профиля параметрами log_level и log_type. Например:

version: 2.0.3
profile: erib_mapi
system:
  optional:
    log_level: error
    log_type: file

Доступны следующие уровни логирования:

  • debug - информации для отладки;

    Внимание!

    Включение данного уровня логирования не рекомендуется в промышленных инсталляциях.

  • info - подробная информация о процессе обработки запроса/ответа;

  • notice - уведомление о событиях;

  • warn - предупреждение;

  • error - ошибка при обработке запроса/ответа, не приводящая к неработоспособности;

  • crit - критические ошибки, не приводящие к неработоспособности;

  • emerg-alert - аварийный сбой, уведомление о неработоспособности;

  • off - отключение логирования.

Можно отправлять сообщения в удаленный приемник сообщений syslog, задав параметры подключения к удаленному сервер log_host и log_port.

Следует учесть, что при выборе уровня debug, логи профиля становятся значительно информативнее, но максимальный эффект достигается при использовании отлаженных пакетов SOWA.

Для это необходимо произвести установку СПО SOWA c флагом -g:

./install.sh -g

Для того чтобы убедиться в том, что в системе установлен отлаженный пакет, рекомендуется проанализировать вывод команды sudo yum list installed sowa-nginx-debug\*:

sowa-nginx-debug.x86_64    2.1-84904.el7       @/sowa-nginx-debug-2.1-84904.el7.x86_64

Далее необходимо запустить профиль с флагом –debug:

sowa-config --run <имя профиля> --debug

Более подробно процесс установки описан в разделе «Установка SOWA в режиме отладки» в Руководстве по установке.

Существует следующие типы логирования профиля: file, syslog и kafka. По умолчанию используется file.

При использовании типа kafka события профиля отправляются в kafka. Существует возможность комбинировать источники для отправки логов, например, файл+kafka, kafka+файл+syslog и т.д. в зависимости от потребностей клиента.

При использовании типа syslog cобытия профиля уходят в syslog через сокет unix:/dev/log. Имеется возможность указать хост и порт посредством параметров log_host и log_port.

В случае syslog журналирования события перенаправляются в файл /sowalogs/sowa-nginx.log посредством правила в rsyslog.conf:

if ($programname startswith "sowa_nginx") then {
    action(type="omfile" file="/sowalogs/sowa-nginx.log" flushOnTXEnd="on")
    stop
}

Расположение журнальных файлов#

При типе логирования file, журнал событий профиля находится в каталоге:

/sowalogs/<имя профиля>

Системный лог /sowalogs/<имя профиля>/system/main_error.log содержит как общую для профиля информацию (например, старт/стоп рабочих процессов), так и информацию модулей SOWA, которая в силу специфики не может быть привязана к конкретному логу сервиса (например, active health check).

Логи сервисов содержатся в следующих файлах:

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_access.log содержит журнал обращений к этому сервису.

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_error.log содержит расширенную информацию по обработке событий внутри сервиса.

ID сервиса указывается в конфигурационном файле для каждого сервиса и имеет уникальное значение.

Кроме того, существует служебный каталог с логами событий сервиса статистики профиля:

  • /sowalogs/<имя профиля>/services/service_profile_status/*.log.

Данный сервис используется для мониторинга профилей посредством Zabbix (интеграция с Zabbix описана в разделе Интеграция с Zabbix данного руководства.

Транзакционные логи профиля#

В профиле существует возможность включить логирование транзакций. В этом случае будут доступны подробные данные жизненного цикла запроса на каждом из этапов: запрос клиента, запрос на upstream, ответ от upstream и ответ клиенту.

За активацию этого режима логирования отвечает параметр event_hook (далее EVH).

Данный параметр можно объявить как в service_main_proxy (в этом случае настройки EVH наследуются всеми остальными сервисами), так и в любом из других доступных типов сервисов. Например:

service_http_proxy:
  - id: service1
    name: service1
    optional:
      event_hook:
        stage:
          - name: client_request
          - name: client_response
          - name: upstream_request
          - name: upstream_response
        log_in_file: on

Если включено логирование в файл log_in_file: on, журнальную информацию можно найти в каталоге /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>/.

Далее логи транзакций располагаются в каталогах с именем, соответствующим каждому stage:

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>/client_request/;

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>/client_response/;

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>/upstream_request/;

  • /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>/upstream_response/.

Журналирование событий фильтра безопасности#

В профиле также может быть объявлен фильтр безопасности ModSecurity. Например:

filters:
  filter_mds:
    custom_rules:
      - owasp-crs/crs-setup.conf
      - owasp-crs/rules/*.conf

По умолчанию генерируемые фильтром события попадают в syslog.

Для явного указания типа логирования используется директива SecAuditLogType:

filters:
  filter_mds:
    config:
      SecAuditLogType: Syslog|Concurrent|Serial

Для типа syslog дополнительно можно указать:

  • хост с помощью директивы SecAuditSyslogHost (по умолчанию localhost);

  • порт с помощью директивы SecAuditSyslogPort (по умолчанию 514);

  • протокол с помощью директивы SecAuditSyslogProtocol (по умолчанию UDP).

В случае syslog журналирования события перенаправляются в файл /sowalogs/sowa-mds.log посредством правила в rsyslog.conf:

if ($programname startswith "sowa-modsecurity") then {
    action(type="omfile" file="/sowalogs/sowa-mds.log" flushOnTXEnd="on")
    stop
}

Для типа журналирования Concurrent события хранятся в отдельных файлах в директории /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds/, журнал событий отражается в файле /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds.log.

Пример:

/sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds.log

localhost:8091 x.x.x.x - [24/Dec/2019:14:47:22 +0300] "GET /payments/v4/banking/products/p2bpayments/mobile-main/main?connectdselectfrom HTTP/1.1" 500 298 - "curl/7.29.0" 157718804246.059708 - /sowalogs/uko_web/services/service_main_proxy/1_mds/20191224/20191224-1447/20191224-144722-157718804246.059708 0 2564.000000 md5:998bf6e95ee710bf07a7243b992c480a

/sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds/<транзакция>

{"transaction":{"client_ip":"x.x.x.x","time_stamp":"Tue Dec 24 14:47:22 2019","server_id":"4dd156df48891b6fb2981a221801cdec879fb08c","client_port":0,"host_ip":"x.x.x.x","host_port":12147,"unique_id":"157718804246.059708","request":{"method":"GET","http_version":1.1,"uri":"/payments/v4/banking/products/p2bpayments/mobile-main/main?connectdselectfrom","headers":{"Host":"localhost:8091","X-Real-IP":"x.x.x.x","Connection":"close","Content-Length":"5","User-Agent":"curl/7.29.0","Accept":"*/*","Content-Type":"application/json","Origin":"front.ift-node2.testonline.mycompany.ru","X-Forwarded-For":"127.0.0.1"}},"response":{"body":"{\n\t\"status\": {\n\t\t\"code\": 3,\n\t\t\"errors\": [\n\t\t\t{\n\t\t\t\t\"id\": \"CODE-100\",\n\t\t\t\t\"element\": \"\",\n\t\t\t\t\"title\": \"datapower\",\n\t\t\t\t\"description\": \"Неизвестная run-time ошибка\"\n\t\t\t}\n\t\t],\n\t\t\"warnings\": [\n\t\t\t{\n\t\t\t\t\"id\": \"\",\n\t\t\t\t\"element\": \"\",\n\t\t\t\t\"title\": \"\",\n\t\t\t\t\"description\": \"\"\n\t\t\t}\n\t\t]\n\t}\n}\n","http_code":500,"headers":{"Access-Control-Allow-Methods":"","Date":"Tue, 24 Dec 2019 11:47:21 GMT","Access-Control-Allow-Headers":"","Access-Control-Allow-Credentials":"true","Server":"SOWA","Server":"SOWA","Connection":"close","Access-Control-Allow-Origin":"front.ift-node2.testonline.mycompany.ru","Content-Type":"application/json;charset=UTF-8","Content-Length":"298","Access-Control-Max-Age":""}},"producer":{"modsecurity":"ModSecurity v3.0.3 (Linux)","connector":"ModSecurity-nginx v1.0.0","secrules_engine":"Enabled","components":[]},"messages":[{"message":"GET or HEAD Request with Body Content.","details":{"match":"Matched \"Operator `Rx' with parameter `^0?$' against variable `REQUEST_HEADERS:Content-Length' (Value: `5' )","reference":"o0,3v0,3v167,1","ruleId":"7036","file":"/sowa/profile_storage/custom/uko_web/ufs_rules/REQ.conf","lineNumber":"84","data":"GET","severity":"2","ver":"OWASP_CRS/3.0.0","rev":"1","tags":[],"maturity":"9","accuracy":"9"}},{"message":"GET or HEAD Request with Body Content.","details":{"match":"Matched \"Operator `Rx' with parameter `^0?$' against variable `REQUEST_HEADERS:Content-Length' (Value: `5' )","reference":"o0,3v0,3v167,1","ruleId":"7036","file":"/sowa/profile_storage/custom/uko_web/ufs_rules/REQ.conf","lineNumber":"84","data":"GET","severity":"2","ver":"OWASP_CRS/3.0.0","rev":"1","tags":["application-multi","language-multi","platform-multi","attack-protocol","OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ","CAPEC-272"],"maturity":"9","accuracy":"9"}}]}}

Для типа журналирования Serial события хранятся в одном файле /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds.log.

С точки зрения производительности такой вариант менее предпочтителен, т.к. в один момент времени только одна запись может быть добавлена в файл.

Существует возможность включить отладочный вывод механизма обработки событий фильтра безопасности, объявив флаг debug:

filters:
filter_mds:
debug: true

Отладочный журнал будет доступен в файле /sowalogs/<имя профиля>/services/<тип сервиса>/<id сервиса>_mds.debug.

Очистка файлов логирования#

Перед удалением файлов с логами рекомендуется сделать бэкап.

Для того чтобы очистить логи SOWA, необходимо выполнить следующие действия:

  1. Войдите под учетной записью sowacfg.

  2. Перейдите в каталог /sowalogs/profile/service/service_/ и удалить все файл-логи (.log).

  3. Повторите действия из п.2 для всех каталогов.

  4. Выполните команду:

    sowa-config --reload *profile* --log-type arg
    

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

Рoтация файлов логирования#

Структура логов и расположение скриптов#

В Platform V SOWA реализован механизм ротации log-файлов по заранее заданным критериям.

Файлы, подлежащие ротации:

  1. /sowalogs/sowa-config.log - лог конфигуратора SOWA.

  2. /sowalogs/sowa-mds.log - лог фильтра безопасности SOWA.

  3. /sowalogs/sowa-nginx.log - общий лог ошибок работы для всех профилей SOWA.

  4. /sowalogs/*/system/*.log - общий лог ошибок/доступа для конкретного профиля SOWA.

  5. /sowalogs/*/services/*/*.log - лог ошибок/доступа для конкретного сервиса профиля SOWA.

  6. EVH-логи:

  7. /sowalogs/*/services/*/*/client_request.

  8. sowalogs/*/services/*/*/client_response.

  9. sowalogs/*/services/*/*/upstream_request.

  10. sowalogs/*/services/*/*/upstream_response.

При установке дистрибутива, в каталоги /etc/cron.d/ и /etc/logrotate.hourly.d помещаются скрипты ротации перечисленных выше логов. При этом, интервалы ротации являются настраиваемыми.

Скрипт /etc/logrotate.d/sowa-logrotate осуществляет ротацию access и error логов. Скрипт /usr/local/sowa/bin/sowa-logrotate-evh.sh осуществляет ротацию EVH-логов. Параметр EVH подробно рассмотрен в разделе «Параметр event_hook» в Руководстве разработчика.

Отправка логов профиля в kafka включается опцией system.log_type (описание приведено в разделе Пaраметр logging Руководства разработчика).

Настройка частоты ротации#

Для настройки частоты сбора логов необходимо задать значение переменных окружения SOWALOGMINUTES и SOWALOGMINUTESLR пользователя sowacfg. Значения этих переменных указаны в календаре CRON для запуска соответствующих скриптов ротации. Где SOWALOGMINUTES отвечает за ротацию EVH-логов, а SOWALOGMINUTESLR отвечает за ротацию access и error логов.

Например, значение одного из этих параметров "17,20" будет соответствовать записи CRON: "17,20 * * * *". Этот календарь означает, что ротация будет запускаться в 17 и 20 минут каждого часа.

По умолчанию переменные выставляются в значения «11,23,37,51» и «10,40» соответственно.

Критерии ротации#

Несмотря на указанную частоту запуска скриптов ротации логи будут ротироваться не всегда. На необходимость ротации указывают значения переменных окружения пользователя sowacfg из таблицы ниже.

Параметр

Назначение

Дефолтное значение

80% наполнение

70% наполнение

50% наполнение

SOWAMAXSIZE

Максимальное количество килобайт для директории с EVH-логами, при достижении которого требуется осуществлять ротацию

120000

SOWAMAXSIZE/4

SOWAMAXSIZE/3

SOWAMAXSIZE/2

SOWAOLDFILES

Максимальное количество старых файлов архивов EVH-логов для хранения

30

1

SOWAOLDFILES/2

SOWAOLDFILES - 3

SOWAMAXEVH

Максимальное количество EVH-лог файлов, после которых требуется ротация

2000

100

400

1000

Это не единственные критерии ротации. В скрипт зашито максимальное удаление текущих и архивированных логов при достижении 90% заполнения раздела /sowalogs или при 90% процентах заполнения пространства inodes раздела /sowalogs. Подобное поведение необходимо для избежания срабатываний типовых триггеров заполнения файловых систем в таких системах мониторинга как, например, Zabbix.

Ротация access и error логов производится с помощью стандартного logrotate.d и имеет ограничения в 40 мегабайт на файл и 8 архивов.

Доступ к системному журналу#

Доступ к системному журналу осуществляется под УЗ sowacfg.

Основные события#

В Platform V SOWA доступно большое количество разнообразных событий системного журнала. Далее приведено описание нескольких из основных событий профиля (событий, возникающих при обработке сообщений):

Описание

Комментарий

Уровень записи

Ошибка валидации запроса

Клиент отправил сообщение, которое не соответствует валидационной схеме.

Error

Ошибка валидации ответа

Backend вернул сообщение, которое не соответствует валидационной схеме.

Error

Системная ошибка при работе с менеджером очередей

Менеджер MQ вернул mqcrc, отличный от положительного, при отправке запроса PUT.

Error

Ошибка наличия SQL-Injection

Код ошибки, возвращаемой libModsecurity при срабатывании одного из правил.

Error

Неизвестная run-time ошибка

Типовой код ошибки, если не задано переопределение для данного типа ошибок.

Error

Не найден маршрут

Сервис с подобным URL не был явно создан в профилей.

Error

Обрыв HTTP сессии внешним сервисом до таймаута шлюза

Получили от backend статус 502 или backend разорвал соединение.

Error

Не получили ответа от внешнего сервиса за указанный таймаут

Не получили Response от backend за допустимый интервал времени, указанный в настройках сервиса.

Error

Некорректный ответ от внешнего сервиса

Backend вернул не JSON/не XML сообщение, backend вернул необрабатываемую ошибку.

Error

Ответ не является JSON

Backend вернул не JSON/не XML сообщение, когда ожидалось обратное.

Error

Запрос не является JSON

Тело Request не содержит JSON.

Error

Примеры событий при выполнении административных операций конфигуратора:

Описание

Комментарий

Уровень записи

INFO: Profile "profile" was successfully started.

Запуск профиля успешен.

Info

INFO: Profile "profile" was successfully created.

Создание профиля завершено успешно.

Info

INFO: Rhel version = 8.5

Информация о версии ОС, на которой происходит выполнение операций

Info

`ERROR: Failed to configure profile: File „/sowa/profile_storage/custom/profile/postprocessor_rules.yml“ does not exist!

Ошибка конфигурирования профиля из-за отсутствия требуемых пользовательских ресурсов.`

Error

ERROR: Profile "stub_web_int" was not created, error occured. Profile already exists!

Ошибка при создании профиля - профиль уже создан.

Error

Примеры событий фильтра безопасности:

Описание

Комментарий

Уровень записи

ModSecurity: Access denied with code xxx (phase 3). \[msg "The Application Returned a 500-Level Status Code"\]

Backend вернул ошибку 5хх, которая маскируется шлюзом.

Error

ModSecurity: Access denied with code xxx (phase 2). \[msg "SQL Injection Attack"\]

Заблокирован запрос, в котором обнаружена SQL-инъекция

Error