Menu

Logstash Install

module.exports = header: 'Logstash Install', handler: (options) ->

IPTables

ServicePortProtoInfo
Pipeline portcustomhttphbase.master.port

IPTables rules are only inserted if the parameter "iptables.action" is set to "start" (default value).

  @each options.pipelines, (opts) ->
    name = opts.key
    pipeline = opts.value
    @tools.iptables
      header: 'IPTables'
      if: options.iptables
      rules: [
        { chain: 'INPUT', jump: 'ACCEPT', dport: pipeline.port, protocol: 'tcp', state: 'NEW', comment: "Pipeline #{name}" }
      ]

Identities

  @system.group header: 'Group', options.group
  @system.user header: 'User', options.user

Install

  @call header: 'Packages', ->
    @file.download
      source: options.source
      target: "/var/tmp/logstash-#{options.version}.rpm"
    @system.execute
      cmd: "yum localinstall -y --nogpgcheck /var/tmp/logstash-#{options.version}.rpm"
      unless_exec: "rpm -q --queryformat '%{VERSION}' logstash | grep '#{options.version}'"

Config

  @call header: 'Configuration', ->
    @file.render
      header: 'logstash.yml'
      target: "#{options.conf_dir}/logstash.yml"
      source: "#{__dirname}/../resources/logstash.yml.j2"
      local: true
      context: options
      # uid: options.user.name
      # gid: options.hadoop_group.name
      mode: 0o644
      backup: true
      # eof: true

Pipelines

  @call header: 'Pipelines', ->
    @each options.pipelines, (opts) ->
      name = opts.key
      pipeline = opts.value
      content = """
      input {
        #{ if pipeline.inputs.redis?
          """
          redis {
              host => "#{pipeline.inputs.redis.host}"
              port => "#{pipeline.inputs.redis.port}"
              data_type => "list"
              key => "#{pipeline.inputs.redis.key}"
            }
          """
        else ''}
        #{ if pipeline.inputs.filebeat?
          """
          beats { port => "#{pipeline.inputs.filebeat.port}" }
          """
        else ''}
      }
      filter {
        grok {
            match => { #{pipeline.match} }
        }
      }
      output {
        #{ if pipeline.outputs.es?
          """
          elasticsearch { hosts => #{pipeline.outputs.es.hosts} }
          """
          }
        #{ if pipeline.outputs.solr?
          """
          solr_http { solr_url => "#{pipeline.outputs.solr.host}" }
          """
          }
      }
      """
      @file
        target: "#{options.conf_dir}/conf.d/#{name}.conf"
        content: content
        backup: true

Solr http plugin

  @call header: 'solr_http plugin install', ->        
    @file.download
      source: "#{__dirname}/../resources/logstash-offline-plugins-6.1.1.zip"
      target: "#{options.install_dir}/logstash/add_gems/logstash-offline-plugins-6.1.1.zip"
    @system.execute
      cmd: "#{options.install_dir}/logstash/bin/logstash-plugin install file://#{options.install_dir}/logstash/add_gems/logstash-offline-plugins-6.1.1.zip"
    @file
      header: 'Remove iso8601 timestamp conversion'
      target: "#{options.install_dir}/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-solr_http-3.0.4/lib/logstash/outputs/solr_http.rb"
      write: [
        match: /.*document\[\"@timestamp\"\] = document\[\"@timestamp\"\]\.iso8601.*/
        replace: ""
      ]

Dependencies

# mkcmd = require '../lib/mkcmd'