⑴ logstash读取file是做什么用的
java种的File类的作用和用处如下:1.直接处理文件和文件系统。File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File对待,它具有附加的属性——一个可以被list()方法检测的文件名列表。2.下面的构造函数可以用来生成File对象:File(StringdirectoryPath)File(StringdirectoryPath,Stringfilename)File(FiledirObj,Stringfilename)这里,directoryPath是文件的路径名,filename是文件名,dirObj一个指定目录的File对象。下面的例子创建了三个文件:f1,f2,和f3。第一个File对象是由仅有一个目录路径参数的构造函数生成的。第二个对象有两个参数——路径和文件名。第三个File对象的参数包括指向f1文件的路径及文件名。f3和f2指向相同的文件。Filef1=newFile("/");Filef2=newFile("/","autoexec.bat");Filef3=newFile(f1,"autoexec.bat");注意:Java能正确处理UNIX和Windows/DOS约定路径分隔符。如果在Windows版本的Java下用斜线(/),路径处理依然正确。记住,如果你用Windows/DOS使用反斜线(/)的约定,你需要在字符串内使用它的转义序列(//)。Java约定是用UNIX和URL风格的斜线来作路径分隔符。
⑵ logstash 哪个版本最稳定
在配置文件
input {
file {
type => "json"
path => "/home/hadoop/xinwang_XW351464_2110"
}
}
output {
elasticsearch {
cluster => "es_master"
#manage_template => false
embedded => true
index => "huhu"
}
}
版本是logstash-1.3.2,es版本是1.1.1
错误提示
java -jar logstash-1.3.2-flatjar.jar agent -f ogstash-syslog.conf
Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see {:level=>:warn}
log4j, [2014-10-31T11:55:01.977] WARN: org.elasticsearch.discovery: [Jocasta] waited for 30s and no initial state was set by the discovery
Unable to check template. Automatic template management disabled. {:error=>"waited for [30s]",
Redhat 5.7 64bit / CentOS 5.x
JDK 1.6.0_45
logstash 1.3.2 (内带kibana)
elasticsearch 0.90.10
redis 2.8.4
对应下版本
⑶ logstash收集日志,多台机器,必须要多台机器安装部署吗
不是的,logstash有两种模式,一种是server,另一种是client,client就是把当前主机当做日志输入,需要每台都装,而server模式不需要,它是请求远程主机输入日志,也就是当java程序发现有logstash连接上时,就会把日志输进logstash
⑷ logstash 和filebeat 是什么关系
logstash 和filebeat 是什么关系
1. logstash和filebeat都是可以作为日志采集的工具,目前日志采集的工具有很多种,如fluentd, flume, logstash,betas等等。甚至最后我决定用filebeat作为日志采集端工具的时候,还有人问我为什么不用flume,logstash等采集工具。
2. logstash出现时间要比filebeat早许多,随着时间发展,logstash不仅仅是一个日志采集工具,它也是可以作为一个日志搜集工具,有丰富的input|filter|output插件可以使用。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。上送到elasticsearch。logstash详细信息可前往https://www.elastic.co/
3. logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高,网上有一篇关于其性能测试的报告。之前自己也做过和filebeat的测试对比。在采集日志方面,对CPU,内存上都要比前者高很多。LogStash::Inputs::Syslog 性能测试与优化
4. filebeat也是elastic.公司开发的,其官方的说法是为了替代logstash-forward。采用go语言开发。代码开源。elastic/beats filebeat是beats的一个文件采集工具,目前其官方基于libbeats平台开发的还有Packetbeat, Metricbeat, Winlogbeat。filebeat性能非常好,部署简单。是一个非常理想的文件采集工具。我自己采集工具也是基于beats源码进行的二次开发。
⑸ java.lang.NullPointerException: 用logstash怎么获取中异常名
java.lang.NullPointerException: 用logstash怎么获取中异常名,这是常见的空指针异常,看哈实例化没有吧,很简单的,打印下日志。
⑹ logstash filter的使用方法
Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。Logstash提供了多种多样的 input,filters,codecs和output组件,让使用者轻松实现强大的功能。
依赖条件:JAVA
Logstash运行仅仅依赖java运行环境(jre)。各位可以在命令行下运行java -version命令 显示类似如下结果:java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
为了确保成功运行Logstash建议大家使用较近期的jre版本。 可以获取开源版本的jre在:http://openjdk.java.net 或者你可以在官网下载Oracle jdk版本:http://www.oracle.com/technetwork/java/index.html 一旦jre已经成功在你的系统中安装完成,我们就可以继续了
启动和运行Logstash的两条命令示例
第一步我们先下载Logstashcurl -O https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
现在你应该有了一个叫logstash-1.4.2.tar.gz的文件了。 我们把它解压一下tar zxvf logstash-1.4.2.tar.gz
cd logstash-1.4.2
现在我们来运行一下:bin/logstash -e 'input { stdin { } } output { stdout {} }'
我们现在可以在命令行下输入一些字符,然后我们将看到logstash的输出内容:hello world
2013-11-21T01:22:14.405+0000 0.0.0.0 hello world
Ok,还挺有意思的吧... 以上例子我们在运行logstash中,定义了一个叫"stdin"的input还有一个"stdout"的output,无论我们输入什么字符,Logstash都会按照某种格式来返回我们输入的字符。这里注意我们在命令行中使用了-e参数,该参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。
让我们再试个更有意思的例子。首先我们在命令行下使用CTRL-C命令退出之前运行的Logstash。现在我们重新运行Logstash使用下面的命令:bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
我们再输入一些字符,这次我们输入"goodnight moon":goodnight moon
{
"message" => "goodnight moon",
"@timestamp" => "2013-11-20T23:48:05.335Z",
"@version" => "1",
"host" => "my-laptop"}
以上示例通过重新设置了叫"stdout"的output(添加了"codec"参数),我们就可以改变Logstash的输出表现。类似的我们可以通过在你的配置文件中添加或者修改inputs、outputs、filters,就可以使随意的格式化日志数据成为可能,从而订制更合理的存储格式为查询提供便利。
使用Elasticsearch存储日志
现在,你也许会说:"它看起来还挺高大上的,不过手工输入字符,并把字符从控制台回显出来。实际情况并不实用"。说的好,那么接下来我们将建立Elasticsearch来存储输入到Logstash的日志数据。如果你还没有安装Elasticsearch,你可以下载RPM/DEB包或者手动下载tar包,通过以下命令:curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz
tar zxvf elasticsearch-1.1.1.tar.gz
cd elasticsearch-1.1.1/
./bin/elasticsearch
⑺ 为什么要用java重写logstash
现在ELK很流行,能快速搭建一套日志采集系统。其实自己一开始就不理解为什么后端日志采集这一层logstash 是用ruby来编写的,大家都知道像ruby这样的动态语言其实比较适合做web网站的快速开发(ror),像日志采集的后端应用,需要负者日志的采集和解析,尤其像解析日志会很耗cpu的,这样数据量一大很容易碰天花板。自己负者袋鼠云后端日志的采集和解析工作,前期用ruby版本的logstash,在4g 4core 的虚拟机上每小时只能处理800w条数据,这样的性能已经是自己做了很多优化的结果。后来在git上发现了hangout一个ITjob的实习生写的一个项目也是模仿ruby版本的logstash,用java重写,但是自己认为这个项目只是个demo,说白了只能自己玩玩,所以就萌生了自己用java重写logstash的想法。java版本的logstash基本的思路是每个input插件单独维护一个线程,filter和output公用一个线程,filter和output的线程数用户都可以自定义,默认跟机器的cpu核数相同,大部分的cpu消耗都在filter这层,所以filter线程数可以自定义,只要你的机器cpu够多,就能尽可能调大。而且java版本的logstash能保证数据的强一致性,举个列子从kafka消费数据,写入elasticsearch,有可能elasticsearch集群挂了,不能写入了,ruby版本是不能写入重复几次还是不行就扔掉了,这样就导致数据的丢失,但是java版本可以通过开关打开数据强一致性的判断,如果数据是由于elasticsearch集群挂了导致数据不能写入的,就会不断的重试这个数据直到成功,不会在消费队列里面新数据,这样就不会有数据的丢失。现在的java版本的logstash插件还是比较少,不像ruby版本的这么丰富,希望有更多的人参与进来。
⑻ logstash 使用java接口作为输入吗
1、logstash本身不是使用java实现的。
2、logstash支持异构,跨语言传输可以通过插件或中间件的方式进行,比如可以使用jdbc-xxx.jar链接数据库,通过kafka获取数据等。