Назад | Перейти на главную страницу

Полные доменные имена во время миграции с syslogd на syslog-ng

Я перехожу с syslogd на syslog-ng на сервере SLES 9 (syslog-ng в стандартной версии 1.6.8). Сервер является хостом для некоторых удаленных регистраторов.

Как мне настроить syslog-ng, чтобы максимум совместимость с поведением syslogd, когда дело касается имени хоста, печатаемого в журналах? Есть несколько пользовательских сценариев для анализа журналов, и они, вероятно, зависят от имен хостов, чтобы оставаться неизменными. Некоторые из них были объявлены syslogd как полные доменные имена, и если они будут удалены сейчас, конфликт имен наверняка произойдет.

Кстати, я не использовал параметры syslogd -s или -l для удаления полных доменных имен.

Снимок моего текущего исследования опций syslog-ng (обновление: это неверно, см. мой ответ):

options {
        check_hostname(yes);    # invalid chars?
        keep_hostname(yes);     # yes - if there is a hostname embedded in the message, it will
                                #   be kept without overwrite/append
                                #   see https://lists.balabit.hu/pipermail/syslog-ng/2002-August/003669.html
                                #   note: RFC3164 allows either short hostname or IP, no FQDN

        use_dns(yes);           # if there is no hostname embedded in the message, try DNS

        use_fqdn(no);           # do not try to expand everything to FQDN? strip all FQDNs? strip only DNS-resolved FQDNs?
                                # old syslogd behaviour (?): use embedded hostname, print fqdn (strip only local
                                #   domain + strip "-s" domains + strip domains for "-l" hosts)

        chain_hostnames(no);    # if keep_hostname(no) or hostname not embedded, attach (rather than assign)
                                #   hostname/IP of *sender*; same as long_hostnames(off)

        sync(0);                # sync immediately
};

Я обнаружил, что руководства по syslog-ng несколько неадекватны.

Самостоятельный ответ. Кажется, невозможно имитировать поведение syslogd. После множества экспериментов я предоставляю обновленный снимок моих исследований / предположений по параметрам syslog-ng:

options {
        #####################################################################
        ### the flow of decisions for hostnames, syslog-ng 1.6.8:

        use_dns(yes);           # yes = first resolve the IP in $HOST_FROM (the message sender)

        keep_hostname(no);      # no = ignore $HOST embedded in the message (rare); overwrite $HOST with $HOST_FROM
                                #   note: RFC3164 allows embedding short hostname or IP, not FQDN

        use_fqdn(yes);          # yes = expand everything to FQDN, including local name
                                # Note syslogd behaviour is incompatible: use FQDN, but strip local
                                #   domain + strip "-s" domains + strip domains for "-l" hosts

        chain_hostnames(no);    # no = keep $FULLHOST same as $HOST; 
                                #   do not expand $FULLHOST into either "src@$HOST" for localhost, 
                                #   or to "$HOST/$HOST_FROM" for remote client

        #long_hostnames(no);    # synonym of chain_hostnames

        ### with default template, the resulting $FULLHOST is written to log
        #####################################################################

        check_hostname(yes);    # invalid chars?

        sync(0);                # sync immediately
};

Я обнаружил, что сообщения от моих удаленных систем, вероятно, не имеют встроенного имени хоста, и это приводит к бесполезности keep_hostname.

Чтобы уменьшить влияние разрешения имен на производительность, вы также можете попробовать следующие приемы: http://www.balabit.com/dl/html/syslog-ng-v3.0-guide-admin-en.html/ch07s04.html

«Я обнаружил, что руководства по syslog-ng несколько неадекватны». > Комментарии и отзывы о руководствах и документах syslog-ng приветствуются по адресу documentation@balabit.com или в списке рассылки syslog-ng (https://lists.balabit.hu/mailman/listinfo/syslog-ng).

Пожалуйста, дайте мне знать, подходит ли вам вариант use_dns (yes), и я постараюсь сделать эту часть документации более понятной в следующем выпуске.

Возможно, у вас есть все, что вам нужно, за исключением use_dns(yes);. Включение этого параметра приведет к тому, что syslog-ng будет выполнять поиск в DNS по IP-адресу, с которого поступает журнал. Это большой снижение производительности (поиск DNS по мере поступления журналов, который syslog-ng должен блокироваться, потому что он не может записывать журналы, пока поиск DNS не вернется), и это также означает, что если журнал не включает запись, syslog-ng попытается заполнить его именем хоста DNS, в то время как традиционный системный журнал заполнит его IP-адресом источника журнала.

Честно говоря, единственные строчки, которые вам абсолютно необходимы, это keep_hostname(yes); и (просто чтобы не допустить недопустимые символы), check_hostname(yes);. Остальные ничего не повредят, но и не требуются строго (за одним исключением use_dns(yes);, как упоминалось выше, чего вы не хотите).