日志服务索引那些事儿

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志服务索引那些事儿 简介 日志是排查问题最基本也是最重要的信息,排查问题原始的方式是登录机器查看日志,分布式场景下登录所有的机器代价太大,不利于问题排查。所以需要将日志集中采集,而且要快速查询到问题日志。

简介

日志是排查问题最基本也是最重要的信息,排查问题原始的方式是登录机器查看日志,分布式场景下登录所有的机器代价太大,不利于问题排查。所以需要将日志集中采集,而且要快速查询到问题日志。所以这里选择的是日志服务来对日志进行处理。
日志服务(Log Service,简称 LOG)是针对日志类数据的一站式服务,在阿里巴巴集团经历大量大数据场景锤炼而成。无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能,可以提升运维、运营效率,建立 DT 时代海量日志处理能力。
这里主要总结了日志服务中索引相关的一些注意事项。日志服务的索引分为全文索引和字段索引两类,是日志服务查询所必须的;
全文索引,以文本形式对所有的字段进行建索引,Key和Value都是普通文本,都可查询;
字段索引,先将写入日志根据Key进行区分,然后字段内根据分词符分割,在查询时要指定Key的名称,当有某个字段配置了字段索引时,该字段上的全文索引不生效。

索引与查询关系概览:

开启字段索引和统计可以支持查询、分析、可视化报表及报警等功能;如果未创建任何索引,则没办法使用查询功能,只能通过预览、消费的方式查看数据。

预览 查找 SQL分析 使用场景
原始数据(未开启索引) 支持 不支持 不支持 对接流计算+实时消费+转存(投递)
全文索引 支持 整行日志作为Text检索 不支持 对接流计算+实时消费+转存(投递)+ 查询 
字段索引 支持 字段可以配置为多种数据类型,包括Text、Double、Long等,其中数值类型支持大小比较 支持对字段进行SQL92分析 对接流计算+实时消费+转存(投递)+ 查询 + 分析 + 监控报表 + 报警

注意事项:

  1. SQL分析依赖字段索引的统计功能,如果未开启字段索引是不能使用SQL对日志进行分析的。
  2. 索引修改后只对新的数据生效,历史数据只能基于当时的索引格式查询,如果当时未开启任何索引,这些将无法查询,只能通过消费、预览的方式获取。
  3. 分词符的多少不影响索引量,可以放心根据需求设置分词符;
  4. 开启全文索引之后再创建字段索引不会额外增加索引量;
  5. 开启字段索引的统计功能不会增加索引量,如果有SQL分析的需求必须要开启统计功能。
  6. 分词符不支持中文字符,日志中包含中文时开启包含中文选项,之后采集到的数据会自动按照中文分词。
  7. 模糊查询最多返回100个符合关键词的日志,如果对结果的准确度和完整性要求很高可以通过SQL的 like 语法来进行模糊查询。
  8. 全文索引和字段索引同时开启时,该字段上的全文索引不生效。

不同索引的区别:

索引量:

原始数据(未开启索引): 不产生任何索引;
全文索引: 对全部日志内容和字段创建文本类型索引,产生全量索引;
字段索引: 针对需要查询分析的字段创建索引,即使全部字段开启索引和统计,索引量也不会超过全文索引。

由于全文索引以文本形式对所有的字段进行建索引,Key和Value在查询时都作为普通文本。对于long/double类型的字段,Key的长度不计算在索引流量中,如果设置了全文索引,Key和Value作为text类型存储,Key也会被计入在索引流量中。所以开启了字段索引后,索引流量相较于仅开启全文索引要低。

不同索引混用查询策略:

全文索引可以和字段索引同时开启,配置字段索引之后,在查询时要指定Key的名称,当有某个字段配置了字段索引时,该字段上的全文索引不生效。
新采集到的数据有字段索引的会优先按照字段索引进行分词、查询;
老数据依然按照当时的索引状态进行查询;如果当时未开启任何索引,则不支持查询,只能通过消费的方式获取。

分词符在查询中的作用:

名词解析:

分词符: 根据指定单字符,将日志内容切分成多个关键词,可以根据拆分出的关键词查询日志。不支持中文字符作为分词符,开启包含中文选项后会自动为中文内容分词,只对开启之后采集到的数据生效,之后日志服务会支持重建索引功能,之前设错索引的数据就可以查询到了。

分词使用:

image.png

分词符冲突:

全文索引和字段索引同时生效时,字段索引优先,该字段上的全文索引的一切设置(例如:分词符)就会失效,需要在字段索引上重新配置。

如何修改索引:

首先 登录 日志服务控制台 ,之后可以使用下面两种方式的任一种来修改索引。

  1. 每次创建logtail采集配置后,都可以对索引进行操作;

