我们有几个应用程序正在生成自己的纯文本日志文件,我想将其转发到远程 syslog 服务器以进行集中日志记录。我无权访问root这些机器,也无法重新配置syslog以将输出重定向到远程机器。
我在网上找到了一些解决方案,但它们大多是人们自制的 bash 脚本,我正在寻找适合在潜在大批量生产环境中实施的更强大的东西。
最好是设计的东西,着眼于占用空间小,后台守护进程不断运行,可以跟上很多行等。 - 目前有哪些解决方案?
vor*_*aq7 13
您已经拒绝了“其他人的 bash 脚本”,但这是一个非常常见的解决方案——该logger命令的一些创造性用法可以跟随文件并将其内容发送到其他地方。
不过,我个人不会在生产环境中这样做。
一个更好的选择需要更少的脚本黑客使用rsyslogd和提到的文本文件输入模块,如yoonix 提到的——这是一个相当不错的解决方案,尽管在文件轮换过程中可能会丢失行,如果你在 Linux 系统上rsyslog作为您的 syslog 守护进程,不需要太多额外的工作。
syslog-ng还支持功能类似于的文件输入源rsyslog。
恕我直言,最好的解决方案 - 尽管需要修改生成这些日志的应用程序 - 是直接登录到系统日志。您不想经历中间步骤、文件等syslog。--是系统日志程序,在 Unix 平台上写入日志的东西应该将它们发送到系统日志。
不幸的是,这个实现留给读者(和应用程序开发人员)作为练习,如果您的开发人员不存在、懒惰或无能,则可能无法实现......
您可以将logstash与文件输入和syslog输出一起使用。
例如,使用要监视的文件(或多个文件)和系统日志服务器信息创建配置。
文件到 syslog.conf:
input { file { path => "/var/log/kern.log" } }
output {
syslog {
facility => "kernel"
host => "syslog.example.com"
port => 514
severity => "informational"
}
}
Run Code Online (Sandbox Code Playgroud)
启动logstash
java -jar logstash-1.2.2-flatjar.jar agent -f file-to-syslog.conf
Run Code Online (Sandbox Code Playgroud)
我将它们组合在一起tail.c,logger.c形成了一个轻量级、快速且稳定的、占用空间小的编译程序(二进制)。只要它具有对日志文件的读取访问权限,那么它就可以在不需要 root 权限的情况下工作。
我还对本机记录器进行了一些改进,并添加了一个新的(可选)功能,可以在将文本字符串发送到日志服务器之前在每个日志行的开头插入文本字符串。结果是一个可以自行运行的程序,而不需要使用 shell 管道(即不需要tail logfile | logger)。它将永远运行,直到被显式终止或写入网络套接字时遇到错误。如果日志文件被轮换甚至消失,它甚至会继续运行(它只会继续查看文件是否重新出现。)
它很容易使用:只需给它一个或多个要监视的日志文件,每次将新行写入文件时,它都会将该行的副本发送到您指定的本地或远程系统日志服务器。如果您使用该选项,请加上额外的文本字符串。
事实上,我早在 12 月就完成了这个程序,但当时正在等待雅虎获得版权并提供它,现在他们已经完成了。(我写它是我在雅虎工作的一部分)。
filelogger程序信息和下载链接:
| 归档时间: |
|
| 查看次数: |
45054 次 |
| 最近记录: |