fluent-plugin-logmatic 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +19 -1
- data/fluent-plugin-logmatic.gemspec +2 -1
- data/lib/fluent/plugin/out_logmatic.rb +4 -2
- data/lib/fluent/plugin/out_logmatic_http.rb +39 -24
- metadata +24 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5a30e2c66cf206b595f59ba1be9bbd34a0c3ac26
         | 
| 4 | 
            +
              data.tar.gz: 3a426bb92f291ade3dbbe01d669c7f68c97937a7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: dbc9ec516620c079c5c00ad5948e398fa814d4982f15a8d43909d8e19d3af7cb32205ac6922ba4aa93ce6f3c61cb56114840f345590f7b1c89e1d5bb7ef9fd07
         | 
| 7 | 
            +
              data.tar.gz: 30d38f4691524a4641f23ea69db610ce9a32ee6d4ce0260eed1a8cc00cddbd54e8ca4b724f347b4f4886a400ef5ed00840058b168a95e9cc96af49e1dd76bad1
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            # Fluentd output plugin for Logmatic.io.
         | 
| 2 | 
            -
            Link to the [Logmatic.io documentation](http://doc.logmatic.io/docs/using-fluentd) | 
| 2 | 
            +
            Link to the [Logmatic.io documentation](http://doc.logmatic.io/docs/using-fluentd)
         | 
| 3 3 |  | 
| 4 4 |  | 
| 5 5 | 
             
            It mainly contains a proper JSON formatter and a socket handler that
         | 
| @@ -17,6 +17,7 @@ To add the plugin to your fluentd agent, use the following command: | |
| 17 17 |  | 
| 18 18 | 
             
            To match events and send them to logmatic.io, simply add the following code to your configuration file.
         | 
| 19 19 |  | 
| 20 | 
            +
            TCP example
         | 
| 20 21 | 
             
            ```xml
         | 
| 21 22 | 
             
            # Match events tagged with "logmatic.**" and
         | 
| 22 23 | 
             
            # send them to Logmatic.io
         | 
| @@ -32,6 +33,23 @@ To match events and send them to logmatic.io, simply add the following code to y | |
| 32 33 |  | 
| 33 34 | 
             
            </match>
         | 
| 34 35 |  | 
| 36 | 
            +
            ```
         | 
| 37 | 
            +
            HTTP example
         | 
| 38 | 
            +
            ```xml
         | 
| 39 | 
            +
            # Match events tagged with "logmatic.**" and
         | 
| 40 | 
            +
            # send them to Logmatic.io
         | 
| 41 | 
            +
            <match logmatic.**>
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              @type logmatic_http
         | 
| 44 | 
            +
              @id awesome_agent
         | 
| 45 | 
            +
              api_key <your_api_key>
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              # Optional
         | 
| 48 | 
            +
              include_tag_key true
         | 
| 49 | 
            +
              tag_key 'tag'
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
            </match>
         | 
| 52 | 
            +
             | 
| 35 53 | 
             
            ```
         | 
| 36 54 |  | 
| 37 55 | 
             
            After a restart of FluentD, any child events tagged with `logmatic` are shipped to your plateform.
         | 
| @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 6 | 
             
              spec.name          = "fluent-plugin-logmatic"
         | 
| 7 | 
            -
              spec.version       = "0.9. | 
| 7 | 
            +
              spec.version       = "0.9.1"
         | 
| 8 8 | 
             
              spec.authors       = ["Logmatic support team"]
         | 
| 9 9 | 
             
              spec.email         = ["support@logmatic.io"]
         | 
| 10 10 | 
             
              spec.summary       = "Logmatic output plugin for Fluent event collector"
         | 
| @@ -18,4 +18,5 @@ Gem::Specification.new do |spec| | |
| 18 18 |  | 
| 19 19 | 
             
              spec.add_development_dependency "bundler", "~> 1.5"
         | 
| 20 20 | 
             
              spec.add_development_dependency "rake"
         | 
| 21 | 
            +
              spec.add_development_dependency "yajl-ruby", "~> 1.2"
         | 
| 21 22 | 
             
            end
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require 'socket'
         | 
| 2 2 | 
             
            require 'openssl'
         | 
| 3 | 
            +
            require 'yajl'
         | 
| 3 4 |  | 
| 4 5 | 
             
            class Fluent::LogmaticOutput < Fluent::BufferedOutput
         | 
| 5 6 | 
             
              class ConnectionFailure < StandardError; end
         | 
| @@ -75,12 +76,13 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput | |
| 75 76 | 
             
                messages = Array.new
         | 
| 76 77 | 
             
                chunk.msgpack_each do |tag, record|
         | 
| 77 78 | 
             
                  next unless record.is_a? Hash
         | 
| 78 | 
            -
                  next unless  | 
| 79 | 
            +
                  next unless record.has_key? "message"
         | 
| 80 | 
            +
             | 
| 79 81 | 
             
                  if @include_tag_key
         | 
| 80 82 | 
             
                    record[@tag_key] = tag
         | 
| 81 83 | 
             
                  end
         | 
| 82 84 | 
             
                  if @use_json
         | 
| 83 | 
            -
                    messages.push "#{api_key} " + record | 
| 85 | 
            +
                    messages.push "#{api_key} " + Yajl.dump(record) + "\n"
         | 
| 84 86 | 
             
                  else
         | 
| 85 87 | 
             
                    messages.push "#{api_key} " + record["message"].rstrip() + "\n"
         | 
| 86 88 | 
             
                  end
         | 
| @@ -1,3 +1,8 @@ | |
| 1 | 
            +
            require 'net/http'
         | 
| 2 | 
            +
            require 'net/https'
         | 
| 3 | 
            +
            require 'uri'
         | 
| 4 | 
            +
            require 'yajl'
         | 
| 5 | 
            +
             | 
| 1 6 | 
             
            class Fluent::LogmaticOutput < Fluent::BufferedOutput
         | 
| 2 7 | 
             
              class ConnectionFailure < StandardError;
         | 
| 3 8 | 
             
              end
         | 
| @@ -20,9 +25,6 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput | |
| 20 25 |  | 
| 21 26 | 
             
              def initialize
         | 
| 22 27 | 
             
                super
         | 
| 23 | 
            -
                require 'net/http'
         | 
| 24 | 
            -
                require 'net/https'
         | 
| 25 | 
            -
                require 'uri'
         | 
| 26 28 | 
             
              end
         | 
| 27 29 |  | 
| 28 30 | 
             
              def configure(conf)
         | 
| @@ -56,45 +58,58 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput | |
| 56 58 |  | 
| 57 59 | 
             
                # Pack messages
         | 
| 58 60 | 
             
                chunk.msgpack_each do |tag, record|
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  log.trace("New chunk received: #{record}, #{tag}")
         | 
| 59 63 | 
             
                  next unless record.is_a? Hash
         | 
| 60 | 
            -
                  next unless  | 
| 64 | 
            +
                  next unless record.has_key? "message"
         | 
| 65 | 
            +
             | 
| 61 66 |  | 
| 62 67 | 
             
                  if @include_tag_key
         | 
| 63 68 | 
             
                    record[@tag_key] = tag
         | 
| 64 69 | 
             
                  end
         | 
| 65 | 
            -
             | 
| 70 | 
            +
             | 
| 71 | 
            +
                  log.trace("Json message: #{Yajl.dump(record)}")
         | 
| 72 | 
            +
                  messages.push Yajl.dump(record)
         | 
| 66 73 | 
             
                end
         | 
| 67 74 |  | 
| 68 75 | 
             
                # Send them
         | 
| 69 76 | 
             
                log.trace("Sending #{messages.length} messages")
         | 
| 70 77 | 
             
                retries = 0
         | 
| 71 | 
            -
                 | 
| 78 | 
            +
                force_retry = false
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                if (messages.length > 0)
         | 
| 72 81 |  | 
| 73 | 
            -
                   | 
| 74 | 
            -
                   | 
| 75 | 
            -
                  req.body = data
         | 
| 76 | 
            -
                  log.trace("Posting data")
         | 
| 77 | 
            -
                  res = @https.request(messages.to_json)
         | 
| 78 | 
            -
                  log.trace("Status code: #{res.code}")
         | 
| 82 | 
            +
                  log.trace("Full message body: #{Yajl.dump(messages)}")
         | 
| 83 | 
            +
                  begin
         | 
| 79 84 |  | 
| 80 | 
            -
             | 
| 81 | 
            -
                     | 
| 85 | 
            +
                    force_retry = false
         | 
| 86 | 
            +
                    req = Net::HTTP::Post.new(@uri.path)
         | 
| 87 | 
            +
                    req['Content-Type'] = 'application/json'
         | 
| 88 | 
            +
                    req.body = Yajl.dump(messages)
         | 
| 89 | 
            +
                    log.trace("Posting data")
         | 
| 90 | 
            +
                    res = @https.request(req)
         | 
| 91 | 
            +
                    log.trace("Status code: #{res.code}")
         | 
| 82 92 |  | 
| 83 | 
            -
             | 
| 84 | 
            -
                       | 
| 85 | 
            -
                      retries += 1
         | 
| 86 | 
            -
                      log.warn "Could not push logs to Logmatic, attempt=#{retries} max_attempts=#{max_retries} wait=#{a_couple_of_seconds}s error=#{res.code}"
         | 
| 93 | 
            +
                    if (res.code.to_i != 0 && res.code.to_i != 200)
         | 
| 94 | 
            +
                      if retries < @max_retries || max_retries == -1
         | 
| 87 95 |  | 
| 88 | 
            -
             | 
| 96 | 
            +
                        a_couple_of_seconds = retries ** 2
         | 
| 97 | 
            +
                        a_couple_of_seconds = 30 unless a_couple_of_seconds < 30
         | 
| 98 | 
            +
                        retries += 1
         | 
| 99 | 
            +
                        log.warn "Could not push logs to Logmatic, attempt=#{retries} max_attempts=#{max_retries} wait=#{a_couple_of_seconds}s error=#{res.code}"
         | 
| 89 100 |  | 
| 90 | 
            -
             | 
| 101 | 
            +
                        sleep a_couple_of_seconds
         | 
| 102 | 
            +
                        force_retry = true
         | 
| 103 | 
            +
                        raise "Status code: #{res.code}"
         | 
| 91 104 |  | 
| 105 | 
            +
                      end
         | 
| 92 106 | 
             
                    end
         | 
| 107 | 
            +
                  rescue => e
         | 
| 108 | 
            +
                    # Handle some failures
         | 
| 109 | 
            +
                    log.error("Error while sending data. Making a new attempt. Error: #{e}")
         | 
| 110 | 
            +
                    retry if force_retry
         | 
| 111 | 
            +
                    raise ConnectionFailure, "Could not push logs to Logmatic after #{retries} retries, #{e.message}"
         | 
| 93 112 | 
             
                  end
         | 
| 94 | 
            -
                rescue => e
         | 
| 95 | 
            -
                  # Handle some failures
         | 
| 96 | 
            -
                  retry
         | 
| 97 | 
            -
                  raise ConnectionFailure, "Could not push logs to Logmatic after #{retries} retries, #{e.message}"
         | 
| 98 113 | 
             
                end
         | 
| 99 114 | 
             
              end
         | 
| 100 115 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,43 +1,57 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-logmatic
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.9. | 
| 4 | 
            +
              version: 0.9.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Logmatic support team
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017- | 
| 11 | 
            +
            date: 2017-06-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 | 
            -
                - -  | 
| 17 | 
            +
                - - ~>
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 19 | 
             
                    version: '1.5'
         | 
| 20 20 | 
             
              type: :development
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 | 
            -
                - -  | 
| 24 | 
            +
                - - ~>
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: '1.5'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: rake
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 31 | 
            +
                - - '>='
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 33 | 
             
                    version: '0'
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - -  | 
| 38 | 
            +
                - - '>='
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: yajl-ruby
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ~>
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '1.2'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ~>
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '1.2'
         | 
| 41 55 | 
             
            description: 
         | 
| 42 56 | 
             
            email:
         | 
| 43 57 | 
             
            - support@logmatic.io
         | 
| @@ -45,7 +59,7 @@ executables: [] | |
| 45 59 | 
             
            extensions: []
         | 
| 46 60 | 
             
            extra_rdoc_files: []
         | 
| 47 61 | 
             
            files:
         | 
| 48 | 
            -
            -  | 
| 62 | 
            +
            - .gitignore
         | 
| 49 63 | 
             
            - Gemfile
         | 
| 50 64 | 
             
            - LICENSE
         | 
| 51 65 | 
             
            - README.md
         | 
| @@ -63,17 +77,17 @@ require_paths: | |
| 63 77 | 
             
            - lib
         | 
| 64 78 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 65 79 | 
             
              requirements:
         | 
| 66 | 
            -
              - -  | 
| 80 | 
            +
              - - '>='
         | 
| 67 81 | 
             
                - !ruby/object:Gem::Version
         | 
| 68 82 | 
             
                  version: '0'
         | 
| 69 83 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 70 84 | 
             
              requirements:
         | 
| 71 | 
            -
              - -  | 
| 85 | 
            +
              - - '>='
         | 
| 72 86 | 
             
                - !ruby/object:Gem::Version
         | 
| 73 87 | 
             
                  version: '0'
         | 
| 74 88 | 
             
            requirements: []
         | 
| 75 89 | 
             
            rubyforge_project: 
         | 
| 76 | 
            -
            rubygems_version: 2. | 
| 90 | 
            +
            rubygems_version: 2.0.14.1
         | 
| 77 91 | 
             
            signing_key: 
         | 
| 78 92 | 
             
            specification_version: 4
         | 
| 79 93 | 
             
            summary: Logmatic output plugin for Fluent event collector
         |