logstash-input-remote_proc 0.1.7 → 0.1.8
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/CHANGELOG.md +3 -0
- data/USAGE.md +48 -46
- data/lib/logstash/inputs/remote_proc.rb +57 -49
- data/logstash-input-remote_proc.gemspec +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7c02140e9d9c51731875a6506a1bdd0186c50b5d
         | 
| 4 | 
            +
              data.tar.gz: fcd1d2f715390bba9b4bb71fed8c065d968e5b94
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f36c5471a1bf132ae0ef534c931c241e29e7ac1af2ead1f21a24d1233f8f12d14506cf686fa89349d47c111c86c0af03274e78fac23c75c6e88f913a0df81157
         | 
| 7 | 
            +
              data.tar.gz: d27e517f6d4fbf25c20ece9eb6d8e42978c3c9c8305827593565b376c032013f2edba659b222bce91cd57fd810270a9deb82b173968c813ad4f6d6ca25b2ac92
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/USAGE.md
    CHANGED
    
    | @@ -18,6 +18,8 @@ servers => [ | |
| 18 18 | 
             
                    gateway_username => ${USER} || ${USERNAME} || 'nobody' # :string (default to unix $USER)
         | 
| 19 19 | 
             
                    gateway_password => ...                                # :string (needed if gateway_host is set and no 'ssh_private_key' is given), empty by default
         | 
| 20 20 | 
             
                    gateway_ssh_private_key => ...                         # :path (needed if no 'gateway_password'), empty by default
         | 
| 21 | 
            +
                    system_reader => "cat"                                 # :string
         | 
| 22 | 
            +
                    proc_prefix_path => "/proc"                            # :string
         | 
| 21 23 | 
             
                }
         | 
| 22 24 | 
             
            ]
         | 
| 23 25 | 
             
            ```
         | 
| @@ -27,7 +29,7 @@ When no password is given, the private key path for both `host` and `gateway_hos | |
| 27 29 | 
             
            **Default values for `proc_list`**
         | 
| 28 30 |  | 
| 29 31 | 
             
            ```logstash
         | 
| 30 | 
            -
            proc_list => ["cpuinfo", "meminfo", "loadavg", "vmstat", "diskstats", "netdev", "netwireless", "mounts", "crypto", "sysvipcshm"]
         | 
| 32 | 
            +
            proc_list => ["cpuinfo", "stat", "meminfo", "loadavg", "vmstat", "diskstats", "netdev", "netwireless", "mounts", "crypto", "sysvipcshm"]
         | 
| 31 33 | 
             
            ```
         | 
| 32 34 |  | 
| 33 35 | 
             
            If `proc_list` is not declared all of them are processed. An equivalent declaration is `proc_file => ["_all"]`.
         | 
| @@ -35,75 +37,75 @@ If `proc_list` is not declared all of them are processed. An equivalent declarat | |
| 35 37 | 
             
            ### SSH server with default values and authenticate by private key
         | 
| 36 38 |  | 
| 37 39 | 
             
            ```javascript
         | 
| 38 | 
            -
             | 
| 40 | 
            +
            input { remote_proc { servers => [{}] } }
         | 
| 39 41 | 
             
            ```
         | 
| 40 42 |  | 
| 41 43 | 
             
            ### SSH server with default values and authenticate by private key for `cpuinfo` and `meminfo`
         | 
| 42 44 |  | 
| 43 45 | 
             
            ```javascript
         | 
| 44 | 
            -
             | 
| 46 | 
            +
            input { remote_proc { servers => [{}] proc_list => ["cpuinfo", "meminfo"] } }
         | 
| 45 47 | 
             
            ```
         | 
| 46 48 |  | 
| 47 49 | 
             
            ### With SSH server `host`, `port` and `username` and authenticate by private key
         | 
| 48 50 |  | 
| 49 51 | 
             
            ```javascript
         | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
                    }
         | 
| 52 | 
            +
            input {
         | 
| 53 | 
            +
                remote_proc {
         | 
| 54 | 
            +
                    servers => [
         | 
| 55 | 
            +
                        { host => "domain.com" port => 22 username => "fenicks" }
         | 
| 56 | 
            +
                    ]
         | 
| 56 57 | 
             
                }
         | 
| 58 | 
            +
            }
         | 
| 57 59 | 
             
            ```
         | 
| 58 60 |  | 
| 59 61 | 
             
            ### With SSH server `host`, `port` and `username` and authenticate by a specific private key file
         | 
