Module: Nais::Log::Parser
- Defined in:
- lib/nais/log/parser.rb,
lib/nais/log/parser/version.rb
Constant Summary collapse
- VERSION =
"0.9.0"
Class Method Summary collapse
- .flatten_hash(hash, path = "") ⇒ Object
- .get_exceptions(str) ⇒ Object
- .parse_accesslog(str) ⇒ Object
- .parse_accesslog_with_processing_time(str) ⇒ Object
- .parse_glog(str) ⇒ Object
- .prefix_nonstandard_fields(record) ⇒ Object
- .remap_elasticsearch_fields(time, record) ⇒ Object
- .remap_java_fields(record) ⇒ Object
- .remap_kubernetes_fields(record) ⇒ Object
Class Method Details
.flatten_hash(hash, path = "") ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/nais/log/parser.rb', line 9 def Parser.flatten_hash(hash, path = "") hash.each_with_object({}) do |(k, v), ret| key = (path + k.to_s).tr('.','_') if v.is_a? Hash ret.merge! Parser.flatten_hash(v, key.to_s + "_") else ret[key] = v end end end |
.get_exceptions(str) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/nais/log/parser.rb', line 20 def Parser.get_exceptions(str) exps = str.scan(/\b[A-Z]\w+Exception\b/) if exps.any? exps.uniq! exps.size == 1 ? exps.first : exps end end |
.parse_accesslog(str) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/nais/log/parser.rb', line 75 def Parser.parse_accesslog(str) if m = str.match(/^(\S+) +(?:(\S+) )?(\S+) \[([^\]]+)\] \"([^\"]*)\" (\S+) (\S+)(.*)/) r = {} r['remote_ip'] = m[1] r['ident'] = m[2] unless (m[2].nil? || m[2] == '-') r['user'] = m[3] unless m[3] == '-' r['timestamp'] = Time.strptime(m[4], "%d/%b/%Y:%H:%M:%S %Z").iso8601 r['request'] = m[5] r['response_code'] = m[6] unless m[6] == '-' r['content_length'] = m[7] unless m[7] == '-' ext = m[8] unless m[8] == '' return r, ext else return nil end end |
.parse_accesslog_with_processing_time(str) ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/nais/log/parser.rb', line 92 def Parser.parse_accesslog_with_processing_time(str) r,ext = Parser.parse_accesslog(str) if !ext.nil? && m = ext.match(/^\s+(?:\"?-\"?|([0-9.]+)(?:[µm]?s))?$/u) r['processing_time'] = m[1] unless m[1].nil? end return r end |
.parse_glog(str) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/nais/log/parser.rb', line 100 def Parser.parse_glog(str) if m = str.match(/^([IWEF])(\d{4} \d\d:\d\d:\d\d.\d{6})\s+(\S+)\s([^:]+):(\d+)\]\s+(.*)/) r = {} r['level'] = case m[1] when 'I' 'Info' when 'W' 'Warning' when 'E' 'Error' when 'F' 'Fatal' end r['timestamp'] = Time.strptime(m[2], "%m%d %H:%M:%S.%N").iso8601(9) r['thread'] = m[3] r['file'] = m[4] r['line'] = m[5] r['message'] = m[6] return r else return nil end end |
.prefix_nonstandard_fields(record) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/nais/log/parser.rb', line 63 def Parser.prefix_nonstandard_fields(record) r = {} record.each{|k,v| if k =~ /^(?:@timestamp|@version|type|received_at|message|container|host|namespace|application|pod|thread|component|category|level|stack_trace|exception|cluster|envclass|content_length|remote_ip|response_code|user|ident|processing_time|source)$/ r[k] = record[k] else r["x_"+k] = record[k] end } r end |
.remap_elasticsearch_fields(time, record) ⇒ Object
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/nais/log/parser.rb', line 44 def Parser.remap_elasticsearch_fields(time, record) record["received_at"] = Time.new.iso8601(9) unless record.has_key?("@timestamp") record["@timestamp"] = record.delete("timestamp") || record.delete("time") || Time.at(time).iso8601(9) end unless record.has_key?("message") record["message"] = record.delete("log") || record.delete("msg") end record end |
.remap_java_fields(record) ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/nais/log/parser.rb', line 55 def Parser.remap_java_fields(record) record["thread"] = record.delete("thread_name") if record.has_key?("thread_name") record["component"] = record.delete("logger_name") if record.has_key?("logger_name") record["level"].capitalize! if record.has_key?("level") record.delete("level_value") record end |
.remap_kubernetes_fields(record) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/nais/log/parser.rb', line 28 def Parser.remap_kubernetes_fields(record) record["category"] = record.delete("stream") if record.has_key?("stream") if record["docker"].is_a?(Hash) record["container"] = record["docker"]["container_id"] record.delete("docker") end if record["kubernetes"].is_a?(Hash) record["host"] = record["kubernetes"]["host"] record["namespace"] = record["kubernetes"]["namespace_name"] record["application"] = record["kubernetes"]["container_name"] record["pod"] = record["kubernetes"]["pod_name"] record.delete("kubernetes") end record end |