forked from openfoodfacts/openfoodfacts-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: measure and log duration of request and mongodb / off-query que… (
openfoodfacts#10557) As discussed in the infrastructure call today, this PR creates a request stats log file that contains in particular the time spent on each request, and time spent on specific parts (currently only off-query and mongodb queries, but we could measure other parts, like computiing attributes for all products etc.) Each product opener request generates 1 line in the log. The log can then be filtered, processed etc. to generate stats, averages etc. by route etc. Sample output: ``` [2024/07/16 16:02:54] [6322] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {facets_tags => 1,hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',original_query_string => 'category/plant-based-foods',request => 'UAKAojOQSh9DkCIL',request_duration => '1.07953190803528',route => 'facets_products',tags => [{canon_tagid => 'en:plant-based-foods',display_tag => 'Plant-based foods',new_tagid => 'en:plant-based-foods',new_tagid_path => '/category/plant-based-foods',tag => 'en:plant-based-foods',tag_prefix => '',tagid => 'en:plant-based-foods',tagtype => 'categories',tagtype_name => 'category',tagtype_path => '/categories'}]} request_stats [2024/07/16 16:03:22] [34119] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {facets_tags => 1,hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',mongodb_query_count_duration => '0.149086952209473',mongodb_query_duration => '0.0049130916595459',off_query_count_tags_query_duration => '0.0157339572906494',original_query_string => 'category/plant-based-foods',request => 'Cf8BRMfpkrkvDo5r',request_duration => '1.04712390899658',route => 'facets_products',tags => [{canon_tagid => 'en:plant-based-foods',display_tag => 'Plant-based foods',new_tagid => 'en:plant-based-foods',new_tagid_path => '/category/plant-based-foods',tag => 'en:plant-based-foods',tag_prefix => '',tagid => 'en:plant-based-foods',tagtype => 'categories',tagtype_name => 'category',tagtype_path => '/categories'}]} request_stats [2024/07/16 16:03:22] [34310] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {api_action => 'attribute_groups',hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',original_query_string => 'api/v0/attribute_groups',request => 'LA6egYtTcXy2PEzB',request_duration => '0.0332939624786377',route => 'api'} request_stats [2024/07/16 16:08:20] [331813] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',original_query_string => '',request => 'XYsmC846i7lx4y5Q',request_duration => '0.574708938598633',route => 'index'} request_stats [2024/07/16 16:08:23] [335260] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {code => '3229820100234',hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',original_query_string => 'product/3229820100234/filled-dark-chocolate-bjorg',request => 'tKwnWARpucerfJZB',request_duration => '0.423907995223999',rev => undef,route => 'product'} request_stats [2024/07/16 16:08:31] [343612] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {facets_tags => 0,groupby_tagtype => 'labels',hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',mongodb_aggregate_count_duration => '0.101968050003052',mongodb_aggregate_query_duration => '0.43549108505249',off_query_aggregate_tags_query_duration => '0.00300002098083496',original_query_string => 'labels',request => '9HKK8uXPV6T7cN4Y',request_duration => '0.600616216659546',route => 'facets_tags',tags => []} request_stats [2024/07/16 16:08:34] [346268] /opt/product-opener/lib/ProductOpener/RequestStats.pm 76 requeststats {facets_tags => 1,hostname => 'world.openfoodfacts.localhost',ip => '192.168.16.1',mongodb_query_count_duration => '0.120925903320312',mongodb_query_duration => '0.00329804420471191',off_query_count_tags_query_duration => '0.0101730823516846',original_query_string => 'label/vegetarian',request => 'l7KQVKiAFXomtGQw',request_duration => '0.877622842788696',route => 'facets_products',tags => [{canon_tagid => 'en:vegetarian',display_tag => 'Vegetarian',new_tagid => 'en:vegetarian',new_tagid_path => '/label/vegetarian',tag => 'en:vegetarian',tag_prefix => '',tagid => 'en:vegetarian',tagtype => 'labels',tagtype_name => 'label',tagtype_path => '/labels'}]} request_stats ```
- Loading branch information
1 parent
c1db136
commit 2cb1b1e
Showing
12 changed files
with
197 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,34 @@ | ||
log4perl.rootLogger= sub {return ($ENV{LOG_LEVEL_ROOT} // "ERROR") . ", LOGFILE";} | ||
log4perl.logger.mongodb= sub {return ($ENV{LOG_LEVEL_MONGODB} // "INFO") . ", MONGODB_LOGFILE";} | ||
log4perl.logger.ratelimiter = sub {return ($ENV{LOG_LEVEL_RATE_LIMITER} // "INFO") . ", RATELIMITER_LOGFILE";} | ||
log4perl.logger.requeststats = sub {return ($ENV{LOG_LEVEL_REQUEST_STATS} // "INFO") . ", REQUESTSTATS_LOGFILE";} | ||
log4perl.PatternLayout.cspec.S = sub { my $context = Log::Log4perl::MDC->get_context; use Data::Dumper (); local $Data::Dumper::Indent = 0; local $Data::Dumper::Terse = 1; local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse= 1; my $str = Data::Dumper::Dumper($context); $str =~ s/[\n\r]/ /g; return $str; } | ||
log4perl.PatternLayout.cspec.J = sub { my $context = Log::Log4perl::MDC->get_context; use JSON::MaybeXS; my $json_utf8 = JSON::MaybeXS->new->utf8(1)->allow_nonref->canonical; my $str = $json_utf8->encode($context); return $str; } | ||
|
||
log4perl.appender.LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.LOGFILE.filename=/mnt/podata/logs/log4perl.log | ||
log4perl.appender.LOGFILE.mode=append | ||
log4perl.appender.LOGFILE.autoflush=1 | ||
log4perl.appender.LOGFILE.layout=PatternLayout | ||
log4perl.appender.LOGFILE.layout.ConversionPattern=[%d] [%r] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.MONGODB_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.MONGODB_LOGFILE.filename=/mnt/podata/logs/mongodb_log4perl.log | ||
log4perl.appender.MONGODB_LOGFILE.mode=append | ||
log4perl.appender.MONGODB_LOGFILE.autoflush=1 | ||
log4perl.appender.MONGODB_LOGFILE.layout=PatternLayout | ||
log4perl.appender.MONGODB_LOGFILE.layout.ConversionPattern=[%d] [%r] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.RATELIMITER_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.RATELIMITER_LOGFILE.filename=/mnt/podata/logs/ratelimiter_log4perl.log | ||
log4perl.appender.RATELIMITER_LOGFILE.mode=append | ||
log4perl.appender.RATELIMITER_LOGFILE.autoflush=1 | ||
log4perl.appender.RATELIMITER_LOGFILE.layout=PatternLayout | ||
log4perl.appender.RATELIMITER_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.REQUESTSTATS_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.REQUESTSTATS_LOGFILE.filename=/mnt/podata/logs/requeststats_log4perl.log | ||
log4perl.appender.REQUESTSTATS_LOGFILE.mode=append | ||
log4perl.appender.REQUESTSTATS_LOGFILE.autoflush=1 | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout=PatternLayout | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout.ConversionPattern=%J %n |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,35 @@ | ||
log4perl.rootLogger=ERROR, LOGFILE | ||
log4perl.logger.mongodb=INFO, MONGODB_LOGFILE | ||
log4perl.logger.ratelimiter=INFO, RATELIMITER_LOGFILE | ||
log4perl.logger.requeststats=INFO, REQUESTSTATS_LOGFILE | ||
|
||
log4perl.PatternLayout.cspec.S = sub { my $context = Log::Log4perl::MDC->get_context; use Data::Dumper (); local $Data::Dumper::Indent = 0; local $Data::Dumper::Terse = 1; local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse = 1; my $str = Data::Dumper::Dumper($context); $str =~ s/[\n\r]/ /g; return $str; } | ||
log4perl.PatternLayout.cspec.J = sub { my $context = Log::Log4perl::MDC->get_context; use JSON::MaybeXS; my $json_utf8 = JSON::MaybeXS->new->utf8(1)->allow_nonref->canonical; my $str = $json_utf8->encode($context); return $str; } | ||
|
||
log4perl.appender.LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.LOGFILE.filename=/srv/obf/logs/log4perl.log | ||
log4perl.appender.LOGFILE.mode=append | ||
|
||
log4perl.appender.LOGFILE.autoflush=0 | ||
log4perl.appender.LOGFILE.layout=PatternLayout | ||
log4perl.appender.LOGFILE.layout.ConversionPattern=[%r] %F %L %c %S %m{chomp}%n | ||
log4perl.appender.LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.MONGODB_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.MONGODB_LOGFILE.filename=/srv/obf/logs/mongodb_log4perl.log | ||
log4perl.appender.MONGODB_LOGFILE.mode=append | ||
|
||
log4perl.appender.MONGODB_LOGFILE.autoflush=0 | ||
log4perl.appender.MONGODB_LOGFILE.layout=PatternLayout | ||
log4perl.appender.MONGODB_LOGFILE.layout.ConversionPattern=[%r] %F %L %c %S %m{chomp}%n | ||
log4perl.appender.MONGODB_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.RATELIMITER_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.RATELIMITER_LOGFILE.filename=/srv/obf/logs/ratelimiter_log4perl.log | ||
log4perl.appender.RATELIMITER_LOGFILE.mode=append | ||
log4perl.appender.RATELIMITER_LOGFILE.autoflush=0 | ||
log4perl.appender.RATELIMITER_LOGFILE.layout=PatternLayout | ||
log4perl.appender.RATELIMITER_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.REQUESTSTATS_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.REQUESTSTATS_LOGFILE.filename=/srv/obf/logs/requeststats_log4perl.log | ||
log4perl.appender.REQUESTSTATS_LOGFILE.mode=append | ||
log4perl.appender.REQUESTSTATS_LOGFILE.autoflush=0 | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout=PatternLayout | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout.ConversionPattern=%J %n |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,35 @@ | ||
log4perl.rootLogger=ERROR, LOGFILE | ||
log4perl.logger.mongodb=INFO, MONGODB_LOGFILE | ||
log4perl.logger.ratelimiter=INFO, RATELIMITER_LOGFILE | ||
log4perl.logger.requeststats=INFO, REQUESTSTATS_LOGFILE | ||
|
||
log4perl.PatternLayout.cspec.S = sub { my $context = Log::Log4perl::MDC->get_context; use Data::Dumper (); local $Data::Dumper::Indent = 0; local $Data::Dumper::Terse = 1; local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse = 1; my $str = Data::Dumper::Dumper($context); $str =~ s/[\n\r]/ /g; return $str; } | ||
log4perl.PatternLayout.cspec.J = sub { my $context = Log::Log4perl::MDC->get_context; use JSON::MaybeXS; my $json_utf8 = JSON::MaybeXS->new->utf8(1)->allow_nonref->canonical; my $str = $json_utf8->encode($context); return $str; } | ||
|
||
log4perl.appender.LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.LOGFILE.filename=/srv/off/logs/log4perl.log | ||
log4perl.appender.LOGFILE.mode=append | ||
|
||
log4perl.appender.LOGFILE.autoflush=0 | ||
log4perl.appender.LOGFILE.layout=PatternLayout | ||
log4perl.appender.LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.MONGODB_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.MONGODB_LOGFILE.filename=/srv/off/logs/mongodb_log4perl.log | ||
log4perl.appender.MONGODB_LOGFILE.mode=append | ||
|
||
log4perl.appender.MONGODB_LOGFILE.autoflush=0 | ||
log4perl.appender.MONGODB_LOGFILE.layout=PatternLayout | ||
log4perl.appender.MONGODB_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.RATELIMITER_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.RATELIMITER_LOGFILE.filename=/srv/off/logs/ratelimiter_log4perl.log | ||
log4perl.appender.RATELIMITER_LOGFILE.mode=append | ||
|
||
log4perl.appender.RATELIMITER_LOGFILE.autoflush=0 | ||
log4perl.appender.RATELIMITER_LOGFILE.layout=PatternLayout | ||
log4perl.appender.RATELIMITER_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n | ||
|
||
log4perl.appender.REQUESTSTATS_LOGFILE=Log::Log4perl::Appender::File | ||
log4perl.appender.REQUESTSTATS_LOGFILE.filename=/srv/off/logs/requeststats_log4perl.log | ||
log4perl.appender.REQUESTSTATS_LOGFILE.mode=append | ||
log4perl.appender.REQUESTSTATS_LOGFILE.autoflush=0 | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout=PatternLayout | ||
log4perl.appender.REQUESTSTATS_LOGFILE.layout.ConversionPattern=%J %n |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.