FQDNs durante a migração do syslogd para o syslog-ng

3

Estou migrando do syslogd para o syslog-ng no servidor SLES 9 (syslog-ng na versão de inventário 1.6.8). O servidor é um loghost para alguns registradores remotos.

Como eu configuro o syslog-ng para assegurar a compatibilidade máxima com o comportamento do syslogd quando se trata do nome do host impresso nos logs? Existem alguns scripts personalizados para analisar os logs e aqueles que provavelmente dependem dos nomes de host para permanecerem os mesmos. Alguns deles foram reportados como FQDNs pelo syslogd, e se eles se tornassem despojados agora, a colisão de nomes certamente ocorreria.

A propósito, eu não usei as opções syslogd -s ou -l para remover os FQDNs.

Instantâneo da minha pesquisa atual sobre as opções do syslog-ng ( atualização: isso está incorreto, veja minha auto-resposta ):

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
};

Eu achei os manuais do syslog-ng um pouco inadequados.

    
por kubanczyk 16.06.2009 / 12:19

3 respostas

1

Auto-resposta. Parece impossível imitar o comportamento do syslogd. Depois de muitos experimentos, forneço um instantâneo atualizado de minhas pesquisas / suposições sobre as opções do 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
};

Descobri que as mensagens dos meus sistemas remotos provavelmente não possuem o nome do host incorporado, e isso faz com que o keep_hostname não tenha nenhum uso.

    
por 17.06.2009 / 14:51
0

As opções que você tem provavelmente são as que você deseja, exceto use_dns(yes); . Ativar isso fará com que o syslog-ng faça uma pesquisa de DNS no endereço IP de onde vem um log. Esse é um hit de desempenho grande (pesquisas de DNS como os logs vêm em que o syslog-ng tem que ser bloqueado porque ele não pode gravar os logs até que a pesquisa do dns seja retornada) e também significa que log não inclui uma entrada, o syslog-ng tentará preenchê-lo com um nome de host DNS, enquanto o syslog tradicional o preencherá com o endereço IP de uma fonte de log.

Honestamente, as únicas linhas que você realmente precisa são keep_hostname(yes); e (apenas para manter caracteres inválidos), check_hostname(yes); . O resto não vai doer nada, mas não é estritamente necessário (com a única exceção sendo o use_dns(yes); , como mencionado acima, que você não quer).

    
por 16.06.2009 / 22:19
0

Para reduzir o efeito de desempenho da resolução de nomes, você também pode tentar estes truques: link

"Eu achei os manuais do syslog-ng um pouco inadequados." > Comentários e comentários sobre os manuais e documentos do syslog-ng são bem-vindos em [email protected], ou na lista de discussão syslog-ng ( link ).

Por favor, deixe-me saber se a opção use_dns (yes) foi OK para o seu caso, e tentarei tornar esta parte dos documentos mais clara na próxima versão.

    
por 17.06.2009 / 09:30