Представьте себе, что в этой системе есть программа, которая определяет, день сейчас или ночь, и устанавливает переменную окружения DAY. Моя переменная среды DAY подобрана и используется в этом рабочем фрагменте:
log {
source {
file("/var/log/special/xxx" flags(no-parse) );
};
destination {
file("/var/log/special/yyy" template("`DAY` $MESSAGE\n"));
};
};
Но со временем мне нужно будет изменить ДЕНЬ на «ночь». Я экспериментировал с глобальными переменными, но они не сохраняются между сообщениями журнала, и вы не можете использовать правило перезаписи и установить DAY
.
Думаю, я мог бы написать сценарий, который запускался бы, когда стемнело, и обновлял бы /etc/profile.d/day.csh
setenv DAY night
и выполните systemctl restart syslog-ng
Разве это не подвергнет меня риску потерять некоторые сообщения журнала? Я пишу в пункты назначения tcp () и amqp (), которые, как мне кажется, будут прерваны.
Было бы лучше HUP?
Есть подход, который я пропустил?
Если ты тоже используя diskbuffer в syslog-ng (доступно в версии 3.9) для мест назначения, то вы не должны терять сообщения во время перезапуска на этой стороне. (Кстати, перезагрузки конфигурации syslog-ng должно быть достаточно, например, syslog-ng-ctl reload). Сторона источника может быть более проблематичной, если скорость передачи сообщений очень высока и вы используете ненадежные протоколы на стороне источника (например, UDP).
Но, как предположил Триг, лучшим подходом было бы написать функцию шаблона на Python, которая запрашивает внешнюю переменную процесса / среды.