image.png

2.  查询页面对索引进行修改,如图:
image.png

如何预览数据:

未创建任何索引时,只能通过页面预览或者将消费数据查看日志。
image.png

示例

创建全文索引默认分词符:

如图一是全文索引的查询效果
如图二所示由于默认分词符不包含 . (英文句号),所以没办法直接搜索sls;
图一:
image.png

图二:
image.png

修改分词符,为其添加 . 之后,重新上传相同日志搜索结果如图;修改索引之后只对后面采集进来的数据生效,历史数据依然按照之前的索引,不过之后日志服务会支持重建索引,这样之前设错索引的数据也能查询到了。
image.png

添加content字段索引设置 . 为分词符:

可以根据content来过滤日志,分词符效果一致,范围更加精确;而且可以使用SQL进行模糊查询分析。未创建字段索引时没办法精确到具体Key来过滤,如图一;创建字段索引之后可以根据Key查询数据,如图三;
图一:
image.png
创建字段索引并设置 . 作为分词符截图如下:
image.png
可以看到条件加上content: sls之后只返回了添加content索引之后写入的数据,之前的数据由于没有content字段也不会被查询到,name字段中的sls也不会飘红。
图三:
image.png

将content中分词符的 . 去除之后:

历史数据仍然可以按照之前的分词进行搜索,不过飘红会失效。
image.png
修改索引之后写入的数据必须按照新的分词进行搜索;索引只对生效时采集到的数据有效,不过之后日志服务会支持重建索引,这样之前设错索引的数据也能查询到了。
image.png

模糊查询:

日志服务支持单词模糊查询,指定一个64个字符以内的词,在词的中间或者末尾加上模糊查询运算符,即*?*? 不能在开头使用,且模糊查询最多返回100个符合关键词的日志。
由于以上关于模糊查询的限制,通过 not 来过滤模糊条件时,返回的结果是有可能不准确的;多个模糊条件一起查询时也有可能无法返回符合条件的数据。如果对结果的准确度和完整性要求很高可以通过SQL的 like 语法来进行模糊查询,SQL分析是会查询全量数据的。
例:content: sls 改为 | select content where content like '%sls%'

索引类型变化对查询的影响:

首先为status设置text类型索引,然后写入数据,查询结果如图:
image.png
再将该字段类型改为long类型,查询语法与之前会发生变化,可以使用数值型的大小比较,而之前的text类型日志这种方法是过滤不出的,依然可以使用之前的方法查询:
image.png

image.png

现在试下从long类型改为text,下面是索引类型为long时写入并查询的结果,如图:
image.png
修改索引类型为text后,通过status字段查询找不到该条日志,如图:
image.png
可以看到上面截图中的时间是不一致的,是修改索引之后又写入的一条日志,之前long类型的日志由于索引类型的问题没办法再通过该字段进行查询,之后日志服务会支持重建索引,像这样设错索引的数据也能查询到了。
**

JSON类型索引配置示例:

日志服务支持在索引中将字段设置为JSON类型,支持JSON格式日志的查询和分析。JSON类型索引的详细配置及介绍可以参考 文档 。配置及查询语法如下图:
索引配置:
image.png
查询:
image.png
SQL:
image.png
上图中的日志总条数为 | 前的条件过滤之后的数量;如图中SQL所示,在SQL分析时JSON字段需要使用双引号括起来,SQL中的字符串则使用单引号

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
存储 JSON 应用服务中间件
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
185 0
|
4月前
|
存储 运维 Kubernetes
在k8S中,日志索引的作用是什么?
在k8S中,日志索引的作用是什么?
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
78 2
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
264 0
|
7月前
|
SQL 缓存 关系型数据库
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
134 0
|
存储 关系型数据库 MySQL
MySQL学习笔记-日志和索引相关问题小结
MySQL学习笔记-日志和索引相关问题小结
75 0
|
存储 JSON 监控
filebeat收集多个域名网站日志并存储到不同的es索引库(五)
filebeat收集多个域名日志并创建不同索引 1.为什么要针对不同的应用系统创建不同的索引 公司生产环境中一台机器上一定会运行着多个域名的应用,web应用也是集群的方式,如果filebeat收集来的日志都是分散存储,且在es上建立的索引也都是分散的,这样不利于日志的聚合汇总,因此就需要把同一种应用的不同机器上的日志全部采集过来存储到一个索引库中,在kibana根据各种条件去匹配
763 0
filebeat收集多个域名网站日志并存储到不同的es索引库(五)
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(一)
数据库基本概念(SQL,索引,视图,事务,日志等)(一)
241 0
|
对象存储 索引 消息中间件
备份日志和索引到阿里云OSS
备份日志和索引到阿里云OSS

相关产品

  • 日志服务