Я использую файл конфигурации syslog-ng destination
конфигурация для создания ежечасных файлов журнала. Конфигурация, которую я использую для этого, выглядит следующим образом:
destination d_hourly {file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR.log");};
Теперь у меня есть требование создавать файлы каждые 15 или 30 минут. Я просмотрел макросы файла конфигурации, но такого макроса нет (который есть в ожидаемых строках). Есть ли способ написать пользовательскую функцию в конфигурации syslog-ng, которая возвращает значение, основанное на текущем времени, и которое может быть дополнено суффиксом в направлении назначения для syslog-ng.
Или есть другой способ добиться этого?
Вы можете разделить значение минут на число, встроенное в строку, что приведет к созданию отдельных файлов. Например:
destination d_half_hourly {file("/var/log/tracker/pid$PID-track-$YEAR-$MONTH-$DAY-$HOUR-$(/ $MIN 30).log");};
Из-за целочисленного деления все журналы с PID 1000 и датой 23.01.2015 с 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 на другой делитель.
такой встроенной функции нет, но в более новых версиях 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")) }
...
}
HTH,
С Уважением,
Роберт Фекете