Sha256: 3076ef9c6b6cd15063a4f2e110956edf59cdfd98e41e6b20eb15d2b0c05b2aa7

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module Fluent
  class KubernetesTaggedRemoteSyslogOutput < Fluent::Output
    Fluent::Plugin.register_output('kubernetes_tagged_remote_syslog', self)

    config_param :host, :string
    config_param :port, :integer, default: 514

    config_param :facility, :string, default: 'user'
    config_param :severity, :string, default: 'notice'
    config_param :program, :string, default: 'pod_name'
    config_param :hostname, :string, default: 'namespace_name'
    config_param :skip_namespaces, :string, default: 'deis kube-system'

    def initialize
      super
      require "remote_syslog_logger"
      @loggers = {}
    end

    def shutdown
      @loggers.values.each(&:close)
      super
    end

    def shorten_name(str)
      if str.length > 31
        return str.sub(str[24...-5],"..")
      else
        return str
      end
    end

    def emit(tag, es, chain)
      es.each do |_time, record|
        record.each_pair do |_k, v|
          if v.is_a?(String)
            v.force_encoding('utf-8')
          end
        end

        next if skip_namespaces.include?(record.dig('kubernetes', 'namespace_name'))

        @loggers[tag] ||= RemoteSyslogLogger::UdpSender.new(
          @host,
          @port,
          facility: record['facility'] || @facility,
          severity: record['severity'] || @severity,
          program: shorten_name(record.dig('kubernetes', @program) || @program),
          local_hostname: shorten_name(record.dig('kubernetes', @hostname) || @hostname))

        @loggers[tag].transmit((if record.key?('log') then record['log'] else record end).to_s)
      end
      chain.next
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-kubernetes_tagged_remote_syslog-0.4.0 lib/fluent/plugin/out_kubernetes_tagged_remote_syslog.rb