我使用 syslog-ng 配置文件destination
配置来创建每小时日志文件。我为此使用的配置如下:
destination d_hourly {file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR.log");};
我现在需要每 15 分钟或 30 分钟创建一次文件。我查看了配置文件宏,但没有这样的宏(在预期的行上)。有没有办法在 syslog-ng 配置中编写一个自定义函数,该函数返回基于当前时间的值,并且可以在 syslog-ng 的目标方向上添加后缀。
或者有其他方法可以实现这一点?
答案1
您可以在行内用数字除以分钟值,这将生成单独的文件。例如:
destination d_half_hourly {file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR-$(/ $MIN 30).log");};
由于整数除法,这将把 PID 为 1000 且日期为 2015 年 1 月 23 日 05:00 至 05:29 的所有日志放入
/var/log/tracker/pid1000-track-2015-01-23-05-0.log
05:30 至 05:59 期间
/var/log/tracker/pid1000-track-2015-01-23-05-1.log
您还可以通过将 30 更改为另一个除数来增加频率。
答案2
没有这样的内置函数,但是在较新的 syslog-ng 版本中,您可以在过滤器中进行各种数字比较:http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.6-guides/en/syslog-ng-ose-v3.6-guide-admin/html/filters-comparing.html
如果将其与嵌入式日志路径相结合,我认为您可以创建一个满足您需求的配置。例如,类似这样的伪代码(仅用于展示想法,语法上并不正确):
log { source_mysource
log { filter(is-$MIN-less-than-15) destination(file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR-0-15.log")) }
log { filter(is-$MIN-between-16-and-30) destination(file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR-16-30.log")) }
...
}
高血压,
问候,
罗伯特·费凯特