当前位置: 首页 > Linux

ES慢查询日志收集总结

时间:2023-04-06 06:04:03 Linux

前言在执行elasticsearch查询时,有些查询会占用大量资源,导致响应慢。这时候ES需要对慢查询进行监控。查找响应缓慢的请求。ES请求主要分为搜索和索引,ES也为这两类请求提供了慢查询日志。Searchslowlog慢速搜索日志配置可以记录慢速响应的搜索(query和fetch阶段),并将它们放入一个专门的日志文件中。该配置仅对当前分片节点有效。#vim/etc/elasticsearch/elasticsearch.yml#记录抓取慢日志index.search.slowlog.threshold.fetch.warn:1sindex.search.slowlog.threshold.fetch.info:200msindex.search.slowlog.threshold.fetch.debug:60msindex.search.slowlog.threshold.fetch.trace:50ms#记录查询慢日志index.search.slowlog.threshold.query.warn:1sindex.search.slowlog.threshold.query.debug:500ms日志级别为(warn,info,debug,trace)可以通过对日志进行分类来控制日志记录。并不是所有级别的日志都需要记录。多级日志的好处是可以根据级别减少日志数量,根据业务需要只关注关键日志。日志记录在分片级别完成,这意味着查询请求在特定分片中执行,不包括可以广播到多个分片执行的整个搜索请求。分片级日志记录的好处是它与执行操作的特定机器时间相关联。索引慢速日志索引慢速日志类似于搜索慢速日志的功能。日志文件以_index_indexing_slow_log_file.log结尾,日志和阈值可以在elasticsearch.yml文件中配置。#vim/etc/elasticsearch/elasticsearch.ymlindex.search.slowlog.threshold.index.warn:10sindex.search.slowlog.threshold.index.info:5sindex.search.slowlog.threshold.index.debug:2sindex.search.slowlog.threshold.index.trace:500msindex.search.slowlog.level:infoindex.search.slowlog.source:1000ES默认会将_source中的前1000个字符记录到slowlog中。可以用index.search.slowlog.source修改。设置为false或0以跳过完全记录源,设置为true以记录整个源(无论多大)。在elasticsearch.yml中启用了logging配置searchslowlog和indexslowlog,同样需要在logging.yml中进行配置,配置如下:#vim/etc/elasticsearch/logging.ymlindex.search.slowlog:TRACE,index_search_slow_log_fileindex.indexing。slowlog:TRACE,index_indexing_slow_log_fileadditivity:index.search.slowlog:trueindex.indexing.slowlog:truedeprecation:falseindex_search_slow_log_file:type:dailyRollingFile#日志类型,每天一个文件file:${path.logs}/${cluster.name}_index_search_slowlog.log#文件命名格式datePattern:"'.'yyyy-MM-dd"#每日备份后缀layout:type:patternconversionPattern:"[%d{ISO8601}][%-5p][%-25c]%m%n"#日志的起始格式index_indexing_slow_log_file:type:dailyRollingFilefile:${path.logs}/${cluster.name}_index_indexing_slowlog.logdatePattern:"'.'yyyy-MM-dd"layout:type:patternconversionPattern:"[%d{ISO8601}][%-5p][%-25c]%m%n"通过API动态设置慢日志。这是一个索引级别的日志,这意味着它可以独立应用于索引:PUT/my_index/_settings{"index.search.slowlog.threshold.query.warn":"10s",#如果查询比10秒慢"索引.search.slowlog.threshold.fetch.debug":"500ms",#当抓取慢于500ms时输出DEBUG日志"index.indexing.slowlog.threshold.index.info":"5s"#索引慢时输出小于5秒一个INFOlog}logstash将ES慢日志收集到ES存储中,这里只提供一个logstash配置文件,你只需要修改这个配置文件的慢查询日志路径和ES服务器集群信息就可以应用到你的ELK中环境。input{file{start_position=>"beginning"path=>["填写你的ES慢日志路径"]sincedb_path=>"./slowlogdb"}}filter{ruby{code=>"temp=event['message'].split(',');t1=temp[0]common_attr=t1.split(']')event['time']=common_attr[0].split('[')[1]event['loglevel']=common_attr[1].split('[')[1]event['slowtype']=common_attr[2].split('[')[1]event['indexname']=common_attr[3].split('[')[1]t2=temp[1]time_attr=t2.split('[')event['took_millis']=time_attr[1].split(']')[0]t3=temp[2]t4=temp[3]t5=temp[4]t6=temp[5]shards_attr=t6.split('[')event['total_shards']=shards_attr[1].split(']')[0]t7=temp[6]t8=temp[7]event['search_type']=t5event['message']=t7event['extra_source']=t8"}mutate{convert=>["took_millis","整数"]#设置take_millis的类型为整型}mutate{convert=>["total_shards","integer"]#设置total_shards的类型为整型}}output{elasticsearch{index=>"es-slowlog-%{+YYYY-MM}"hosts=>[填写你的ES集群主机列表]flush_size=>3000}}logstash调试模式输出ES慢日志含义解释每个字段的:{#慢查询语句"message"=>"source[{\"fields\":[\"_parent\",\"_source\"],\"query\":{\"bool\":{\"must\":[],\"must_not\":[],\"should\":[{\"match_all\":{}}]}},\"from\":0,\"size\":50,\"sort\":[],\"aggs\":{},\"version\":true}]","@version"=>"1","@timestamp"=>"2018-03-15T12:20:40.091Z",#慢查询日志路径"path"=>"/root/test.log",#慢查询主机名"host"=>;"c7-node1.fblinux.com",#慢查询生成时间"time"=>"2018-03-1511:26:30,318",#慢查询级别"loglevel"=>"INFO",#慢查询类型"slowtype"=>"index.search.slowlog.query",#索引名称"indexname"=>"test-2018-03",#慢查询时间,单位毫秒"took_millis"=>64,#分片总数"total_shards"=>1188,"search_type"=>"search_type[QUERY_THEN_FETCH]","extra_source"=>"extra_source[],"}版权声明:作者:西门飞冰,90后IT男,一直在北京工作,热爱运动,热爱探险,热爱旅游,全都有。先在微信公众号:民工哥的技术之路,如需转载请联系授权!微信关注农民工技术之路公众号对话回复关键字:1024即可获取最新技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程,Java实战项目,架构师综合教程,架构师实战项目,大数据,Docker容器,ELKStack,机器学习,BAT面试精讲视频等。