De onde o arquivo de log foi atualizado

0

Como encontrar, de onde / qual programa usando o arquivo de log e atualizando as entradas / preenchendo o arquivo de log no Linux.

    
por user150439 25.01.2016 / 07:09

3 respostas

1

Não há resposta simples para isso, as coisas que você tem disponíveis são estas:

Inotify

Você pode usar inotify para ser notificado sempre que algo alterar um arquivo. inotify em si não é um utilitário, é uma interface fornecida pelo kernel do Linux, mas existem utilitários como por exemplo inotifywait do pacote inotify-tools .

O problema com inotify é que ele não informa qual processo modificou o arquivo.

Exemplo:

mst@mst-nb1:~$ inotifywait 123
Setting up watches.
Watches established.    # now i write to "123" in another terminal
123 MODIFY 

lsof

Um utilitário realmente excelente para descobrir qual processo mantém um arquivo aberto é lsof . Por exemplo, fazendo lsof /var/log/syslog você pode ver quais processos atualmente mantêm esse arquivo aberto.

O problema com lsof é que ele não pode monitorar esse arquivo ao longo de um período de tempo, ele só pode fornecer um instantâneo da situação no momento em que você o executa. No seu caso, você quer saber o que está sendo escrito nesse arquivo, mas não sabe ao certo se esse arquivo está permanentemente aberto (provavelmente não é). Caso o processo de escrita não mantenha o arquivo aberto o tempo todo, então lsof não o ajudará muito, porque ele só poderia apontar o processo certo se você executá-lo exatamente no momento em que estiver escrevendo.

O motivo pelo qual lsof não pode monitorar o arquivo foi o mesmo que inotify porque obtém suas informações simplesmente varrendo o sistema de arquivos /proc , mas ele não configura nenhum observador.

Exemplo:

# Terminal 1 (I open the file)
mst@mst-nb1:~$ cat > 123

# Terminal 2
mst@mst-nb1:~$ lsof 123
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
cat     24097  mst    1w   REG  252,1        0 16791997 123

loggedfs

Esta pode ser sua melhor chance, mas é preciso um certo esforço para que ela funcione. Você pode usar loggedfs do fusível e montá-lo no diretório onde seu arquivo de log reside. Em seguida, ele deve fornecer informações detalhadas sobre o que está abrindo um arquivo e quando.

O único problema com loggedfs é que ele não é tão fácil de usar quanto algum utilitário simples de linha de comando.

Se você quiser passar pelo incômodo com loggedfs , consulte a documentação

Conclusão

A conclusão é que você tem várias possibilidades, mas não há simple way.

    
por 25.01.2016 / 08:19
0

Os arquivos de log recebem sua entrada de várias fontes. Eles geralmente são estruturados como linhas, com a primeira palavra informando a fonte, os registros de data e hora e algumas mensagens.

Não há um formato rígido, cada aplicativo (por exemplo, servidor da Web) tem seus próprios arquivos, com seus próprios formatos (e, geralmente, ferramentas específicas para resumir ou, de outra forma, distorcer seu conteúdo).

    
por 27.01.2016 / 00:26
0

Aqui está uma maneira simples: auditd.

Exemplo:

/etc/audit/audit.rules

-w /var/tmp/foo -p w -k foo

Aqui está uma entrada em /var/log/audit/audit.log:

type=SYSCALL msg=audit(1454353834.695:29): 
arch=c000003e syscall=2 success=yes exit=3 a0=27cd460 a1=241 a2=1a4
a3=7fff4e278f30 items=2 ppid=10218 pid=10314 auid=0 uid=0 gid=0 euid=0
suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=3 comm="vi"
exe="/usr/bin/vim.basic" key="foo"

Existe uma boa quantidade de informações, incluindo pid e executável. Veja também aureport .

    
por 01.02.2016 / 20:19

Tags