| 60 62 |  | 
| 61 63 | 
             
            ```javascript
         | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
                    }
         | 
| 64 | 
            +
            input {
         | 
| 65 | 
            +
                remote_proc {
         | 
| 66 | 
            +
                    servers => [
         | 
| 67 | 
            +
                        {
         | 
| 68 | 
            +
                            host => "domain.com"
         | 
| 69 | 
            +
                            port => 22
         | 
| 70 | 
            +
                            username => "fenicks"
         | 
| 71 | 
            +
                            ssh_private_key => "${HOME}/.ssh/id_rsa_domain.com"
         | 
| 72 | 
            +
                        }
         | 
| 73 | 
            +
                    ]
         | 
| 73 74 | 
             
                }
         | 
| 75 | 
            +
            }
         | 
| 74 76 | 
             
            ```
         | 
| 75 77 |  | 
| 76 78 | 
             
            ### With SSH server `host`, `port` and `username` and authenticate by password
         | 
| 77 79 | 
             
            ```javascript
         | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
                    }
         | 
| 80 | 
            +
            input {
         | 
| 81 | 
            +
                remote_proc {
         | 
| 82 | 
            +
                    servers => [
         | 
| 83 | 
            +
                        {
         | 
| 84 | 
            +
                            host => "domain.com"
         | 
| 85 | 
            +
                            port => 22
         | 
| 86 | 
            +
                            username => "fenicks"
         | 
| 87 | 
            +
                            password => "my_password!"
         | 
| 88 | 
            +
                        }
         | 
| 89 | 
            +
                    ]
         | 
| 89 90 | 
             
                }
         | 
| 91 | 
            +
            }
         | 
| 90 92 | 
             
            ```
         | 
| 91 93 | 
             
            ### With SSH Gateway by with private key file and SSH `host` and `password`
         | 
| 92 94 | 
             
            ```javascript
         | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
                    }
         | 
| 95 | 
            +
            input {
         | 
| 96 | 
            +
                remote_proc {
         | 
| 97 | 
            +
                    servers => [
         | 
| 98 | 
            +
                        {
         | 
| 99 | 
            +
                            host => "domain.com"
         | 
| 100 | 
            +
                            port => 22
         | 
| 101 | 
            +
                            username => "fenicks"
         | 
| 102 | 
            +
                            password => "my_password!"
         | 
| 103 | 
            +
                            gateway_host => "gateway.com"
         | 
| 104 | 
            +
                            gateway_username => "username_passemuraille"
         | 
| 105 | 
            +
                            gateway_port => 4242
         | 
| 106 | 
            +
                            gateway_ssh_private_key => "/path/to/private/key"
         | 
| 107 | 
            +
                        }
         | 
| 108 | 
            +
                    ]
         | 
| 108 109 | 
             
                }
         | 
| 110 | 
            +
            }
         | 
| 109 111 | 
             
            ```
         | 
| @@ -63,24 +63,29 @@ module LogStash | |
| 63 63 | 
             
                    'gateway_port' => 22, # :number
         | 
| 64 64 | 
             
                    'gateway_username' => ENV['USER'] || ENV['USERNAME'] || 'nobody', # :string (default to unix $USER)
         | 
| 65 65 | 
             
                    'gateway_password' => nil, # :string
         | 
| 66 | 
            -
                    'gateway_ssh_private_key' => nil # :string
         | 
| 66 | 
            +
                    'gateway_ssh_private_key' => nil, # :string
         | 
| 67 | 
            +
                    'system_reader' => 'cat', # :string
         | 
| 68 | 
            +
                    'proc_prefix_path' => '/proc' # :string
         | 
| 67 69 | 
             
                  }.freeze
         | 
| 68 70 |  | 
| 69 71 | 
             
                  # Liste of commands for each `/proc` endpoints.
         | 
| 70 72 | 
             
                  COMMANDS = {
         | 
| 71 | 
            -
                    cpuinfo: ' | 
| 72 | 
            -
                    stat: ' | 
| 73 | 
            -
                    meminfo: ' | 
| 74 | 
            -
                    loadavg: ' | 
| 75 | 
            -
                    vmstat: ' | 
| 76 | 
            -
                    diskstats: ' | 
| 77 | 
            -
                    netdev: ' | 
| 78 | 
            -
                    netwireless: ' | 
| 79 | 
            -
                    mounts: ' | 
| 80 | 
            -
                    crypto: ' | 
| 81 | 
            -
                    sysvipcshm: ' | 
| 73 | 
            +
                    cpuinfo: '%{system_reader} %{proc_prefix_path}/cpuinfo',
         | 
| 74 | 
            +
                    stat: '%{system_reader} %{proc_prefix_path}/stat',
         | 
| 75 | 
            +
                    meminfo: '%{system_reader} %{proc_prefix_path}/meminfo',
         | 
| 76 | 
            +
                    loadavg: '%{system_reader} %{proc_prefix_path}/loadavg',
         | 
| 77 | 
            +
                    vmstat: '%{system_reader} %{proc_prefix_path}/vmstat',
         | 
| 78 | 
            +
                    diskstats: '%{system_reader} %{proc_prefix_path}/diskstats',
         | 
| 79 | 
            +
                    netdev: '%{system_reader} %{proc_prefix_path}/net/dev',
         | 
| 80 | 
            +
                    netwireless: '%{system_reader} %{proc_prefix_path}/net/wireless',
         | 
| 81 | 
            +
                    mounts: '%{system_reader} %{proc_prefix_path}/mounts',
         | 
| 82 | 
            +
                    crypto: '%{system_reader} %{proc_prefix_path}/crypto',
         | 
| 83 | 
            +
                    sysvipcshm: '%{system_reader} %{proc_prefix_path}/sysvipc/shm'
         | 
| 82 84 | 
             
                  }.freeze
         | 
