uma das melhores práticas para registar é centralizar ou agregar os seus registos num único local, especialmente se tiver vários servidores ou níveis de arquitectura. Aplicações modernas muitas vezes têm vários níveis de infra-estrutura que podem incluir uma mistura de servidores on-premise e serviços em nuvem. Tentar encontrar o arquivo certo para resolver um erro seria incrivelmente difícil, e tentar correlacionar problemas entre sistemas seria ainda mais difícil., Não há nada mais frustrante do que descobrir que a informação que você queria não foi capturada em um arquivo de registro, ou que o arquivo de registro que poderia ter mantido a resposta foi perdido após um reinício do servidor.
esta secção explica como usar os Serviços de centralização para recolher e centralizar os seus ficheiros de Registo Linux.
benefícios
benefícios de centralizar Logs
centralizar seus logs torna a pesquisa através de dados de log mais fácil e mais rápida, uma vez que todos os seus logs são acessíveis em um único local., Em vez de adivinhar qual servidor tem o arquivo correto, você pode simplesmente acessar o seu repositório de dados de log para procurar por eventos relevantes. A centralização é uma parte-chave das grandes soluções de gestão, pois permite-lhes analisar, analisar e indexar logs antes de armazená-los em um único local. Isso torna a solução de problemas e a resolução de problemas de produção mais fácil e mais rápida. A centralização também oferece esses benefícios.os toros de
- são suportados em um local separado, protegendo-os contra perdas acidentais ou não intencionais., Isso também os mantém acessíveis no caso de seus servidores irem abaixo ou ficarem sem resposta.
- Você não tem que usar o SSH ou comandos grep ineficientes, que podem usar recursos de computação valiosos para pesquisas complexas.
- Pode reduzir a quantidade de espaço em disco usada pelos ficheiros de Registo.engenheiros podem resolver problemas de produção sem acessar diretamente os sistemas.
embora o gerenciamento de log centralizado seja geralmente a melhor opção, ainda existem alguns riscos, tais como má conectividade líquida levando à perda de dados, ou logs usando uma grande quantidade de largura de banda de rede., Vamos discutir como lidar inteligentemente com essas questões nas seções abaixo.
popular
ferramentas populares para centralizar Logs
a maioria dos sistemas Linux já centralizam logs usando um servidor syslog. Como explicamos na seção Linux Logging Basics, o syslog é um serviço que coleta arquivos de log de serviços e aplicações rodando na máquina. Ele pode escrever esses logs para arquivo, ou encaminhá-los para outro servidor através do protocolo syslog., Existem várias implementações syslog que você pode usar, incluindo:
- Rsyslog– um servidor de peso leve instalado nas distribuições Linux mais comuns.
- syslog-ng-o segundo servidor de syslog mais popular para Linux.logstash-um agente de peso mais pesado que pode fazer processamento e análise mais avançados. Ele pode ler mensagens syslog usando o plugin de entrada syslog e encaminhá-los para qualquer número de destinos de saída.fluentd-outro agente com capacidades avançadas de processamento. Ele também suporta entrada syslog usando o plugin in_syslog.,
Rsyslog é a implementação mais popular do syslog e vem instalado por padrão em muitas distribuições do Linux. Se necessitar de filtragem mais avançada ou de capacidades de processamento personalizadas, a opção Logstash é a próxima mais popular. Logstash também é fortemente integrado com a pilha elástica, que fornece uma solução completa de gerenciamento de log. Para este guia, vamos nos concentrar em usar o rsyslog já que é tão amplamente utilizado.
configuração
configurar o Rsyslog.conf
o ficheiro de configuração principal do rsyslog está localizado em /etc/rsyslog.conf
., Você pode armazenar arquivos de configuração adicionais no /etc / rsyslog.d / directory. Por exemplo, no Ubuntu, este diretório contém /etc/rsyslog.d/50-default.conf
, que instrui o rsyslog a escrever os logs do sistema para o arquivo. Você pode ler mais sobre os arquivos de configuração na documentação do rsyslog.
configurar o rsyslog envolve configurar fontes de entrada (onde o rsyslog recebe logs), bem como regras de destino para onde e como os logs são escritos. O Rsyslog já oferece valores por omissão para receber os Eventos do syslog, por isso normalmente só precisa de adicionar o seu servidor de centralização como resultado., O Rsyslog usa o RainerScript para a sua sintaxe de configuração. Neste exemplo, estamos encaminhando nossos logs para o servidor em central.example.com
sobre a porta tcp 514.
action(type="omfwd" protocol="tcp" target="central.example.com" port="514")
alternativamente, poderíamos enviar nossos registros para uma solução de gerenciamento de logs. Provedores de gerenciamento de log baseados em nuvem, como o SolarWinds® Loggly®, irão fornecer-lhe um hostname e porto para o qual você pode enviar seus logs simplesmente alterando os campos target
e port
. Verifique com a documentação do seu fornecedor ao configurar o rsyslog..,
direct
registo de ficheiros e directórios
Rsyslog fornece o módulo de imfile, que lhe permite monitorizar os ficheiros de registo para novos eventos. Isto permite-lhe indicar um ficheiro ou directório como fonte de Registo. O Rsyslog pode monitorar arquivos individuais, bem como diretórios inteiros.
Por exemplo, queremos monitorar os arquivos de log criados pelo servidor Apache. Nós podemos fazer isso criando um novo arquivo em /etc/rsyslog.d/
chamado apache.conf
, carregar o módulo de imfile, e adicionar arquivos de log do Apache como entradas.,
O parâmetro do arquivo suporta caracteres especiais para monitorar vários arquivos, bem como diretórios.que protocolo: UDP, TCP ou RELP?
Existem três protocolos principais que você pode escolher ao transmitir dados de log: UDP, TCP, e RELP.
UDP envia mensagens sem garantir a entrega ou o aviso de recepção (ACK). Ele faz uma única tentativa de enviar um pacote, e se a entrega falhar, ele não tenta novamente. É muito mais rápido e usa menos recursos do que outros protocolos, mas só deve ser usado em redes confiáveis como localhost., O UDP também não suporta criptografar logs.
TCP é o protocolo mais usado para streaming através da Internet, uma vez que requer um ACK antes de enviar o próximo pacote. Se a entrega falhar, ele vai continuar a refazer até que ele entregue com sucesso a mensagem. No entanto, o TCP requer um aperto de mão e conexão ativa entre o remetente e o receptor, que usa recursos de rede adicionais.
RELP (Reliable Event Logging Protocol) é projetado especificamente para o rsyslog e é indiscutivelmente o mais confiável destes três protocolos., Ele reconhece a recepção de dados na camada de aplicação e vai reenviar se houver um erro. Uma vez que é menos comum, você terá que se certificar de que seu destino também suporta este protocolo.
Se o rsyslog encontrar um problema ao armazenar logs, como uma conexão de rede indisponível, ele irá colocar os logs em fila até que a conexão seja restaurada. Os registros em fila de espera são armazenados na memória por padrão. No entanto, a memória é limitada e se o problema persistir, os logs podem exceder a capacidade de memória, o que pode levar à perda de dados. Para evitar isso, considere usar filas de disco.,Aviso: pode perder dados se Guardar registos apenas na memória.
que
envie fiavelmente com filas assistidas ao disco
Rsyslog pode colocar os seus registos no disco quando a memória estiver cheia. Filas assistidas por disco tornam o transporte de logs mais confiável. Aqui está um exemplo de como configurar uma regra de encaminhamento de log no rsyslog com uma fila assistida por disco.
encriptar
cifrar registos usando TLS
quando a segurança dos dados e a privacidade são uma preocupação, deverá considerar cifrar os seus registos. Sniffers e intermediários poderiam ler seus dados de log se você transmiti-los através da internet em texto claro., Deve encriptar os seus registos se contiverem informações privadas, dados de identificação sensíveis ou dados regulamentados pelo governo. O servidor de rsyslog pode encriptar seus logs usando o protocolo TLS e manter seus dados mais seguros.
o processo de activar a encriptação TLS depende da sua configuração de Registo. Geralmente, envolve os seguintes passos.
- crie uma Autoridade de Certificação (CA). Existem certificados de exemplo no diretório
do rsyslog, que são bons apenas para testes, mas você precisa criar o seu próprio para produção., Se você estiver usando um serviço de gerenciamento de log, ele terá um pronto para você.
- gerar um certificado digital para o seu servidor para activar o TLS, ou usar um do seu fornecedor de serviços de gestão de logs.
- Configure o seu serviço de rsyslog para enviar dados cifrados em TLS para o seu serviço de gestão de logs.
Aqui está um exemplo de configuração do rsyslog com encriptação TLS. Substitua o CERT e o DOMAIN_NAME pela sua própria configuração do servidor.,
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/keys/ca.d/CERT.crt$ActionSendStreamDriver gtls$ActionSendStreamDriverMode 1$ActionSendStreamDriverAuthMode x509/name$ActionSendStreamDriverPermittedPeer *.DOMAIN_NAME.com
Registo de gerenciamento de serviços, tais como SolarWinds Loggly, muitas vezes, fornecem suas próprias CAs e certificados, que você simplesmente precisa de referência no seu rsyslog de configuração. Por exemplo, ao activar o TLS com Loggly só é necessário transferir o certificado Loggly para o seu /etc/rsyslog.d / directory, actualize a sua configuração e reinicie o serviço rsyslog.primeiro, Descarregue o certificado.
$ mkdir -pv /etc/rsyslog.d/keys/ca.d$ cd /etc/rsyslog.d/keys/ca.d$ curl -O https://logdog.loggly.com/media/logs-01.loggly.com_sha12.crt
então, abra o /etc/rsyslog.d/22-loggly.conf
ficheiro de configuração e adicione o seguinte:
finalmente, reinicie o rsyslog.,
$ sudo service rsyslog restart
practice
Best Practices for Application Logging
In addition to the logs that Linux creates by default, it’s also a good ID to centralize logs from important applications. Quase todas as aplicações de servidores baseados em Linux escrevem as suas informações de estado em ficheiros de Registo separados e dedicados. Isto inclui produtos de banco de dados como PostgreSQL ou MySQL, servidores web como Nginx ou Apache, firewalls, print and file sharing services, directory and DNS servers, e assim por diante.
a primeira coisa que os administradores fazem depois de instalar uma aplicação é configurá-la., As aplicações Linux tipicamente têm um .ficheiro conf algures dentro da pasta /etc. Pode ser em outro lugar também, mas esse é o primeiro lugar onde as pessoas procuram arquivos de configuração. Dependendo de quão complexa ou grande a aplicação é, o número de parâmetros settable pode ser poucos ou em centenas. Consulte a documentação do aplicativo para saber mais, ou use o comando locate para tentar encontrar o arquivo você mesmo.
# locate postgresql.conf/usr/pgsql-9.4/share/postgresql.conf.sample/var/lib/pgsql/9.4/data/postgresql.conf
define uma localização padrão para ficheiros de Registo
sistemas Linux normalmente guardam os seus ficheiros de registo em /var/log
directory., Isto funciona bem, mas verifique se a aplicação grava numa pasta específica em /var/log
. Se funcionar, óptimo. Caso contrário, poderá querer criar uma pasta dedicada para a aplicação em /var/log
. Por quê? Isso porque outras aplicações guardam os seus ficheiros de registo em /var/log
também e se a sua aplicação gravar mais do que um ficheiro de Registo—talvez uma vez por dia ou após cada reinício de serviço—pode ser um pouco difícil rastejar através de um directório grande para encontrar o ficheiro que deseja.,
Se tiver mais de uma instância da aplicação a correr na sua rede, esta abordagem também é útil. Pense em uma situação em que você pode ter uma dúzia de servidores web funcionando em sua rede. Se os seus registos são armazenados num servidor central de syslog, como é que sabe qual o ficheiro de registo que contém os registos do servidor? Ao registrar cada servidor em um diretório separado, você sabe exatamente onde procurar quando resolver problemas em qualquer servidor.
Use um nome de ficheiro estático
muitas aplicações adicionam dados dinâmicos ao seu nome de ficheiro de registo, como a data actual ou a data-limite., Isto é útil para dividir automaticamente os logs por Data, mas torna mais difícil para serviços como o rsyslog encontrar o arquivo mais recente. Uma melhor abordagem é usar um nome não-alterando para o seu arquivo de log, em seguida, usar logrotate para aplicar um timestamp ou número para arquivos de log mais antigos.
adiciona e Roda os ficheiros de Registo
As aplicações devem adicionar aos ficheiros de Registo existentes em vez de os substituir. Isto ajuda a garantir que todas as linhas de log são capturadas e não se perdem dados, mesmo que a aplicação recomece. No entanto, os arquivos de log podem crescer para ser muito grande ao longo do tempo., Se você está tentando encontrar a causa raiz de um problema, você pode acabar procurando através de dezenas de milhares de linhas.
recomendamos adicionar os seus registos a um único ficheiro, mas também recomendamos a configuração da aplicação para rodar os seus ficheiros de registo de vez em quando. Ferramentas como o logrotate podem fazer isso automaticamente, copiando o arquivo de registro atual para um novo local, dando-lhe um nome único, em seguida, truncando o arquivo de registro atual., Isto tem uma série de benefícios, incluindo:
- Logs são divididos em arquivos por data e hora, tornando mais fácil para encontrar os logs para uma data específica
- Cada arquivo de log é muito menor, tornando-os mais fáceis de pesquisar e mais fácil de enviar através de uma rede
- backup de arquivos de log é muito mais fácil, e excluir ou arquivar os logs mais antigos pode ser feito mais rapidamente
quantas vezes você rodar arquivos de log depende de quantos logs que você gerar. Como regra geral, comece por rodar os seus registos uma vez por dia.
definir as Políticas de retenção de Ficheiros de Registo
durante quanto tempo mantém um ficheiro de Registo?, Trata-se, sem dúvida, de uma questão de negócios. Você pode ser solicitado a manter uma semana de informações de registro, ou pode ser um requisito regulamentar para manter 10 anos de dados. O que quer que seja, os logs precisam ir do servidor de uma vez ou de outra.
em nossa opinião, a menos que seja necessário, você deve manter pelo menos um mês de arquivos de log on-line, mais copiá-los para um local secundário (como um servidor de registro). Qualquer coisa mais antiga pode ser descarregada para uma mídia separada. Por exemplo, se você estiver na AWS, seus registros mais antigos podem ser copiados para a geleira.,
guardar os ficheiros de registo numa unidade separada
os ficheiros de registo são escritos constantemente, o que pode levar a um disco elevado i/O em sistemas ocupados. Como melhor prática, você deve montar /var/log
em um dispositivo de armazenamento separado. Isso evita que as escritas de arquivo de log interfiram com o desempenho de suas aplicações, especialmente no armazenamento baseado em disco. Isso também impede que os arquivos de log de preencher toda a unidade, no caso de se tornar muito grande.
Formata as suas entradas de Registo
Que informação deve capturar em cada entrada de Registo?
isso depende do que você quer usar o log para., Você quer usá-lo apenas para solucionar problemas, ou você quer capturar tudo o que está acontecendo? É um requisito legal capturar o que cada usuário está executando ou visualizando?
Se estiver a usar registos para solucionar problemas, grave apenas erros, avisos ou mensagens fatais. Não há razão para capturar mensagens de depuração, por exemplo. O aplicativo pode registrar mensagens de depuração por padrão, ou outro administrador pode ter ligado isso para outro exercício de resolução de problemas, mas você precisa desligar isso, porque ele definitivamente pode preencher o espaço rapidamente., No mínimo, capture a data, a hora, o nome da aplicação do cliente, o IP de origem ou o nome da máquina do cliente, a ação realizada e a própria mensagem.
por exemplo, considere o comportamento padrão de registro do PostgreSQL. Os Logs são armazenados em /var/log/postgresql
, e cada arquivo começa com postgresql – seguido pela data. Arquivos são rodados diariamente, e arquivos mais antigos são adicionados com um número baseado em quando eles foram rodados. Cada linha de log pode ser prefixada com campos como o timestamp atual, usuário atual, nome de banco de dados, ID de sessão e ID de transação., Você pode alterar estas configurações editando o arquivo de configuração do PostgreSQL (/etc/postgresql/11/main/postgresql.conf
no Debian).
Por omissão, cada linha de Registo mostra o timestamp e o ID do processo PostgreSQL seguido da mensagem de Registo.
monitorar arquivos de Log com Imfile
tradicionalmente, a maneira mais comum para as aplicações registrarem seus dados é com arquivos. Os arquivos são fáceis de procurar em uma única máquina, mas não escalar bem com mais servidores. Com o rsyslog, você pode monitorar arquivos para mudanças e importar novos eventos para o syslog, onde você pode então encaminhar os registros para um servidor centralizado., Isto é feito usando o módulo imfile. Para activar o módulo, crie um novo ficheiro de configuração em /etc/rsyslog.d/
, adicionando depois uma entrada de ficheiro como esta.
adicione os seus fluxos de saída após esta configuração, e o rsyslog irá enviar os registos do ficheiro indicado para o destino de saída.
Log directamente para o ‘Socket’ Syslog com o ‘Imuxsock’
um ‘socket’ é semelhante a um ‘handle’ de ficheiros UNIX, excepto que lê os dados na memória em vez de Os escrever no disco. No caso do syslog, isto permite-lhe enviar os registos directamente para o syslog sem ter de Os escrever num ficheiro primeiro.,
esta abordagem faz uso eficiente dos recursos do sistema se o seu servidor for restringido pelo disco I/O ou você não tiver necessidade de registros de arquivos locais. A desvantagem desta abordagem é que o socket tem um tamanho de fila limitado. Se o seu servidor syslog cair ou não conseguir acompanhar, então você pode perder os dados de log.
para activar o registo do ‘socket’ no rsyslog, adicione a seguinte linha à sua configuração do ‘rsyslog’ (está activa por omissão).
$ModLoad imuxsock
Isto cria um socket em: /dev/log socket
por padrão, mas você pode alterar isso modificando o SysSock.Nome do parâmetro., Você também pode definir opções como limitação de taxa e controle de fluxo. Para mais informações, consulte a documentação do rsyslog imuxsock.
registos UDP com Imupd
alguns dados de saída de aplicações no formato UDP, que é o protocolo padrão ao transferir ficheiros de Registo sobre uma rede ou o seu localhost. O seu servidor syslog recebe estes registos e pode processá-los ou transmiti-los num formato diferente. Alternativamente, você pode enviar os logs para outro servidor syslog ou para uma solução de gerenciamento de logs.,
Use o seguinte comando para configurar o rsyslog para aceitar os dados do syslog sobre o UDP na porta-padrão 514.
$ModLoad imudp$UDPServerRun 514
gerir a configuração em muitos servidores
quando tiver apenas alguns servidores, poderá configurar manualmente o registo neles. Uma vez que você tem algumas dezenas ou Mais Servidores, você pode aproveitar as ferramentas que tornam isso mais fácil e escalável. A um nível básico, o objetivo de cada ferramenta é habilitar o syslog em cada um dos seus servidores, aplicar uma configuração e garantir que as mudanças façam efeito.,
Pssh
Pssh (ou SSH paralelo) permite-lhe executar um comando ssh em vários servidores em paralelo. Use uma implantação pssh para apenas um pequeno número de servidores. Se um de seus servidores falhar, então você tem que ssh no servidor falido e fazer a implantação manualmente. Se você tiver vários servidores falhados, então a implementação manual neles pode demorar muito tempo.
Puppet/Chef
Puppet and Chef são ferramentas de gestão de configuração que podem configurar automaticamente todos os seus servidores e trazê-los para o mesmo estado. Eles podem monitorar seus servidores e mantê-los sincronizados., Puppet e Chef são ferramentas poderosas capazes de instalar software, criar arquivos, Serviços de reinicialização, e muito mais. Se você não tiver certeza qual é mais adequado para o seu gerenciamento de configuração de implantação, você pode apreciar a comparação da InfoWorld das duas ferramentas.
alguns fornecedores também oferecem módulos ou receitas para configurar o syslog. Por exemplo, Loggly fornece um módulo fantoche que usa o rsyslog para encaminhar automaticamente logs de seus agentes. Instale o módulo Loggly Puppet no seu Puppet master e adicione a seguinte configuração ao seu manifesto de fantoches.,
# Send syslog events to Loggly class { 'loggly::rsyslog': customer_token => 'YOUR_CUSTOMER_TOKEN', }
Uma vez que os seus agentes actualizem, eles irão iniciar a sessão de loggly.
Kubernetes
Kubernetes é uma ferramenta de orquestração para a gestão de recipientes em múltiplos nós. O Kubernetes oferece uma arquitectura completa de registo que recolhe e grava automaticamente registos de contentores num ficheiro da máquina. Você pode ver os registos de um Pod específico executando o comando kubectl logs <nome do pod>, o que é útil para aceder aos registos de aplicações num servidor remoto.,
muitas soluções de gerenciamento de log fornecem agentes que podem ser implantados sobre Kubernetes para coletar logs de aplicação e logs de host. Por exemplo, Loggly fornece um DaemonSet que implementa um pod de registro para cada nó em um conjunto. O Pod coleta logs de outras vagens e do próprio host, e implantá-lo como um DaemonSet ajuda a garantir que há sempre uma instância em execução em cada nó. Registar um conjunto de Kubernetes com Loggly é tão fácil como executar os seguintes comandos.
Docker
Docker usa recipientes para executar aplicações independentes do servidor subjacente., É muitas vezes usado como o tempo de execução de contêineres para orquestradores como Kubernetes, mas pode ser usado como uma plataforma autônoma. ZDNet tem um artigo em profundidade sobre o uso do Docker em seu centro de dados.,
Existem várias maneiras para log da janela de Encaixe containers, incluindo:
- o Log através do Encaixe de Registo do Controlador para o sistema anfitrião (o método recomendado)
- Encaminhamento de todas as recipiente de logs para um único registro dedicada recipiente (esta é a forma como o logspout recipiente de obras)
- registro em Log para um sidecar log recipiente
- a Adição de um agente de registo para o recipiente
Você também pode usar a janela de Encaixe recipientes para recolher registos do anfitrião., Se o seu contentor tiver um serviço de syslog em execução, poderá enviar registos da máquina para o contentor através do syslog, ou montar os ficheiros de registo da máquina dentro do contentor e usar um agente de monitorização de ficheiros para ler os ficheiros.
scripts ou agentes do Fornecedor
a maioria das soluções de gerenciamento de log oferecem scripts ou agentes para tornar o envio de dados de um ou mais servidores relativamente fácil. Os agentes pesados podem usar recursos extra do sistema. Alguns fornecedores se integram com os daemons rsyslog existentes para encaminhar logs sem usar significativamente mais recursos., Loggly, por exemplo, fornece um script que encaminha logs do rsyslog para os servidores de ingestão Loggly usando o módulo omfwd.
Deixe uma resposta