创建索引

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

如需对采集到Logstore中的日志进行查询和分析,您必须首先创建索引。本文为您介绍日志服务索引概念、索引类型、配置索引示例和步骤。

为什么需要创建索引

通常我们使用关键词,从原始日志内容中检索想要的内容,例如检索出包含Chrome的如下日志内容:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/192.0.2.0 Safari/537.2

如果不进行切分,该日志文本会作为一个整体,不能和关键词Chrome完全对应,因此不会被日志服务Project检索到。为了便于检索,需要将日志切分成独立、可搜索的词。日志切分由分词符实现,这些符号决定了日志文本内容被切分的位置。以该日志为例,使用分词符\n\t\r,;[]{}()&^*#@~=<>/\?:'"进行分割,得到的词是Mozilla5.0WindowsNT6.1AppleWebKit537.2KHTMLlikeGeckoChrome192.0.2.0Safari537.2

日志服务Project基于这些切分出的关键词建立索引。创建索引后,您才能对日志数据进行查询和分析。

索引类型

  • 全文索引

    重要

    分词符不支持中文,开启包含中文选项,日志服务会自动按照中文分词。

    如果只配置全文索引,则只能使用查询功能。更多信息,请参见查询语法

    根据分词符直接将整个日志切分成多个text类型的词语。可以通过关键词进行查询,例如查询语句:Chrome or Safari ,查询包括ChromeSafari的日志。更多信息,请参见查询语法

    image

  • 字段索引

    说明

    在采集日志或投递数据到其他云产品时,日志服务会将日志来源、时间戳等信息以Key-Value对的形式添加到日志中。这些字段是日志服务的保留字段

    先将日志根据字段名称(KEY)进行区分,然后在字段内使用分词符进行分割,字段类型包括textlongdoublejson

    • text类型的字段,可以使用全文查询语句、字段查询语句、分析语句(SELECT)。如果未开启全文索引,全文查询语句是从所有text类型的字段中查询结果。如果已开启全文索引,全文查询语句是从所有日志中查询结果。

    • longdouble类型的字段,可以使用字段查询语句、分析语句(SELECT)进行查询和分析。

    创建字段索引后,您可以指定字段名称和字段值(Key:Value)进行查询,也可以使用SELECT语句。更多信息,请参见字段查询语法查询与分析概述image

创建索引

重要

不同的索引配置,会产生不同的查询和分析结果,请根据您的需求,合理创建索引。如果您同时创建了全文索引和字段索引,以字段索引的配置为准。

