美文网首页ELK文集
Logstash踩坑及输出东八区日志

Logstash踩坑及输出东八区日志

作者: 魔法学徒之歌 | 来源:发表于2018-05-22 18:37 被阅读4次

    环境:新入ELK,全新安装官网最新版6.2

    1、解决logstash启动慢(摘自网上)

    我们在部署ELK环境的时候,全部部署完毕。在启动logstash的时候发现logstash启动比较慢,但是可以启动成功。在网上寻找解决方案,找到一篇帖子写着是因为系统的熵低了,查了一下这个熵好像是用来生成随机数的。下面详细介绍。

    cat /proc/sys/kernel/random/entropy_avail

    查看返回值多少,如果小于1000,那么需要安装haveged包。

    yum install haveged -y

    systemctl start haveged

    systemctl enable haveged

    cat /proc/sys/kernel/random/entropy_avail

    可以看到数值变大了。这种方案可以加快logstash的启动时间。

    2、默认端口1024下的程序是要在root下才能使用的,所以logstash直接监听514需要用root用户启动

    vi /etc/logstash/startup.options

        LS_USER=root

        LS_GROUP=root

    /usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd

    systemctl restart logstash

    netstat -anlp|grep 514

    3、输出到elasticsearch踩坑

    output{

        elasticsearch {

            hosts => "x.x.x.x:9200"

            index => "logstash-Applog"

        }

    }

    请注意index中的名称必须是小写,否则会报错,elasticsearch收不到数据,报错如下:

    [WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"logstash-Applog-2018.05.22", :_type=>"doc", :_routing=>nil}, #], :response=>{"index"=>{"_index"=>"logstash-Applog-2018.05.22", "_type"=>"doc", "_id"=>nil, "status"=>400, "error"=>{"type"=>"invalid_index_name_exception", "reason"=>"Invalid index name [logstash-Applog-2018.05.22], must be lowercase", "index_uuid"=>"_na_", "index"=>"logstash-Applog-2018.05.22"}}}}

    4、logstash输出东八区日志

    网上查很多,都省略或者过时的配置,被坑很久,,终于成功,配置如下:

    filter {

        ruby {

            code => "event.set('mylogtime', event.get('@timestamp').time.localtime + 8*60*60)

    event.set('mylogday', event.get('@timestamp').time.localtime + 8*60*60)"

        }

        mutate {

            convert => ["mylogtime", "string"]

            gsub => ["mylogtime", "T", "-"]

            gsub => ["mylogtime", ":([\S\s]*?)Z", ""]

    convert => ["mylogday", "string"]

            gsub => ["mylogday", "T([\S\s]*?)Z", ""]

        }

    }

    output{

        file {

            gzip => true

            path => "/tmp/%{mylogday}/%{mylogtime}/%{host}-%{mylogtime}.log.gz"

            codec => plain {

            format => "%{message}"

            }

        }

    }

    以下是解释:

    在filter-ruby中建立两个新属性,mylogday和mylogtime,都取日志时间加八小时(EL中通用为0时区时间),mutate对其截取做格式化,变成两个值,一个是日期,一个是日期+小时

    在output-file中输出,输出结果如下

    # ls /tmp/2018-05-22/

    127.0.0.1-2018-05-22-17.log  127.0.0.1-2018-05-22-18.log

    如果数量太多可以再加一级目录

     path => "/tmp/%{mylogday}/%{mylogtime}/%{host}-%{mylogtime}.log.gz"

    最后,输出内容采用日志的源格式,在网上查的很多人写的是message_format => "%{message}",亲测在logstash6中无效,可能是以前版本的写法,正确写法如下:

            codec => plain {

            format => "%{message}"

            }

    相关文章

      网友评论

        本文标题:Logstash踩坑及输出东八区日志

        本文链接:https://www.haomeiwen.com/subject/ssdkjftx.html