aprendendo sobre registro geral / logrotation no linux?

13

Suponha que, além dos logs do servidor web Apache, nunca tive contato com nenhum tipo de registro (profissional) em nenhum sistema operacional. Portanto, o registro, embora eu compreenda algumas noções básicas, é um tópico bastante novo. No momento, o investimento para aprender completamente sobre esse tópico parece ser bastante grande, mas ainda nem sei se vale a pena conhecer mais do que os conceitos mais abstratos.

Quais recursos você sugeriria que alguém nessa situação consumisse (tutoriais, páginas de manual, livros) para aprender sobre o Log?

Quais logs um usuário normal do Linux deve ler diariamente / mensalmente? A suposição é mesmo correta de que eles foram escritos para facilitar a leitura humana ou são geralmente avaliados e usados ​​por outras ferramentas?

O que o usuário normal * nix e o desenvolvedor de software devem saber sobre esses logs?

O que você precisa saber sobre a rotação de logs, se não é esperado que você gerencie servidores Web profissionais com grande quantidade de eventos?

erikbwork
fonte
Você se importa se eu (ou você) editar o título para ler "no linux" em vez de "no ubuntu", pois essas são essencialmente a mesma pergunta (veja minha resposta)? Dessa forma, são menos propensos a acabar com duplicados fechados perguntas sobre "aprender logging em arco", "aprender o registo no CentOS", etc.
Goldilocks
Eu não me importo esse tipo de mudanças, desde que as respostas são bons :)
erikbwork

Respostas:

18

[Isso foi escrito alguns anos antes da ampla adoção do journald em sistemas systemd e não o tocou. Actualmente (final de 2018) ambos journald e (r) syslog, descritos abaixo, são usados em distribuições como Debian. Em outros, pode ser necessário instalar o rsyslog se você quiser usá-lo ao lado, mas a integração com o journald é direta.]

Não discutirei muito sobre o registro do ubuntu especificamente, já que o tópico é padronizado para linux em geral (e acredito que a maioria ou tudo o que tenho a dizer também é verdade em geral para qualquer sabor * nix, mas não tome minha palavra para isso). Também não falarei muito sobre "como ler logs" além de responder a esta pergunta:

A suposição é mesmo correta de que eles foram escritos para facilitar a leitura humana ou são geralmente avaliados e usados ​​por outras ferramentas?

Eu acho que depende da aplicação, mas em geral, pelo menos no que diz respeito ao syslog (veja abaixo), eles devem ser legíveis por humanos. "Significativo para mim" é outra questão, lol. No entanto, eles também podem ser estruturados de maneira a facilitar a análise com ferramentas padrão (grep, awk, etc.) para fins específicos.

Qualquer um que, em primeiro lugar, exista uma distinção entre aplicativos que fazem seu próprio log e aplicativos que usam o log do sistema. O Apache por padrão é o primeiro, embora possa ser configurado para o posterior (o que eu acho que a maioria das pessoas consideraria indesejável). Os aplicativos que fazem seu próprio log podem fazê-lo de qualquer maneira, usando qualquer local para o (s) arquivo (s), portanto não há muito a dizer sobre isso. O criador de logs do sistema geralmente é chamado de syslog.

syslog

"Syslog" é realmente um padrão implementado com um processo daemon chamado genericamente syslogd (d é para daemon!). O daemon syslog predominante atualmente em uso no linux, incluindo o ubuntu, é rsyslogd. O Rsyslogd pode fazer muito, mas, como configurado imediatamente na maioria das distribuições, emula um syslog tradicional, que classifica as coisas em arquivos de texto sem formatação /var/log. Você pode encontrar documentação para isso em /usr/share/doc/rsyslog-doc-[version](cuidado, há também um /usr/share/doc/rsyslog-[version], mas isso são apenas avisos do pacote de origem, como NEWSe ChangeLog). Se estiver lá, é html, mas o Stack Exchange não permite incorporar links de arquivos locais:

file://usr/share/doc/rsyslog-doc/index.html

