上一节我们讲完了Elasticsearch得全部,下面我接着介绍我们得二兄弟(Logstash),废话不多说,我们开始!


Logstash安装过程:

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。

安装步骤1

执行命令 tar –zxvf logstash2.4.0.tar.gz 解压

安装步骤2

创建配置文件夹 执行命令mkdir /usr/local/logstash/etc

安装步骤3

3) 创建配置文件 vim logstash_test.conf 切记logstash的配置文件尾都尾.conf

接下来我们启动logstash:
执行命令:bin/logstash -e 'input { stdin { } } output { stdout {codec=>rubydebug} }'
返回信息如下

ELKLPDLKA的区别_ELKLPDLKA的区别


这样我们的logstash就装完了,接下来讲几条命令

Ⅰ.执行指定配置文件命令:bin/logstash –f etc/logstash_test.conf 
Ⅱ.测试配置文件是否正确:bin/logstash –t etc/logstash_test.conf

当然还有很多命令就不一 一讲了,

Logstash工作原理:

Logstash使用管道方式进行日子搜集处理和处理,有点像我们*nix系统的管道命令 aa|bb|cc,先执行aa然后bb再cc。
在logstash中,包括三个阶段
输入input --> 处理filter(不一定有) --> 输出output

ELKLPDLKA的区别_logstash_02

这种插件式的组织方式,让logstash变得易于扩展和定制,接下来我们说说logstash的配置文件里的参数吧。(以下有一部分摘抄于网络)
这里我们分为input配置项filter配置项output配置项

Input配置项

Collectd    collectd 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。
Eg: input {
    collectd {
        port => 36788 #与发送端对应的端口号
        type => collectd
    }
}
File    File就是文件的意思,读取我们的log文件等等。
Eg:input {
    file {
        path => ["/usr/local/var/*.log", "/usr/local/var/message"]
        type => "system"
        start_position => "beginning"
    }
}
Stdin   应该是 logstash 里最简单和基础的插件了,控制台输入。
Eg:input {
    stdin {
        add_field => {"key" => "value"}
        codec => "plain"
        tags => ["delete"]
        type => "std"
    }
}
Syslog  syslog 可能是运维领域最流行的数据传输协议了。
Eg:input {
  syslog {
    port => "143"
  }
}
tcp Tcp 这个就不解释了,直接上例子
input {
    tcp {
        port => 8803
        mode => "server"
        ssl_enable => false
    }
}

filter配置项

data    Eg: filter {
    grok {
        match => ["message", "%{HTTPDATE:logdate}"]
    }
    date {
        match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
    }
}
支持五种格式:ISO8601\UNIX\UNIX_MS\TAI64N
Grok    Eg: filter {
    grok {
        match => {
            "message" => "\s+(?<request_time>\d+(?:\.\d+)?)\s+"
        }
    }
}
Grok 是 Logstash 最重要的插件。你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它。
Geoip   Eg:filter {
    geoip {
        source => "message"
    }
}
GeoIP 是最常见的免费 IP 地址归类查询库
Json    Eg: filter {
    json {
        source => "message"
        target => "jsoncontent"
    }
}
JSON 解码插件
Kv  eg: kv {
            prefix => "url_"
            source => "url_args"
            field_split => "&"
            remove_field => [ "url_args", "uri", "request" ]
        }
filters/kv 插件,帮助处理不同样式的 key-value 日志
Metrics Eg: filter {
    metrics {
        meter => "error_%{status}"
        add_tag => "metric"
        ignore_older_than => 10
    }
    if "metric" in [tags] {
        ruby {
            code => "event.cancel if (event.get('[error_504][rate_1m]') * 60 > 100)"
        }
    }
}
filters/metrics插件是使用 Ruby 的Metriks 模块来实现在内存里实时的计数和采样分析
Mutate  Eg:filter {
    mutate {
        convert => ["request_time", "float"]
    }
}
filters/mutate 插件是 Logstash 另一个重要插件。它提供了丰富的基础类型数据处理能力。包括类型转换,字符串处理和字段处理等。
Ruby    Eg:filter {
    ruby {
        init => "@kname = ['client','servername','url','status','time','size','upstream','upstreamstatus','upstreamtime','referer','xff','useragent']"
        code => "
            new_event = LogStash::Event.new(Hash[@kname.zip(event.get('message').split('|'))])
            new_event.remove('@timestamp')
            event.append(new_event)"
    }
}
如果你稍微懂那么一点点 Ruby 语法的话,filters/ruby 插件将会是一个非常有用的工具。
Split   Eg: filter {
    split {
        field => "message"
        terminator => "#"
    }
}
我们通过 multiline 插件将多行数据合并进一个事件里,那么反过来,也可以把一行数据,拆分成多个事件。这就是 split 插件

output配置项

elasticsearch   Logstash 可以使用不同的协议实现完成将数据写入 Elasticsearch 的工作。
Eg: output {
    elasticsearch {
        hosts => ["192.168.0.2:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        workers => 1
        flush_size => 20000
        idle_flush_time => 10
        template_overwrite => true
    }
}
Email   见名知意发送邮件
Eg:output {
    email {
        to => "admin@website.com,root@website.com"
        cc => "other@website.com"
        via => "smtp"
        subject => "Warning: %{title}"
        options => {
            smtpIporHost       => "localhost",
            port               => 25,
            domain             => 'localhost.localdomain',
            userName           => nil,
            password           => nil,
            authenticationType => nil, # (plain, login and cram_md5)
            starttls           => true
        }
        htmlbody => ""
        body => ""
        attachments => ["/path/to/filename"]
    }
}
Exe outputs/exec 插件的运用也非常简单,如下所示,将 logstash 切割成的内容作为参数传递给命令。
Eg: output {
    exec {
        command => "sendsms.pl \"%{message}\" -t %{user}"
    }
}
File    保存成文件
Eg:output {
    file {
        path => "/path/to/%{+yyyy}/%{+MM}/%{+dd}/%{host}.log.gz"
        message_format => "%{message}"
        gzip => true
    }
}
Nagios
    outputs/nagios 插件发送数据给本机的 nagios.cmd 管道命令文件,outputs/nagios_nsca 插件则是 调用 send_nsca 命令以 NSCA 协议格式把数据发送给 nagios 服务器(远端或者本地皆可)。
filter {
    if [message] =~ /err/ {
        mutate {
            add_tag => "nagios"
            rename => ["host", "nagios_host"]
            replace => ["nagios_service", "logstash_check_%{type}"]
        }
    }
}
output {
    if "nagios" in [tags] {
        nagios { }
    }
}
Statsd  Statsd 最早是 2008 年 Flickr 公司用 Perl 写的针对 Graphite、datadog 等监控数据后端存储开发的前端网络应用,2011 年 Etsy 公司用 node.js 重构。
Eg: output {
    statsd {
        host => "statsdserver.domain.com"
        namespace => "logstash"
        sender => "%{host}"
        increment => ["httpd.response.%{status}"]
    }
}
stdout  和之前 inputs/stdin 插件一样,outputs/stdout 插件也是最基础和简单的输出插件
Eg: output {
    stdout {
        codec => rubydebug
        workers => 2
    }
}
tcp 发送网络数据
Eg: output {
    tcp {
        host  => "192.168.0.2"
        port  => 8888
        codec => json_lines
    }
}

到这里我们的logstash就算完结了.