关于logstash导入es库的配置文件的一些理解

来源:互联网 发布:ps软件文字编辑 编辑:程序博客网 时间:2024/06/05 21:18
参数类型是否必选默认值描述add_fieldhashNo{}在事件中加入一个fieldclose_oldernumberNo3600一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是3600秒,即一个小时。【时间点短】codeccodecNo"plain"codec用于输入的数据,在数据进入到ipnput之前,可以使用input codecs对数据进行解码,从而省去了使用单独的filter来完成这项工作delimiterstringNo"\n"设置行与行之间的分隔符,默认使用”\n“discover_intervalnumberNo15设置logstash每隔多久去检查一次被监听的path下是否有新文件。默认值是15秒excludearrayNo 不想被监听的文件可以排除出去,这里跟path 一样支持glob展开ignore_oldernumberNo86400在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是86400秒,即一天max_open_filesnumberNo 配置当前input可以监控的文件(句柄)的最大值。当我们需要处理的文件大于这个参数的值时,使用close_older参数将一些文件关闭patharrayYes 用来设置要监控的input目标文件的文件路径,可以使用通配符的方式描述文件路径,如/var/log/.log。如果设置的值为/var/log/**/.log, 会在/var/log路径下,递归的寻找后缀为log的目标文件sincedb_pathstringNo 如果你不想用默认的$HOME/.sincedb(windows平台上在C:\Windows\System32\Config\systemprpfile.sincedb),可以通过这个配置定义sincedb文件到其他位置sincedb_write_intervalnumberNo15logstash 每隔多久写一次sincedb文件,默认是15秒start_positionstring, "beginning"或“end”No“end“logstash 从什么位置开始去读文件数据,默认是结束位置,也就是说logstash进程会以类似tail -F 的形式运行。如果你是要导入原始数据,把这个设置改为“beginning”,Logstash进程就从头开始读取,有点类似cat,但是读到最后一行不会终止,而是继续变成 tail -F。stat_intervalnumberNo1logstash每隔多久检查一次被监听文件的状态(是否有更新),默认是1秒tagsarrayNo 添加一个任意的数字作为当前事件的标签,这个标签对我们后续的工作会有帮助typestringNo input的所有事件都需要添加一个type属性,types属性主要在filter场景中使用。type会作为事件的一部分进行存储,因此后续也可以用type作为关键字在kibana中搜索



这个表格对于配置文件来说已经挺全的了,说一下自己的理解和实验得到的结果。logstash是默认每隔多少秒监听你要导入的文件是否增添了新的内容的。对于一个全新的待导入的文件,他会从头开始导入,并且创建一个 <文件inode,已写入的字节数>这样的一个记录,方便记录已经导入了多少数据到es库中,同时sincedb_path可以指定这个记录存放的位置。但是如果你把这个位置删了,再运行一遍logstash,好像没有什么影响,它照样 能按照之前的情况给你重新把记录拷贝了,所以我把索引、sindb_path指定的文件删除,再重新运行logstash,想重新导入原来删除的文件到es库里头,没有任何变化,可能logstash认为我们已经把这个文件导了多少字节进入es库了吧。所以这种情况,我觉得应该是把文件拷贝一份,导入拷贝后的文件入到es库里头,因为拷贝后的文件inode就变化了嘛。别的方法暂时还没想到,但是肯定有。

关于使用logstash将日志数据增量导入es库中,对于全新的日志文件,logstash是从开头开始导入的,但是对于已经写入一部分的日志文件,过了一段时间后日志文件又写入了一些数据,logstash能够自动监测到日志文件的变化并进行导入es库,它根据的机制应该就是<文件inode,已写入的字节数>这样的一个记录。自动进行监听,每当发现已写入的字数小于文件的大小了,就开始自动进行导入,从已写入的字节数之后的字节进行导入。

所以这部分的配置文件,我认为最终要的是 input部分 要有path(指明文件路径),codec=>json(解析日志的json格式),start_postion没有必要了(因为对于全新的文件他会自动从头开始导入,而对于已经导入的文件则会依据那个记录从上次导入之后的位置对新的东西导入),sindb_path也没有必要(除非是指定/dev/null这样的);output部分:指明elasticsearch 以及他的host和index就行了 ,stdout部分可以指明一下codec=>rubydebug作为验证导入的文件导入没

阅读全文
0 0