配置索引只对新增日志生效,对于已有日志需要重建索引,配置索引后需要大约一分钟生效。

  1. 登录日志服务控制台,在Project列表,单击打开目标Project。

  2. 在左侧导航栏单击日志存储,然后在打开的日志库页签中,单击目标Logstore。

  3. 在Logstore的查询和分析页面,单击开启索引

    说明

    开启后等待1min左右即可查询最新数据。

    image

  4. 关闭自动更新索引

    当Logstore为云产品专属Logstore或内部Logstore时,默认打开索引自动更新开关,后续如有版本更新时可以升级到内置索引最新版本。如果需要创建索引,请在查询分析面板中,关闭自动更新开关。

    警告

    删除云产品专属Logstore的索引会影响相关报表、告警等功能的使用。

    自动更新索引

  5. 配置索引

    查询分析页面,打开全文索引开关,并单击自动生成索引。日志服务会根据采集时预览数据中的第一条内容,自动生成字段索引。单击页面下方的+也可手动创建字段索引。

    image

    重要
    • 如果需要对字段进行分析(SELECT语句),必须创建字段索引,字段索引的配置项优先级高于全文索引的配置项。

    • 日志服务已为部分保留字段创建索引。更多信息,请参见保留字段

      其中__topic____source__的索引分词符为空,查询这两个字段时,关键字必须完全匹配。

    • __tag__为前缀的字段不支持全文索引。您需要创建字段索引后,才能执行查询和分析操作,例如*| select "__tag__:__receive_time__"

    • 日志中存在同名字段(例如都为request_time)时,日志服务会将其中一个字段名显示为request_time_0,底层存储的字段名仍为request_time。因此在创建索引、查询、分析、投递、加工时,只能使用原始字段名request_time。

    全文索引配置项说明如下所示:

    参数

    说明

    日志聚类

    打开日志聚类开关后,日志服务在采集文本日志时会自动聚合相似度高的日志,提取共同的日志模式,帮助您快速掌握日志整体情况。更多信息,请参见日志聚类

    大小写敏感

    查询时是否区分英文字母的大小写。

    • 打开大小写敏感开关,则查询时区分大小写。例如某条日志含有internalError,那么您只能使用internalError才能查询到该日志。

    • 关闭大小写敏感开关,则查询时不区分大小写。例如某条日志含有internalError,那么您使用关键字INTERNALERRORinternalerror都能查到该日志。

    包含中文

    查询时是否区分中英文。

    • 打开包含中文开关后,如果日志中包含中文,则按照中文语法拆分中文内容,按照分词符的设置拆分英文内容。

      重要

      中文分词对写入速度会有一定影响,请根据需求谨慎设置。

    • 关闭包含中文开关后,按照分词符的设置拆分所有内容。

    例如日志内容为user:SLS日志服务用户张先生

    • 关闭包含中文开关后,按照分词符半角冒号(:)进行拆分,日志会被拆分为userSLS日志服务用户张先生,您可以通过userSLS日志服务用户张先生查找该日志。

    • 打开包含中文开关后,日志服务后台分词器将日志拆分为userSLS日志服务用户张先生,您通过日志服务张先生等词都可以查找到该日志。

    分词符

    根据指定分词符,将日志内容拆分成多个词。日志服务的默认分词符为, '";=()[]{}?@&<>/:\n\t\r。当默认设置不能满足您的需求时,您可以自定义设置分词符。所有的ASCII码都可被定义为分词符。

    如果设置分词符为空,则字段值将被当成一个整体,您只能通过完整字符串或模糊查询查找对应的日志。

    例如日志内容为/url/pic/abc.gif

    • 如果不设置任何分词符,整条日志被作为一个词/url/pic/abc.gif,您只能通过完整字符串/url/pic/abc.gif或模糊查询/url/pic/*查找该日志。

    • 如果设置分词符为正斜线(/),则原始日志被拆分为urlpicabc.gif三个词,您通过任意一个词或词的模糊查询都可以找到该日志,例如urlabc.gifpi*/url/pic/abc.gif

    • 如果设置分词符为正斜线(/)和半角句号(.),则原始日志被拆分为urlpicabcgif四个词,您通过任意一个词或词的模糊查询都可以找到该日志。

    字段索引配置项说明如下所示:

    参数

    说明

    字段名称

    日志字段名称(KEY),例如client_ip

    字段名称只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。

    重要
    • 设置公网IP地址、Unix时间戳等__tag__字段的索引时,需设置字段名称__tag__:KEY形式,例如__tag__:__receive_time__。更多信息,请参见保留字段

    • __tag__字段不支持数值类型索引,请将所有__tag__字段的索引的类型设置为text

    类型

    日志字段值(Value)的数据类型,可选值为text、long、double和json。更多信息,请参见数据类型

    long类型和double类型不支持设置大小写敏感包含中文分词符

    别名

    字段的别名,例如设置client_ip字段的别名为ip

    字段别名只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。

    重要

    别名仅用于分析语句(SELECT语句),查询语句中仍需使用原始字段名称。更多信息,请参见列的别名

    大小写敏感

    查询时是否区分英文字母的大小写。

    • 打开大小写敏感开关,则查询时区分大小写。例如某条日志含有internalError,那么您只能使用internalError才能查询到该日志。

    • 关闭大小写敏感开关,则查询时不区分大小写。例如某条日志含有internalError,那么您使用关键字INTERNALERRORinternalerror都能查到该日志。

    分词符

    根据指定分词符,将日志内容拆分成多个词。日志服务的默认分词符为, '";=()[]{}?@&<>/:\n\t\r。当默认设置不能满足您的需求时,您可以自定义设置分词符。所有的ASCII码都可被定义为分词符。

    如果设置分词符为空,则字段值将被当成一个整体,您只能通过完整字符串或模糊查询查找对应的日志。

    例如日志内容为/url/pic/abc.gif

    • 如果不设置任何分词符,整条日志被作为一个词/url/pic/abc.gif,您只能通过完整字符串/url/pic/abc.gif或模糊查询/url/pic/*查找该日志。

    • 如果设置分词符为正斜线(/),则原始日志被拆分为urlpicabc.gif三个词,您通过任意一个词或词的模糊查询都可以找到该日志,例如urlabc.gifpi*/url/pic/abc.gif

    • 如果设置分词符为正斜线(/)和半角句号(.),则原始日志被拆分为urlpicabcgif四个词,您通过任意一个词或词的模糊查询都可以找到该日志。

    包含中文

    查询时是否区分中英文。

    • 打开包含中文开关后,如果日志中包含中文,则按照中文语法拆分中文内容,按照分词符的设置拆分英文内容。

      重要

      中文分词对写入速度会有一定影响,请根据需求谨慎设置。

    • 关闭包含中文开关后,按照分词符的设置拆分所有内容。

    例如日志内容为user:SLS日志服务用户张先生

    • 关闭包含中文开关后,按照分词符半角冒号(:)进行拆分,日志会被拆分为userSLS日志服务用户张先生,您可以通过userSLS日志服务用户张先生查找该日志。

    • 打开包含中文开关后,日志服务后台分词器将日志拆分为userSLS日志服务用户张先生,您通过日志服务张先生等词都可以查找到该日志。

    开启统计

    打开开启统计功能后,您才能对该字段进行统计分析。

