我在Ubuntu Linux上运行一个apt-cacher-ng服务器,它以下列格式写入日志:
1299745593|O|149406|XXX.XXX.XXX.XXX|uburep/pool/main/t/tiff/libtiff4_3.9.2-2ubuntu0.4_amd64.deb 1299745593|O|10154976|XXX.XXX.XXX.XXX|uburep/pool/main/l/linux-firmware/linux-firmware_1.34.4_all.deb 1299748529|O|39368|XXX.XXX.XXX.XXX|uburep/pool/main/n/nagios-nrpe/nagios-nrpe-server_2.12-4ubuntu1_amd64.deb 1300155440|O|680100|XXX.XXX.XXX.XXX|uburep/pool/main/t/tzdata/tzdata_2011c-0ubuntu0.10.04_all.deb
它显示时间戳,方向(input或输出),字节数,IP和文件名。
每当写一行时,我也想把这行发送到另一个程序。 我将把这个程序插入到数据库中,这样我就可以通过操作一个caching服务器了解一些关于我们保存多less带宽的统计信息。
我不想每隔X分钟(通过cron )查找日志文件,因为这在计算上是不经济的。 相反,我宁愿有一个守护进程监视日志,当检测到更改时,每行都会发送到我的数据库插入脚本。
请问swatch做到这一点,还是有更好的select?
根据你想要得到的守护进程,你可能会得到如下的东西:
tail -f $FILE | xargs -n 1 frobwidget.sh
如果日志是通过系统日志发送的,那么你可以添加一个系统日志规则来将它们发送到别处。 你怎么去取决于你使用的系统日志(ksyslogd,syslog-ng,rsyslog等等)。
如果不是的话,swatch看起来像是一个很好的解决scheme。
也许我唯一能想到的另一种方式是不要惹人注意地把事情搞得太糟糕,就是编写你的脚本来在日志文件位置处打开一个命名pipe道,并将日志写出到数据库和备用位置在磁盘上 – 但是这将需要在apt-cacher-ng守护进程启动之前,命名pipe道就位。
你有没有看过使用syslog-nglogin到MySQL ? 在syslog-ng中使用pipe道目的地听起来和你正在做的非常相似。