1、为什么@timestamp字段在终端的显示与在Kibana上的显示不一致?

原因:对于Elasticsearch内部,时间字段统一采用UTC时间进行管理,这也是运维领域的一个通识;

解决方案:但Kibana会读取浏览器的当前时区,然后在页面上转换时间字段的显示。建议接受这个设置。

2、解析日志时,tags字段为什么会出现_grokparsefailure和_dateparsefailure?

原因:若存在log内容与 grok/date插件中的match 语从句不匹配,logstash会自动在tags中添加failure;

解决方案:出现该提示时,仔细检查logstash配置文件中对应的match语句即可。

3、在kibana页面删除数据库日志后,为什么部分被删除的数据会被重新读取?

原因:logstash是根据时间筛选数据库日志的,可根据具体情况取舍“>=”和“>”。

解决方案:statement => "SELECT * from Table t where t.createtime >= :sql_last_value"

4、多行日志内容进行合并时,怎么去掉回车符(\r)、换行符(\n)、制表符(\t)等?

原因:使用mutate插件的join属性进合并字段时,会将所有符号都合并进去;

解决方案:可以使用mutate插件的另一个属性gsub去掉这些特殊字符:

mutate {    gsub => [“module”,“\r\n\t",""]     }

elk 日志搜集 定时删除过期 elk日志丢失_字段

5、为什么多行日志的最后一条日志无法匹配显示?

原因:使用mutiline解析多行日志时,logstash会默认等到出现下一条匹配的日志时,才读取上一条日志;

解决方案:可以通过设置超时时间解决该问题:如果指定时间未出现新的日志事件,则放弃等待后面的日志。

如果是logstash,则设置Logstash: auto_flush_interval

如果是filebeat,则设置Filebeat: timeout

6、多用户并发查询时,提示search线程池拒绝执行请求:EsRejectedExecutionException[search,queue…..]。

原因:说明访问流量超过了集群中单个ES实例的处理能力,请求队列已满,ES服务端触发了保护机制,拒绝执行新的访问,并且抛出异常。

elk 日志搜集 定时删除过期 elk日志丢失_elk 日志搜集 定时删除过期_02

解决方案:可以适当将队列值设置大一些,或者提高集群配置或者在访问层控制请求数量。官方强烈建议不要更改默认值。(因为项目无集群配置,本次项目中的解决方案为代码限制用户并发,进行线性查询)

7、分页查询时,ES查询1万条以上的数据,提示“Result window is too large !”

原因:这是由ES默认的深度分页机制(返回所有再分页)造成的,为避免造成ES服务内存溢出,默认可查询的最大条数是10000条;

解决方案:更改配置:curl -XPUT http://IP:9200/_settings -d ‘{ "index" : { "max_result_window“ : 50000}},

当的确有需要查询1万条以上的数据时,官方建议采用scroll分页机制。