logstash安装及配置

环境:centos6.8、logstash-6.2.4、主机:192.168.137.60

logstash grok正则表达式参考网站:https://www.missshi.cn/api/view/blog/5ac6dea622890914df000001

(该网站只供参考,具体应用需查看logstash grok模块正则文件)

1、安装logstash

在官网下载logstash-6.2.4,另外logstash需要依赖java-1.8.0或以上版本,故先安装java,再安装logstash

安装java

    yum -y install epel-release

    yum list|grep java(在输出中寻找java-1.8.0开头的软件)

    yum -y install java-1.8.0-*(若yum源中没有可选择更新yum源或源码安装)

安装logstash

    mkdir /opt/logstash

    tar -xzf logstash-6.2.4.tar.gz -C /opt/

    mv /opt/logstash-6.2.4 /opt/logstash

解压该tar包即可直接使用

2、测试logstash

    /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout { } }'

运行起来后随意输入字符串,如:ni hao

下面会打印出相关信息,其中包含"message" => "ni hao"信息

能够正确输出信息证明logstash安装没有问题

3、编写配置文件来启动logstash(默认logstash的配置文件要自己编写)

配置文件格式:

# 输入

    input {

          ...

    }

# 过滤器

    filter {

          ...

    }

# 输出

    output {

          ...

    }

简单配置文件示例:

    mkdir /opt/logstash/etc

    cd /opt/logstash/etc

    vi logstash_ceshi.conf

        input {

            stdin { }

        }

        output {

            stdout { }

        }

该配置文件表示的是将标准输入的信息直接传送给标准输出

运行该配置文件:/opt/logstash/bin/logstash -f /opt/logstash/etc/logstash_ceshi.conf

运行后可以实现输入字符串,然后紧接着输出含有该字符串信息的输出内容,这也是一个最简单的测试配置文件

    vi logstash_logs.conf

        input {

            file {

                path => "/var/log/messages"

                type => "system"

                start_position => "beginning"

            }

        }

    output {

        stdout { codec => rubydebug }

    }

该配置文件是将/var/log/messages日志文件的内容作为标准输入,输出到标准输出中,直接在屏幕显示

4、实验测试:

编写配置文件:(读入本地日志文件,通过正则过滤后将结果输出给elasticsearch)

    input {

        file {

            path => "/opt/logs/nginx_access.log"

            type => "access"

            start_position => "beginning"

        }

    }

    filter {

        grok {

            match => {"message" => "%{IP:client}@@%{DATA:time}@@%{WORD:require}@@%{URIPATH:pa}@@%{DATA:version}@@%{NUMBER:stat}@@%{NUMBER:size}@@%{URI:url}@@%{WORD:brow}@@%{IP:server}@@%{NUMBER:time_size}"}

            }

        }

    output {

        elasticsearch {

            codec => "json"

            hosts => "192.168.137.60:9200"

        }

        stdout { }

    }

编写脚本生成模拟Apache日志文件:nginx_access.log

安装elasticsearch,配置,启动服务

通过配置文件运行logstash,观察是否正常输出过滤后的日志内容

curl http://192.168.137.60:9200/_search?pretty #检测日志是否正常推送给了elasticsearch

编写配置文件,接收filebeat传送过来的数据,通过logstash做数据删选,然后传送给elasticsearch

    input {

        beats {

            host => "192.168.137.60"

            port => 5044

            type => "beat_type"

        }

    }

    filter {

        grok {

            match => {"message" => "%{IP:client}@@%{DATA:time}@@%{WORD:require}@@%{URIPATH:pa}@@%{DATA:version}@@%{NUMBER:stat}@@%{NUMBER:size}@@%{URI:url}@@%{WORD:brow}@@%{IP:server}@@%{NUMBER:time_size}"}

            }

        }

    output {

        elasticsearch {

            codec => "json"

            hosts => "192.168.137.60:9200"

            index => "logstash-slow-%{+YYYY.MM.dd}"

        }

        stdout { }

    }