| 83 85 |  | 
| 86 | 
            +
                  # By default call all procfs method
         | 
| 87 | 
            +
                  DEFAULT_PROC_LIST = ['_all'].freeze
         | 
| 88 | 
            +
             | 
| 84 89 | 
             
                  config_name 'remote_proc'
         | 
| 85 90 |  | 
| 86 91 | 
             
                  # If undefined, Logstash will complain, even if codec is unused.
         | 
| @@ -121,7 +126,6 @@ module LogStash | |
| 121 126 |  | 
| 122 127 | 
             
                    @ssh_sessions = []
         | 
| 123 128 | 
             
                    @ssh_gateways = []
         | 
| 124 | 
            -
                    @commands = ['_all']
         | 
| 125 129 |  | 
| 126 130 | 
             
                    configure!
         | 
| 127 131 | 
             
                  end # def register
         | 
| @@ -130,10 +134,10 @@ module LogStash | |
| 130 134 | 
             
                    # we can abort the loop if stop? becomes true
         | 
| 131 135 | 
             
                    until stop?
         | 
| 132 136 | 
             
                      @ssh_sessions.each do |ssh|
         | 
| 133 | 
            -
                         | 
| 134 | 
            -
                           | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            +
                        ssh.open_channel do |chan|
         | 
| 138 | 
            +
                          chan.connection.options[:properties]['_commands'].each do |method, command|
         | 
| 139 | 
            +
                            result_data = String.new('')
         | 
| 140 | 
            +
                            error_data = String.new('')
         | 
| 137 141 | 
             
                            chan.exec(command) do |ch, success|
         | 
| 138 142 | 
             
                              next unless success
         | 
| 139 143 | 
             
                              # "on_data" called when the process writes to stdout
         | 
| @@ -142,30 +146,30 @@ module LogStash | |
| 142 146 | 
             
                              ch.on_extended_data { |_ch, _type, data| error_data << data }
         | 
| 143 147 | 
             
                              ch.on_close(&:close)
         | 
| 144 148 | 
             
                            end
         | 
| 149 | 
            +
                            chan.wait
         | 
| 150 | 
            +
                            unless error_data.empty?
         | 
| 151 | 
            +
                              error_data.chomp!
         | 
| 152 | 
            +
                              error_data = error_data.force_encoding('UTF-8')
         | 
| 153 | 
            +
                              @logger.warn(error_data)
         | 
| 154 | 
            +
                              next
         | 
| 155 | 
            +
                            end
         | 
| 156 | 
            +
                            next if result_data.empty?
         | 
| 157 | 
            +
                            result = send("proc_#{method}",
         | 
| 158 | 
            +
                                          result_data.force_encoding('UTF-8'))
         | 
| 159 | 
            +
                            next if result.empty?
         | 
| 160 | 
            +
                            event = LogStash::Event.new(
         | 
| 161 | 
            +
                              method => result,
         | 
| 162 | 
            +
                              host: @host,
         | 
| 163 | 
            +
                              type: @type || "system-#{method}",
         | 
| 164 | 
            +
                              metric_name: "system-#{method}",
         | 
| 165 | 
            +
                              remote_host: chan.connection.options[:properties]['host'],
         | 
| 166 | 
            +
                              remote_port: chan.connection.options[:properties]['port'],
         | 
| 167 | 
            +
                              command: command,
         | 
| 168 | 
            +
                              message: result_data
         | 
| 169 | 
            +
                            )
         | 
| 170 | 
            +
                            decorate(event)
         | 
| 171 | 
            +
                            queue << event
         | 
| 145 172 | 
             
                          end
         | 
| 146 | 
            -
                          channel.wait
         | 
| 147 | 
            -
                          unless error_data.empty?
         | 
| 148 | 
            -
                            error_data.chomp!
         | 
| 149 | 
            -
                            error_data = error_data.force_encoding('UTF-8')
         | 
| 150 | 
            -
                            @logger.warn(error_data)
         | 
| 151 | 
            -
                            next
         | 
| 152 | 
            -
                          end
         | 
