Onde encontrar o arquivo de log de um serviço específico

1

Usando sudo journalctl -u {service} , posso ver o log de um serviço específico.

  1. Como encontrar o arquivo de registro associado?
  2. Qual é a melhor maneira de monitorar um arquivo de log programaticamente? (Eu quero dizer um programa que reage com base em algo aparece no arquivo de log)
por pouya 12.09.2018 / 09:42

2 respostas

1

Sistemas com s6, runit, perp, nos, daemontools-encore, et al. fazendo o gerenciamento de serviços funcionar dessa maneira. Cada serviço principal tem um conjunto associado individual de arquivos de log que podem ser monitorados individualmente e um mecanismo de registro descentralizado.

systemd entretanto não funciona dessa maneira. Não há "arquivo de log associado" individual para nenhum serviço. Não existe tal arquivo a ser monitorado.

Toda saída de log é canalizada para um único servidor central, systemd-journald , e o servidor escreve como um único fluxo com todas as saídas de log dos serviços combinadas ao único periódico central em /{run,var}/log/journal/ .

A opção -u para journalctl é um filtro de pós-processamento que filtra o que é impresso a partir do único periódico central, todas as entradas no diário sendo marcadas com (entre outras coisas) o nome do serviço associado. Tudo é ventilado, e então ele precisa ser filtrado para separá-lo (aproximadamente) como era originalmente.

A maneira sistêmica é usar journalctl -f com filtros apropriados adicionados ou escrever seu próprio programa diretamente usando a API específica do systemd para seu diário.

Leitura adicional

por 12.09.2018 / 10:49
1

1.) Se sua distribuição Linux usa journald em toda a extensão, não haverá um arquivo de log tradicional facilmente legível, como @JdeBP mencionado. O arquivo de diário usa um formato binário e não é facilmente analisável pelas ferramentas de arquivo de log tradicionais.

2.) Se journalctl -u {service} tiver as informações necessárias, você poderá usar journalctl -f -u {service} e canalizar a saída para o programa que analisa o log e disparar as reações necessárias. Qualquer coisa além disso é provável que seja específica para sua distribuição de Linux.

Por exemplo, o Debian 9 (Stretch) em uma configuração padrão tem journald mantendo o tradicional soquete de entrada /dev/log syslog. Mas se rsyslogd estiver instalado, journald está configurado para encaminhar mensagens syslog recebidas para ele.

Outras distribuições Linux podem ter o relacionamento entre journald e um daemon syslog tradicional estruturado de forma diferente.

    
por 12.09.2018 / 11:33