Вопрос или проблема
У меня есть 2 фильтра syslog, которые я хочу объединить вместе, но не получается правильный синтаксис
{netmask(192.168.0.1/32) or netmask(192.16.0.5/32);};
и
{not(match("sso_login") or match("fake-domain.com"));};
Иногда это ломает строку журнала или происходит несоответствие, когда в одном и том же файле syslog-ng.conf присутствуют несколько фильтров. Поэтому я пытаюсь использовать оба фильтра в одной строке. Что-то вроде
{(netmask(192.168.0.1/32) or netmask(192.16.0.5/32)) and (not(match("sso_login") or match("fake-domain.com")));};
Пожалуйста, помогите с правильным синтаксисом для этого
Ответ или решение
Конечно, интеграция и объединение фильтров в syslog-ng может быть непосильной задачей, особенно в случаях, когда важно правильно синтаксически оформить комбинированные фильтры. На основе вашего примера задача заключается в правильной комбинации фильтров по IP-адресам и исключении определённых сообщений, используя слияние логических операторов.
Основной задачей является грамотное структурирование фильтра, который будет одновременно включать IP-адреса и исключать определённые шаблоны. В вашем примере вы уже проделали значительную часть работы, однако стоит акцентировать внимание на правильном использовании скобок и операторов.
Рассмотрим предложенный вами фильтр:
{(netmask(192.168.0.1/32) or netmask(192.16.0.5/32)) and (not(match("sso_login") or match("fake-domain.com")));};
Этот пример является почти корректным, однако необходимо убедиться в отсутствии синтаксических ошибок, из-за которых может нарушиться работа фильтра. Один из ключевых моментов — правильное использование синтаксиса и внимательное следование последовательности выражений.
Обратите внимание на следующие шаги для проверки и исправления возможных ошибок:
-
Проверка формата IP-адресов: Убедитесь, что вы указали правильные IP-адреса и маску подсети. В вашем случае возможно опечатка:
192.16.0.5
может понадобиться проверить, так как типичные подсети начинаются с192.168.$
. -
Операторы и скобки: Используйте логические операторы
or
иand
таким образом, чтобы соблюсти правильный порядок операций. Следите за тем, чтобы каждое выражение было заключено в соответствующие скобки. -
Синтаксическая валидация: После написания фильтра, используйте встроенные инструменты в syslog-ng для проверки синтаксиса, чтобы гарантировать его корректность до внедрения.
Чтобы всё работало корректно, ваше полное выражение может выглядеть так:
filter f_combined_logic {
(netmask("192.168.0.1/32") or netmask("192.168.0.5/32")) and not (match("sso_login") or match("fake-domain.com"));
};
Важно не забывать закрывающий символы для затирания блока фильтра: filter f_combined_logic { ... };
Следуя этим рекомендациям, вы сможете успешно ассимилировать фильтры в ваш конфигурационный файл syslog-ng, избегая столкновений и путаницы при слиянии различных условий. Таким образом, вы настроите систематизированный подход к обработке логов, что позволит вам значительно повысить эффективность работы серверов.