example/log_stats in log_stats-0.4.2 vs example/log_stats in log_stats-0.4.3
- old
+ new
@@ -2,20 +2,36 @@
#############################################################################
# This example script shows custom parsing of API requests from a log file.
#############################################################################
-$:.unshift(File.dirname(__FILE__) + '/../lib')
-
-require 'log_stats'
+require "log_stats"
require "log_stats/config"
require "json"
require "uri"
parse_time = Proc.new { |line| line[/\b20\d\d-\d\d-\d\dT\d\d:\d\d:\d\d/] }
+
custom_config = {
- events: LogStats::Config.default_config[:events].merge({
+ events: {
+ requests: {
+ # NOTE: matches Heroku router lines. Also matches Papertrails slightly modified lines.
+ line_pattern: /\s(heroku\/router)|(heroku\[router\]:)\s/,
+ fields: [
+ {name: :time, parse: parse_time},
+ {name: :method},
+ {name: :host},
+ {name: :path},
+ {name: :status, numeric: true},
+ {name: :code, optional: true},
+ {name: :service, numeric: true}
+ ],
+ top_list_limit: 100,
+ apdex: {tolerating: 500, frustrated: 2000},
+ apdex_goal: 0.9,
+ stats: false # Skip listing stats per request path to keep output size manageable
+ },
api_calls: {
# 2017-02-19T06:21:25.522274+00:00 app[worker.2]: [WARN] [Vac::Request] Slow response time for url=http://sumore02.cmore.dk/api/tve_web/search/categories/160145/assets/ method=get status=304 size= response_time=141
line_pattern: /\s\[Vac::Request\] Slow response time\s/,
fields: [
{name: :time, parse: parse_time},
@@ -24,22 +40,24 @@
{name: :response_time, numeric: true, events: true}
],
group_by: {
hostname: {
id: Proc.new { |api_call| URI(api_call[:url]).host }
- },
- method: {
- id: Proc.new { |api_call| URI(api_call[:method]) }
}
- }
+ # NOTE: Grouping by HTTP method doesn't really add much at the moment, so commenting out for now
+ # method: {
+ # id: Proc.new { |api_call| URI(api_call[:method]) }
+ # }
+ },
+ events: false, # Skip listing all individual API calls to keep output size manageable
+ limit: 5
}
- }),
- verbose: false
+ },
+ verbose: true
}
config = LogStats::Config.default_config.
merge(custom_config).
merge(LogStats::Config.env_config)
-log_file_data = ARGF.read
+log_file_data = LogStats::Logger.elapsed(config, "Reading file") { ARGF.readlines }
data = LogStats.get_data(log_file_data, config)
-data[:requests] = data[:requests][:kpi] # Only output KPI from requests data
puts JSON.pretty_generate(data)