ELK文集

Logstash踩坑及输出东八区日志

2018-05-22  本文已影响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}"

        }

上一篇下一篇

猜你喜欢

热点阅读