这里是网站介绍,请在后台设置
E与K已经被安装啦,所以本文档只讲述在大数据环境中logstash的安装、测试、以及针对大数据java日志的配置。
因为大数据是jdk1.7的环境,而目前新版的logstash 5+以上的版本要求的环境是jdk1.8。故而需要安装jdk1.8,并且还要修改logstash的启动环境参数
cd /opt #下载并解压java安装包 wget http://10.104.7.176:8000/jdk-8u111-linux-x64.tar.gz #内网环境 tar -xzvf jdk-8u111-linux-x64.tar.gz #下载并解压logstash 安装包 wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz tar -xzvf logstash-6.3.2.tar.gz #修改logstash启动环境参数 (在多jdk的环境中这一步非常重要) vi bin/logstash.lib.sh export JAVA_HOME="/opt/jdk1.8.0_111" #wq 保存
测试logstash与 multiline codec插件
#查看 logstash 当前的所有插件 bin/logstash-plugin list #此指令能成功运行,说明环境参数有效,第一步操作成功。 #查看插件的相关指令详情请查阅官方文档:#https://www.elastic.co/guide/en/logstash/current/working-with-plugins.html # 得知已经存在 logstash-codec-multiline 的插件 # 测试logstash bin/logstash -e 'input { stdin {codec => multiline { pattern => "^%{TIMESTAMP_ISO8601}" negate => true what => "previous" } }} output { stdout {codec => rubydebug}}' # 相关codec multiline的配置详情 请查阅:#https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html #下面是启动后的日志若显示【The stdin plugin is now waiting for input:】表示可以在显示控制台输入测试文本。 #请复制一下文本进行测试: 2018-10-16 22:56:58.673 [AMQP Connection 121.40.177.246:5672] ERROR c.r.c.impl.ForgivingExceptionHandler -An unexpected connection driver error occured java.net.SocketException: Operation timed out (Read failed) at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read(BufferedInputStream.java:265) at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571) at java.lang.Thread.run(Thread.java:748) #若控制台输出以下结果,表示测试成功: { "host" => "hdp03", "@version" => "1", "@timestamp" => 2018-12-11T03:30:40.748Z, "tags" => [ [0] "multiline" ], "message" => "2018-10-16 22:56:58.673 [AMQP Connection 121.40.177.246:5672] ERROR c.r.c.impl.ForgivingExceptionHandler -An unexpected connection driver error occured\njava.net.SocketException: Operation timed out (Read failed)\n\tat java.net.SocketInputStream.socketRead0(Native Method)\n\tat java.net.SocketInputStream.socketRead(SocketInputStream.java:116)\n\tat java.net.SocketInputStream.read(SocketInputStream.java:171)\n\tat java.net.SocketInputStream.read(SocketInputStream.java:141)\n\tat java.io.BufferedInputStream.fill(BufferedInputStream.java:246)\n\tat java.io.BufferedInputStream.read(BufferedInputStream.java:265)\n\tat java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)\n\tat com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91)\n\tat com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164)\n\tat com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571)\n\tat java.lang.Thread.run(Thread.java:748)" }
开始配置logstash-hdp.conf
input { file { path => "/opt/log/flume-ng" codec => multiline { # Grok pattern names are valid! pattern => "^%{TIMESTAMP_ISO8601}" negate => true what => "previous" } } } filter { grok { match => { match => { "message" => "%{TIMESTAMP_ISO8601:log_time} %{GREEDYDATA:thread_name} %{LOGLEVEL:log_level} %{GREEDYDATA:message}" } } } date { match => ["timestamp","yyyy-MM-dd HH:mm:ss"] } } output { elasticsearch { hosts => ["10.66.105.43:9200"] index => "hdp-logstash-%{+YYYY.MM.dd}"} stdout { codec => rubydebug } } #grok 提供的匹配可以详见:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns #可以使用Grok Debugger工具加以辅助对其filter进行配置。工具地址:https://grokdebug.herokuapp.com/
测试一下配置文件是否正确
bin/logstash --path.settings . -f ./logstash-hdp.conf --config.test_and_exit #--path.settings 用于指定logstash的配置文件所在的目录 #-f 指定需要被检测的配置文件的路径 #--config.test_and_exit 指定检测完之后就退出,不然就会直接启动了 # "."表示当前路径 # 控制台显示 Configuration OK 即表示成功。 Configuration OK [INFO ] 2018-12-11 14:56:41.501 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
启动logstash
bin/logstash -f logstash-hdp.conf #若要后台启动并且输出日志,请使用以下命令。 nohup bin/logstash -f logstash-hdp.conf > logs/logstash-hdp.log 2>&1 & #若不要日志 [因为logs目录中包含有日志],请使用以下指令 nohup bin/logstash -f logstash-hdp.conf > /dev/null &
PS:
logstash 比较庞大,最好的打开方式是在日志被收集的服务器中使用filebeat采集日志,然后输出到共用的logstash服务器中,只有由于logstash结合filebeat无法兼容logstash-codec-multiline的问题,而不得已为之。以下介绍其优化点。
1、最简单的办法,提升当前服务器的cpu和内存配置 2、进入config目前,配置jvm.options,对jvm进行调优。比如增加最大堆最小堆内存,若jvm的对内存大于6G,可以推荐使用G1的回收器等。 3、修改pipeline.yml文件,合理增加pipeline.workers,pipeline.batch.size。注意增加了该配置参数后,堆内存也需要随之增加。
全部评论