我正在尝试设置我的 rsyslog,以将 /opt/appname/logs 下的应用程序生成的日志发送到远程 syslog 服务器。我已经将 rsyslog 配置为发送操作系统级别的日志,但想看看它是否也可以发送应用程序的日志。我不确定 IncludeConfig 指令是否有效,因为它会查找另一个 *.conf 文件。
答案1
rsyslog 支持从文件读取。这是通过imfile
模块完成的。您需要以下配置:
module(load="imfile" PollingInterval="10") #needs to be done just once
# needs to be done for each file you want to watch
input(type="imfile" File="/path/to/file1"
Tag="tag1"
StateFile="statefile1"
Severity="error"
Facility="local7")
更多信息请访问rsyslog 文档站点
答案2
您始终可以使用旧的语法:
例如。/etc/rsyslog.d/11-your-file.conf
$ModLoad imfile
$InputFileName /app/your-file.log
$InputFileTag your-tag
$InputFileStateFile your-tag
$InputFileSeverity info
$InputFileFacility local7
$InputRunFileMonitor
$InputFilePersistStateInterval 1000
local7.* @@remote-rsyslog-server:port
答案3
如果你挂接启动脚本,你可以使用可以组合
tail -n 0 -F /opt/appname/logs/file | logger ...
记录器的参数将是优先级,您可以指定远程系统日志服务器,或者只使用本地设置,并让 rsyslog 为您进行转发。
这种设置的缺点是,您必须确保在应用程序启动时跟踪日志,否则您会错过中间的记录。
一个更好的解决方案,但是会带来更多的工作,那就是使用类似 logstash 的东西。
您可以根据应用程序日志配置输入,对于文件,您可以使用sincedb
它从上次停止的地方继续,并且您有一个模块可以输出到系统日志。
根据你的需求,这可能需要太多的工作。