日志文件从哪里更新

日志文件从哪里更新

如何在 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

相关内容