Jan Grashoefer created BIT-1441:
-----------------------------------
Summary: Logrotation cannot be set when using path_func
Key: BIT-1441
URL: https://bro-tracker.atlassian.net/browse/BIT-1441
Project: Bro Issue Tracker
Issue Type: Problem
Components: Bro
Affects Versions: 2.4
Environment: SLC6, PF_RING, broctl
Reporter: Jan Grashoefer
I had a problem using Bro's filtering on my Bro cluster (using broctl). I
wanted to create separate logfiles in JSON format for some streams. As the file
name should include the current date, I specified a path_func. So far
everything worked as expected. Then I tried to disable the logrotation for
these files by setting interv = 0. Unfortunately this did not work. Setting a
fixed path, disabling logrotation worked as intended (see
[http://try.bro.org/#/trybro/saved/14143] an example of the code I used).
I investigated this issue and think, I have discovered a problem. The rotation
interval for a writer is determined in CreateWriter in manager.cc (see
[https://github.com/bro/bro/blob/2b1cd66f17194a30b90490965cbdffdd71c18c09/src/logging/Manager.cc#L1064])
based on the filter. The filter again is determined by writer and path (I
don't understand why the name of the filter is not used but there may be
reasons). To see whether the interval is set correctly I added some debug
output here. Then I did a test specifying a filter for HTTP using path_func and
a filter for CONN using a fixed path.
On my worker I get the expected output (except the interval seems wrong):
{quote} 0.000000/1437813255.656896 [logging] Set interval for
'packet_filter' (filter 'default') to '86400.000000'
0.000000/1437813255.658523 [logging] Set interval for 'loaded_scripts'
(filter 'default') to '86400.000000'
0.000000/1437813255.685123 [logging] Set interval for 'communication'
(filter 'default') to '86400.000000'
1437813255.644956/1437813255.709181 [logging] Set interval for 'stats' (filter
'default') to '86400.000000'
1437813255.644965/1437813255.710468 [logging] Set interval for 'weird' (filter
'default') to '86400.000000'
1437813255.822196/1437813255.834760 [logging] Set interval for 'reporter'
(filter 'default') to '86400.000000'
1437813256.015793/1437813256.027556 [logging] Set interval for 'software'
(filter 'default') to '86400.000000'
1437813256.015793/1437813256.039455 [logging] Set interval for 'files' (filter
'default') to '86400.000000'
1437813256.015793/1437813256.040269 [logging] Set interval for 'http' (filter
'default') to '86400.000000'
1437813256.015793/1437813256.040504 [logging] Set interval for
'/var/opt/bro/logs-json/http-2015-07-25' (filter 'http_json') to '0.000000'
1437813257.512453/1437813257.523782 [logging] Set interval for 'x509' (filter
'default') to '86400.000000'
1437813260.645607/1437813260.656385 [logging] Set interval for 'conn' (filter
'default') to '86400.000000'
1437813260.645607/1437813260.656526 [logging] Set interval for
'/var/opt/bro/logs-json/conn' (filter 'conn_json') to '0.000000'
1437813262.827012/1437813262.839179 [logging] Set interval for 'dns' (filter
'default') to '86400.000000'
1437813263.401981/1437813263.411552 [logging] Set interval for 'ssl' (filter
'default') to '86400.000000'
1437813293.565530/1437813293.575182 [logging] Set interval for 'kerberos'
(filter 'default') to '86400.000000'{quote}
But on the manager I get the following:
{quote}1437813085.377826/1437813085.387819 [logging] Set interval for
'loaded_scripts' (filter 'default') to '3600.000000'
1437813085.377826/1437813085.400927 [logging] Set interval for 'communication'
(filter 'default') to '3600.000000'
1437813089.408731/1437813089.409921 [logging] Set interval for 'reporter'
(filter '') to '3600.000000'
1437813089.410046/1437813089.411141 [logging] Set interval for 'weird' (filter
'') to '3600.000000'
1437813089.410046/1437813089.411314 [logging] Set interval for 'packet_filter'
(filter '') to '3600.000000'
1437813089.411802/1437813089.412948 [logging] Set interval for 'stats' (filter
'') to '3600.000000'
1437813089.444066/1437813089.445155 [logging] Set interval for 'files' (filter
'') to '3600.000000'
1437813089.453163/1437813089.454249 [logging] Set interval for 'software'
(filter '') to '3600.000000'
1437813089.472973/1437813089.474123 [logging] Set interval for 'dns' (filter
'') to '3600.000000'
1437813089.507522/1437813089.508617 [logging] Set default interval for
'/var/opt/bro/logs-json/http-2015-07-25' (filter '')
1437813089.508759/1437813089.509852 [logging] Set interval for 'http' (filter
'') to '3600.000000'
1437813089.523751/1437813089.524868 [logging] Set interval for 'x509' (filter
'') to '3600.000000',
1437813089.983185/1437813089.984342 [logging] Set interval for 'ssl' (filter
'') to '3600.000000'
1437813093.316215/1437813093.317350 [logging] Set interval for 'ftp' (filter
'') to '3600.000000'
1437813094.076354/1437813094.077442 [logging] Set interval for 'conn' (filter
'') to '3600.000000'
1437813094.077580/1437813094.078657 [logging] Set interval for
'/var/opt/bro/logs-json/conn' (filter '') to '0.000000'
1437813100.949465/1437813100.950567 [logging] Set interval for 'syslog' (filter
'') to '3600.000000'{quote}
On the manager you can see, that for all worker-generated logs the filter is
not known and that the interval for my HTTP-JSON log is set to the default
value (Note: The instantiating filter is not known because it is not set in the
call in SendAllWritersTo - see
[https://github.com/bro/bro/blob/2b1cd66f17194a30b90490965cbdffdd71c18c09/src/logging/Manager.cc#L1174]).
So why does it work on the worker? Its because the path of the filter is
determined and set during the write: The first write triggers determining the
path by the filter. Then the writer is created and path of writer and filter
match. The writers on the manager seem to be created without a write and
therefore the filter cannot be determined.
At first I tried to fix the issue by using the name of the filter but as seen
in the debug output, the name is not set. I also thought about setting the
interval using the WriterBackend::WriterInfo, which is passed to CreateWriter
and has a field for the interval, but there is also the postprocessor set in
the CreateWriter method. Unfortunately I don't understand how logging is
distributed between manager and worker in detail, so I do not know how I can
fix this issue.
--
This message was sent by Atlassian JIRA
(v6.5-OD-08-001#65007)
_______________________________________________
bro-dev mailing list
[email protected]
http://mailman.icsi.berkeley.edu/mailman/listinfo/bro-dev