class Fluent::Plugin::BunyanParser

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/parser_bunyan.rb, line 23
def configure(conf)
  conf["time_format"] = "%iso8601"
  super(conf)
end
parse(text) { |time, record| ... } click to toggle source
Calls superclass method
# File lib/fluent/plugin/parser_bunyan.rb, line 28
def parse(text)
  # Example of a log line from containerd we want to get stuff from:
  # 2020-03-16T22:14:05.710251038+09:00 stdout F {"UserAgent":"kube-probe/1.17","hostname":"helloworld-go-helloworld-5649dfd7bd-k8954","level":30,"msg":"request start: GET /","name":"helloworld","pid":1,"remote":"10.1.10.1:60114","reqid":"e4745ed6-82d4-4013-aeda-1d02bef42331","scope":"/","tid":17,"time":"2020-03-16T13:14:05Z","topic":"route","v":0}
  # Example of a log line from docker for mac we want to get stuff from:
  # {"log":"{\"UserAgent\":\"HTTPie/2.0.0\",\"hostname\":\"helloworld-859745b47d-5dlbn\",\"level\":30,\"msg\":\"request start: GET /\",\"name\":\"helloworld\",\"pid\":1,\"remote\":\"192.168.65.3:42018\",\"reqid\":\"ba054f49-d97e-4970-89c4-dd3b75270e6a\",\"scope\":\"/\",\"tid\":14,\"time\":\"2020-03-24T08:29:02Z\",\"topic\":\"route\",\"v\":0}\n","stream":"stdout","time":"2020-03-24T08:29:02.3995324Z"}
  if text =~ /[^{]*({.*)/
    super(text.sub(/[^{]*({.*)/, '\1')) do |time, record|
      if record then
        if record["log"] then # This is a Docker style log message
          begin
            r = JSON.load(record["log"])
            r.delete("time")
            record.merge!(r)
            record.delete("log")
          rescue JSON::ParserError
          end
        end
        record["severity"] = severity(record["level"] || 0)
        record["host"]     = record.delete("hostname")
        record["message"]  = record.delete("msg")

        record.delete("v")
      end
      yield time, record
    end
  end
end
severity(level) click to toggle source
# File lib/fluent/plugin/parser_bunyan.rb, line 56
def severity(level)
  return "fatal" if level >= 60
  return "error" if level >= 50
  return "warn"  if level >= 40
  return "info"  if level >= 30
  return "debug" if level >= 20
  return "trace"
end
version() click to toggle source
# File lib/fluent/plugin/parser_bunyan.rb, line 65
def version
  return "0.0.5"
end