Então você pode tentar copiar colando isso. Se não estiver lá, pode fazer parte de um pacote separado que não está instalado. Consulte seu sistema de embalagem (por exemplo, apt-cache search rsyslog | grep doc).

A configuração está em /etc/rsyslog.conf, que possui uma página de manual man rsyslog.conf, embora, enquanto a página de manual faça uma boa referência, ela possa ser menos penetrável como introdução. Felizmente, os fundamentos do estoque rsyslog.conf estão em conformidade com os do syslog.conf tradicional, para os quais existem muitas introduções e tutoriais. Este aqui , por exemplo; o que você deseja tirar disso, enquanto observa o rsyslog.conf local, é um entendimento das instalações e prioridades (a "prioridade" às ​​vezes é chamada de loglevel), uma vez que estes fazem parte do padrão syslog acima mencionado. A razão pela qual esse padrão é importante é porque o rsyslog realmente obtém suas coisas através do kernel, e o que o kernel implementa é o padrão.

Com relação às $diretivas no rsyslog.conf, elas são específicas do rsyslog e, se você instalar esse pacote opcional de documentos, encontrará um guia para elas rsyslog_conf_global.html.

Divirta-se ... se você estiver curioso sobre como os aplicativos usam o logger do sistema, veja man loggere man 3 syslog.

Rotação de Log

O meio normativo de girar toras é através de uma ferramenta chamada logrotate(e existe uma man logrotate). O método normativo de usar o logrotate é por meio do daemon cron , embora não precise ser feito dessa maneira (por exemplo, se você tende a desligar a área de trabalho todos os dias, pode fazê-lo apenas uma vez na inicialização antes do início do syslog , mas, obviamente, depois que o sistema de arquivos for montado rw).

Há uma boa introdução para fazer o logrotate aqui . Observe que logrotate não é apenas para coisas de syslog , pode ser usado com qualquer arquivo. O arquivo de configuração base é /etc/logrotate.conf, mas como a configuração possui uma diretiva "include", geralmente a maioria das coisas entra em arquivos individuais no /etc/logrotate.ddiretório (aqui d é para diretório, não para daemon; logrotate não é um daemon).

Uma coisa importante a considerar ao usar o logrotate é como um aplicativo reagirá quando seu arquivo de log for "girado" - em outras palavras, movido - enquanto o aplicativo estiver em execução. WRT (r) syslogd, ele irá parar de gravar nesse log (acho que há uma justificativa de segurança para isso). A maneira usual de lidar com isso é dizer ao syslog para reiniciar (e reabrir todos os seus arquivos), e é por isso que você verá uma postrotatediretiva no logrotate de arquivos conf enviando SIGHUP para o daemon syslog.

Cachinhos Dourados
fonte
2
Se você mencionar syslog-ng, também, você terá escrito tudo o que há para dizer sobre o log do linux. Excelente resposta.
Nils
Eu aprendi muito e tenho mais fontes para ler. Obrigado! Btw. Por que seria ruim usar o log do sistema para o apache? E quais logs devo ler?
precisa saber é o seguinte
@ erikb85 1) Principalmente porque o apache gera muita saída. Não tenho que configurar o apache há muito tempo, por isso não me lembro de quão flexível é o WRT para enviar coisas específicas para o syslog (mas acho que muito flexível) 2) logs do WRT que você deseja ler, dê uma olhada na lógica do seu /etc/rsyslog.conf. Por exemplo: frequentemente itens acima de uma determinada prioridade serão inseridos /var/log/messagese itens abaixo que serão inseridos /var/log/notice. Eu também gosto de ter um log que contém tudo, o que resulta em sobreposição dupla e tripla, mas se você mantê-los girados, não é grande coisa.
Goldilocks
Só para confirmar, rsyslognão existe um wrapper daemon logrotate, certo? Por quê então ?
Thomas Thomas
@ Thomas Eles executam finalidades diferentes, embora o (r) syslog possa implementar a rotação para poupar a necessidade de rotação do log. No entanto, separá-los significa que você pode usar o logrotate em outras coisas que não os arquivos syslog.
Goldilocks