logstash配置文件常用内容解析:

    input {

        file {     #file为常用文件插件,插件内选项很多,可根据需求自行判断

            path => "/var/lib/mysql/slow.log"     #要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log

            Excude =>”*.gz”      #要排除的文件

            start_position => "beginning"      #从文件开始的位置开始读,end表示从结尾开始读

            ignore_older => 0      #多久之内没修改过的文件不读取,0为无限制,单位为秒

            sincedb_path => "/dev/null"      #记录文件上次读取位置,输出到null表示每次都从文件首行开始解析

            type => "mysql-slow"     #type字段,可表明导入的日志类型

        } 

    }

    input {

        redis {      #redis插件为常用插件,插件内选项很多,可根据需求自行判断

            batch_count => 1 #EVAL命令返回的事件数目,设置为5表示一次请求返回5条日志信息

            data_type => "list" #logstash redis插件工作方式

            key => "logstash-test-list" #监听的键值

            host => "127.0.0.1" #redis地址

            port => 6379 #redis端口号

            password => "123qwe" #如果有安全认证,此项为认证密码

            db => 0 #如果应用使用了不同的数据库,此为redis数据库的编号,默认为0。

            threads => 1 #启用线程数量

        }

    }

        filter {      # 插件很多,这里选取部分插件做讲述

            if ([message] =~ "正则表达式") {

            drop {}

        }

# 正则匹配=~,!~,包含判断in,not in ,字符串匹配==,!=,等等,匹配之后可以做任何操作,这里过滤掉匹配行,除了做过滤操作,if后面可以作任意操作,甚至可以为匹配到的任意行做单独的正则分割操作

        multiline {

            pattern => "正则表达式"

            negate => true

            what => "previous"

        }

# 多行合并,由于一些日志存在一条多行的情况,这个模块可以进行指定多行合并,通过正则匹配,匹配到的内容上面的多行合并为一条日志。

        grok {

            match => { "message" => "正则表达式" } #正则匹配日志,可以筛选分割出需要记录的字段和值

            remove_field => ["message"] # 删除不需要记录的字段

          } 

        date {

            match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"] #记录@timestamp时间,可以设置日志中自定的时间字段,如果日志中没有时间字段,也可以自己生成

            target=>“@timestamp” #将匹配的timestamp字段放在指定的字段 默认是@timestamp

        }

        ruby {

            code => "event.timestamp.time.localtime" #timestamp时区锁定

        } 

    }

    output {

        elasticsearch {      #导出到es,最常用的插件

            codec => "json" #导出格式为json

            hosts => ["127.0.0.1:9200"] #ES地址+端口

            index => "logstash-slow-%{+YYYY.MM.dd}" #导出到index内,可以使用时间变量

            user => "admin"

            password => "xxxxxx" #ES如果有安全认证就使用账号密码验证,无安全认证就不需要

            flush_size => 500 #默认500,logstash一次性攒够500条的数据在向es发送

            idle_flush_time => 1 #默认1s,如果1s内没攒够500,还是会一次性把数据发给ES

        } 

    }

    output {

        redis{      #输出到redis的插件,下面选项根据需求使用

            batch => true #设为false,一次rpush,发一条数据,true为发送一批

            batch_events => 50 #一次rpush发送多少数据

            batch_timeout => 5 #一次rpush消耗多少时间

            codec => plain #对输出数据进行codec,避免使用logstash的separate filter

            congestion_interval => 1 #多长时间进项一次拥塞检查

            congestion_threshold => 5 #限制一个list中可以存在多少个item,当数量足够时,就会阻塞直到有其他消费者消费list中的数据

            data_type => list #使用list还是publish

            db => 0 #使用redis的那个数据库,默认为0号

            host => "127.0.0.1:6379" #redis的地址和端口,会覆盖全局端口

            key => xxx #list或channel的名字

            password => xxx #redis的密码,默认不使用

            port => 6379 #全局端口,默认6379,如果host已指定,本条失效

            reconnect_interval => 1 #失败重连的间隔,默认为1s

            timeout => 5 #连接超时的时间

            workers => 1 #工作进程

        }

    }

你可能感兴趣的:(logstash安装及配置)