ログファイルはどこで更新されますか?

ログファイルはどこで更新されますか?

Linuxでは、どのプログラムがログファイルを使用し、エントリを更新し、ログファイルを埋めるかを見つける方法です。

答え1

これに対する簡単な答えはありません。以下を使用できます。

通知する

inotifyファイルが変更されたら通知を受け取ることができます。inotifyユーティリティ自体ではなく、Linuxカーネルが提供するインタフェースですが、パッケージinotifywaitにあるものなどのいくつかのユーティリティもあります。inotify-tools

問題は、inotifyどのプロセスがファイルを変更したかを教えてくれないことです。

例:

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

ラソフ

どのプロセスがファイルを開いているかを確認する非常に強力なユーティリティですlsof。たとえば、これにより、lsof /var/log/syslog現在どのプロセスがファイルを開いているかを確認できます。

問題は、lsof時間の経過とともにファイルを監視できず、ファイルが実行されたときに何が起こっているのかについてのスナップショットのみを提供できることです。あなたの場合、ファイルに何が記録されたのか知りたいのですが、ファイルが永久に開いているかどうかはわかりません(おそらくそうではない可能性が高い)。書き込みプロセスが常にファイルを開いたままにしない限り、あまり役に立ちませんlsof。これは、書き込み中にファイルを実行する場合にのみ正しいプロセスを指すことができるためです。

lsof以前のようにファイルを監視できない理由inotifyは、単にファイルシステムをスキャンして情報を取得しますが、監視者を設定しないため/procです。

例:

# 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ログファイルと同じディレクトリにインストールできます。次に、ファイルがいつ開かれたかについての詳細を提供する必要があります。

唯一の問題loggedfsは、いくつかの単純なコマンドラインユーティリティほど使いにくいということです。

この問題を解決したい場合は、loggedfs以下を参照してください。文書

結論として

結論は様々な可能性があるがsimple方法がないということだ。

答え2

ログファイルは複数のソースから入力を受け取ります。通常、ソース、タイムスタンプ、およびいくつかのメッセージを説明する最初の単語で構成される行構造があります。

厳格な形式はありません。各アプリケーション(Webサーバーなど)には独自のファイルと形式があります(多くの場合、内容を要約または変更するための特定のツールもあります)。

答え3

簡単な方法は次のとおりです。auditd。

例:

/etc/audit/audit.rules

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

以下は/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"

そこには、PIDや実行可能ファイルを含む多くの情報があります。また、見ることができますaureport

関連情報