[syslog-ng] log drop-and-delete directory

Scheidler, Balázs balazs.scheidler at oneidentity.com
Tue Nov 6 05:37:26 UTC 2018


The files removed should be untracked automatically once the DELETED event
is received from inotify, so they shouldn't be counted in max-files() once
that happens.

the persist file is cleaned up at restarts, quoting a comment from the
persist-state.c file:
 * Cleaning up:
 * ------------
 *
 * It can be seen that no explicit deallocation is performed on the
 * persistent file, in effect it could grow indefinitely. There's a
 * simple cleanup procedure though:
 *
 *  - on every startup, the persist file is rewritten, entries with an
 *    in_use bit set are copied to the new one, with the in_use bit cleared
 *  - whenever syslog-ng looks up (e.g. uses) an entry, its in_use bit is
set again
 *
 * This way unused entries in the persist file are reaped when
 * syslog-ng restarts.
 *

stats are only in memory, and are not cleaned up, unless syslog-ng is
restarted.

In theory those cleanups could happen via syslog-ng-ctl or at reloads, but
they don't today.

On Mon, Nov 5, 2018 at 11:19 PM Nik Ambrosch <nik at ambrosch.com> wrote:

> is there a way to tell syslog-ng to stop tracking/following a file and
> flush from syslog-ng stats?  i've noticed that when dropping a large number
> of files into my temporary directory it's very easy to exceed max_files and
> i'm not sure how long it takes to be removed from syslog-ng.persist
> automatically (is it ever removed automatically?)
>
> when this is done i'll be fetching and deleting about five new log files
> per minute.
>
>
>
> On Mon, Oct 15, 2018 at 12:36 PM Nik Ambrosch <nik at ambrosch.com> wrote:
>
>> It seems most elegant to have syslog-ng take care of the file once it's
>> done consuming, I don't think it would be against the role of the software
>> to do so either.
>>
>> I wrote a script that seems to do the job if run periodically via cron,
>> my biggest issue I have is a worst-case if there is an non-parsed file with
>> a missing stamp, which would happen on a daemon reload.  I'm conflicted if
>> the correct action is to remove the file or force a reload of the file.
>>
>>
>> #!/usr/bin/env bash
>>
>> path='/data/tmp'
>>
>> # examine every file in directory
>> for file in $(find $path -type f); do
>>   # how many lines is in this file
>>   lines=$(wc -l ${file} | awk '{print $1}')
>>
>>   # output of syslog-ng-ctl
>>   ctlout=$(syslog-ng-ctl query get src.file.s_cf_file*${file}*)
>>
>>   # how many lines syslog-ng has parsed
>>   parsed=$(echo "${ctlout}" | grep '.processed=' | awk -F '=' '{print
>> $2}')
>>
>>   # when syslog-ng last consumed the file
>>   stamp=$(echo "${ctlout}" | grep '.stamp=' | awk -F '=' '{print $2}')
>>
>>   # debug
>>   echo "file ${file} parsed ${parsed} of ${lines} lines"
>>
>>   # if file was parsed before a restart
>>   if [[ "${parsed}" = "0" && "$stamp" = "0" ]]; then
>>     echo "file ${file} processed before syslog-ng restart, removing"
>>     #rm -f "${file}
>>   fi
>>
>>   # if all lines in file were parsed
>>   if [[ ${parsed} -eq ${lines} ]]; then
>>     echo "file ${file} processed, removing"
>>     #rm -f "${file}
>>   fi
>> done
>>
>>
>> On Mon, Oct 15, 2018 at 12:51 AM, Scheidler, Balázs <
>> balazs.scheidler at oneidentity.com> wrote:
>>
>>> It would be possible to add an option to execute an external script when
>>> eof is reached.
>>> If i remember correctly the driver level has this information in the
>>> form of a notification today. So it's only about adding the option and
>>> calling system() on it.
>>>
>>> On the other hand, syslog-ng keeps statistics on every file it follows,
>>> so the alternative is to poll syslog-ng-ctl stats and see if the counters
>>> of the file is non-zero and delete it only in that case.
>>>
>>> On Sun, Oct 14, 2018, 04:16 Nik Ambrosch <nik at ambrosch.com> wrote:
>>>
>>>> Thanks for the feedback.  The files contain predictable json data, new
>>>> files arrive every 1-3 minutes (haven't decided yet).  There are no start
>>>> and end markers.
>>>>
>>>> I'm wary of using cron to delete old files because if syslog-ng isn't
>>>> able to consume the file (crashed, user error, upgrading package, etc) the
>>>> non-consumed file will be deleted and contents will be lost.
>>>>
>>>> That same worst case applies to a separate script - if it provides the
>>>> messages via syslog (instead of copying a file) but syslog-ng is unhealthy,
>>>> then my messages are lost unless I build a buffer into the script and that
>>>> starts to get complex.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Oct 13, 2018 at 2:40 PM, Balazs Scheidler <bazsi77 at gmail.com>
>>>> wrote:
>>>>
>>>>> If there's a specific time for which a dropped file is specific to,
>>>>> then just remove the file after a grace period with a simple cron job.
>>>>>
>>>>> On Sat, Oct 13, 2018, 14:01 Nagy, Gábor <gabor.nagy at oneidentity.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Nik,
>>>>>>
>>>>>> Syslog-ng should not be designed to delete files when it reaches EOF,
>>>>>> it rather monitors the file for new lines if so.
>>>>>> This would be a bit destructive behaviour even if it would be a
>>>>>> feature with a control flag:
>>>>>> source s_file_clearup {
>>>>>>   wildcard-file (
>>>>>>     base-dir("/tmp/")
>>>>>>     filename-pattern("*")
>>>>>>     remove-on-EOF(yes)
>>>>>>   );
>>>>>> };
>>>>>> But if we are looking at from your point of view, it could be
>>>>>> enhanced to have one-time files, or drop-off files.
>>>>>> It could be an enhancement.
>>>>>>
>>>>>> With the current behaviour of syslog-ng quick ideas to solve this use
>>>>>> case (if workaround needed):
>>>>>> - syslog-ng closes a file after the reading is idle for time_reap
>>>>>> seconds. This could be monitored externally and remove the given file.
>>>>>> Example message "Destination timed out, reaping;
>>>>>> template='input-logs', filename='input-logs"
>>>>>> I think there is no EOF warning for files, as syslog-ng simply waits
>>>>>> for new lines (as said above).
>>>>>>
>>>>>> Regards,
>>>>>> Gabor
>>>>>>
>>>>>>
>>>>>> On Fri, Oct 12, 2018 at 5:55 PM Nik Ambrosch <nik at ambrosch.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Looking to create a drop-off directory that syslog-ng handles
>>>>>>> instead of needing to execute in a separate script.. flow would go
>>>>>>> something like this:
>>>>>>>
>>>>>>> 1) mv file.log /syslog-tmp/
>>>>>>> 2) syslog-ng reads /syslog-tmp/file.log
>>>>>>> 3) syslog-ng deletes /syslog-tmp/file.log when done consuming
>>>>>>>
>>>>>>> Sounds simple but I can't seem to figure out a good way to do this.
>>>>>>> The other option is to read file with a script, send out with logger (or
>>>>>>> whatever), and hope that syslog-ng is running & healthy.
>>>>>>>
>>>>>>> Thanks.
>>>>>>>
>>>>>>> ______________________________________________________________________________
>>>>>>> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
>>>>>>> Documentation:
>>>>>>> http://www.balabit.com/support/documentation/?product=syslog-ng
>>>>>>> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>>>>>>>
>>>>>>>
>>>>>> ______________________________________________________________________________
>>>>>> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
>>>>>> Documentation:
>>>>>> http://www.balabit.com/support/documentation/?product=syslog-ng
>>>>>> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>>>>>>
>>>>>>
>>>>>
>>>>> ______________________________________________________________________________
>>>>> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
>>>>> Documentation:
>>>>> http://www.balabit.com/support/documentation/?product=syslog-ng
>>>>> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>>>>>
>>>>>
>>>>>
>>>>
>>>> ______________________________________________________________________________
>>>> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
>>>> Documentation:
>>>> http://www.balabit.com/support/documentation/?product=syslog-ng
>>>> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>>>>
>>>>
>>>
>>> ______________________________________________________________________________
>>> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
>>> Documentation:
>>> http://www.balabit.com/support/documentation/?product=syslog-ng
>>> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>>>
>>>
>>>
>>
> ______________________________________________________________________________
> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
> Documentation:
> http://www.balabit.com/support/documentation/?product=syslog-ng
> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.balabit.hu/pipermail/syslog-ng/attachments/20181106/7abeed0f/attachment.html>


More information about the syslog-ng mailing list