| 153 | 
            -
                          next if result_data.empty?
         | 
| 154 | 
            -
                          result = send("proc_#{method}",
         | 
| 155 | 
            -
                                        result_data.force_encoding('UTF-8'))
         | 
| 156 | 
            -
                          next if result.empty?
         | 
| 157 | 
            -
                          event = LogStash::Event.new(
         | 
| 158 | 
            -
                            method => result,
         | 
| 159 | 
            -
                            host: @host,
         | 
| 160 | 
            -
                            type: @type || "system-#{method}",
         | 
| 161 | 
            -
                            metric_name: "system-#{method}",
         | 
| 162 | 
            -
                            remote_host: channel.connection.options[:properties]['host'],
         | 
| 163 | 
            -
                            remote_port: channel.connection.options[:properties]['port'],
         | 
| 164 | 
            -
                            command: command,
         | 
| 165 | 
            -
                            message: result_data
         | 
| 166 | 
            -
                          )
         | 
| 167 | 
            -
                          decorate(event)
         | 
| 168 | 
            -
                          queue << event
         | 
| 169 173 | 
             
                        end
         | 
| 170 174 | 
             
                        ssh.loop
         | 
| 171 175 | 
             
                      end # @ssh_sessions block
         | 
| @@ -181,16 +185,25 @@ module LogStash | |
| 181 185 | 
             
                  private
         | 
| 182 186 |  | 
| 183 187 | 
             
                  # Return only valide property keys.
         | 
| 184 | 
            -
                  def prepare_servers!( | 
| 185 | 
            -
                     | 
| 186 | 
            -
                     | 
| 188 | 
            +
                  def prepare_servers!(server)
         | 
| 189 | 
            +
                    server.select! { |k| SERVER_OPTIONS.include?(k) }
         | 
| 190 | 
            +
                    server.merge!(SERVER_OPTIONS) { |_key_, old, _new_| old }
         | 
| 191 | 
            +
                    cmds = if (@proc_list - ['_all']).empty?
         | 
| 192 | 
            +
                             COMMANDS.dup
         | 
| 193 | 
            +
                           else
         | 
| 194 | 
            +
                             COMMANDS.select { |k, _| @proc_list.include?(k.to_s) }
         | 
| 195 | 
            +
                           end
         | 
| 196 | 
            +
                    # Replace 'system_reader' and 'proc_prefix_path' in all commands
         | 
| 197 | 
            +
                    server['_commands'] = cmds.each do |k, v|
         | 
| 198 | 
            +
                      cmds[k] = v % { system_reader: server['system_reader'],
         | 
| 199 | 
            +
                                      proc_prefix_path: server['proc_prefix_path'] }
         | 
| 200 | 
            +
                    end.freeze
         | 
| 187 201 | 
             
                  end
         | 
| 188 202 |  | 
| 189 203 | 
             
                  # Prepare all server configuration
         | 
| 190 204 | 
             
                  def configure!
         | 
| 191 205 | 
             
                    @servers.each do |s|
         | 
| 192 206 | 
             
                      prepare_servers!(s)
         | 
| 193 | 
            -
             | 
| 194 207 | 
             
                      session_options = { properties: s }
         | 
| 195 208 | 
             
                      session_options[:port] = s['port'] if s['port']
         | 
| 196 209 | 
             
                      session_options[:password] = s['password'] if s['password']
         | 
| @@ -218,11 +231,6 @@ module LogStash | |
| 218 231 | 
             
                                                        session_options)
         | 
| 219 232 | 
             
                      end
         | 
| 220 233 | 
             
                    end
         | 
| 221 | 
            -
                    @commands = if (@proc_list - ['_all']).empty?
         | 
| 222 | 
            -
                                  COMMANDS
         | 
| 223 | 
            -
                                else
         | 
| 224 | 
            -
                                  COMMANDS.select { |k, _| @proc_list.include?(k.to_s) }
         | 
| 225 | 
            -
                                end
         | 
| 226 234 | 
             
                  end
         | 
| 227 235 |  | 
| 228 236 | 
             
                  # Process SYSVIPCSHM data
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |s|
         | 
| 2 2 | 
             
              s.name = 'logstash-input-remote_proc'
         | 
| 3 | 
            -
              s.version = '0.1. | 
| 3 | 
            +
              s.version = '0.1.8'
         | 
| 4 4 | 
             
              s.licenses = ['Apache-2.0']
         | 
| 5 5 | 
             
              s.summary = 'This Logstash plugin collects PROCFS metrics through remote SSH servers.'
         | 
| 6 6 | 
             
              s.description = 'This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: logstash-input-remote_proc
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Christian Kakesa
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-11- | 
| 11 | 
            +
            date: 2016-11-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              requirement: !ruby/object:Gem::Requirement
         |