索引配置示例

  • 日志内容中有request_time字段,执行字段查询语句request_time>100

    • 只建立全文索引,返回同时包含request_time>(非分词符)、100这三个词的日志。

    • 只建立double、long类型的字段索引,返回结果是request_time大于100的日志。

    • 建立全文索引和double、long类型的字段索引,request_time的全文索引失效,返回结果是request_time大于100的日志。

  • 日志内容中有request_time字段,执行全文查询语句request_time

    • 只建立double、long类型的字段索引,无法查询到相关日志。

    • 只建立全文索引,从所有日志文本中查询包括request_time的日志。

    • 只建立text类型的字段索引,从字段索引是text类型的字段中查询包括request_time的日志。

  • 日志内容中有status字段,执行分析语句* | SELECT status, count(*) AS PV GROUP BY status

    • 只建立全文索引,无法查询到相关日志。

    • status建立字段索引,返回结果是不同的状态码及对应的PV总数。

索引流量

  • 全文索引

    所有字段名和字段值都将作为text类型存储,即字段名和字段值都被计入索引流量。

  • 字段索引

    不同数据类型的字段的索引流量计算方式不同。

    • text类型:字段名和字段值都被计入索引流量中。

    • long类型和double类型:字段名不计入索引流量中,每个字段值所占的索引流量统一为8字节。

      例如对status字段设置了索引(long类型),字段值为200,则字符串status不会被计入在索引流量中,200的索引流量统一为8字节。

    • JSON类型:字段名和字段值都被计入到索引流量中,包括未被创建索引的子节点。更多信息,请参见如何计算JSON类型字段的索引流量

      • 如果未对子节点设置索引,则其索引流量按照text类型进行计算。

      • 如果对子节点设置了索引,则其索引流量按照其子节点数据类型(text类型、long类型或double类型)进行计算。

计费说明

按写入数据量计费的logstore

按使用功能计费的logstore

后续步骤

相关文档

常见问题

  • 为什么导入日志后查询不到日志?

    • 检查已设置的分词符是否符合要求。

    • 索引配置只对新增日志生效,如果您要查询和分析历史数据,请使用重建索引功能。具体操作,请参见重建索引

  • 如何完成双重条件查询?

    需要使用两个条件查询日志时,只需同时输入两个语句即可。需要在Logstore中查询数据状态不是OK或者Unknown的日志。 直接搜索not OK not Unknown即可得到符合条件的日志。

  • 如何查询包括包含多个关键字的日志?

    以查询http_user_agent字段值中包含like Gecko的日志为例。

    • 短语查询。http_user_agent:#"like Gecko"。短语查询

    • like语法。* | Select * where http_user_agent like '%like Gecko%'

  • 如何在日志中搜索包含空格的关键字?

    例如,当您搜索POS version时,会得到包含POS或者version的所有日志。如果使用双引号包裹,例如“POS version”,则会得到包含关键字POS version的所有日志。

  • 日志查询常见问题

  • 查询与分析日志的常见报错

  • 如何模糊查询日志?

  • 查询和分析JSON日志的常见问题

  • 如何将日志下载到本地

  • 为什么查询和分析时,字段值会被截断?