Usando sudo journalctl -u {service}
posso ver o log de serviço específico.
- Como encontrar o arquivo de log associado?
- Qual é a melhor maneira de monitorar um arquivo de log programaticamente? (Quero dizer, um programa que reage com base em algo aparece no arquivo de log)
Sistemas com s6, runit, perp, nosh, daemontools-encore, et al. fazendo o gerenciamento de serviço funcionar dessa maneira. Cada serviço principal tem um conjunto individual associado de arquivos de log que podem ser monitorados individualmente e um mecanismo de log descentralizado.
systemd, no entanto, não funciona dessa maneira. Não existe um "arquivo de log associado" individual para qualquer serviço. Não existe tal arquivo para ser monitorado.
Todas as saídas de log são afuniladas em um único daemon central,
systemd-journald
, e esse daemon as grava como um único fluxo com as saídas de log de todos os serviços combinadas ao único diário central em/{run,var}/log/journal/
.A
-u
opçãojournalctl
é um filtro de pós-processamento que filtra o que é impresso a partir do diário central único, todas as entradas do diário sendo marcadas com (entre outras coisas) o nome do serviço associado. Tudo entra, e então tem que ser filtrado para separá-lo de volta (aproximadamente) como era originalmente.A maneira do systemd é 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
1.) Se sua distribuição Linux usar
journald
em toda a extensão, não haverá arquivo de log tradicional de fácil leitura, como o @JdeBP mencionou. O arquivo de diário usa um formato binário e não é facilmente analisável por ferramentas tradicionais de arquivo de log.2.) Se
journalctl -u {service}
tiver as informações que você precisa, você pode usarjournalctl -f -u {service}
e canalizar a saída para o programa que analisa o log e aciona as reações necessárias. Qualquer coisa além disso provavelmente será específica para sua distribuição Linux de escolha.Por exemplo, o Debian 9 (Stretch) em uma configuração padrão mantém o soquete de entrada syslog
journald
tradicional ./dev/log
Mas sersyslogd
estiver instalado,journald
está configurado para encaminhar mensagens de syslog recebidas para ele.Outras distribuições Linux podem ter o relacionamento entre
journald
um daemon syslog tradicional estruturado de forma diferente.