全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
日志服务

查询日志

更新时间:2018-03-29 23:02:07

日志服务查询功能可以针对各种数据类型提供查询,如文本、数值、模糊、JSON。

查询功能需要开启查询分析功能,开启步骤请参考简介

查询注意事项

  1. 查询分析日志之前,请确保您已开启索引和分析功能。
    • 开启索引:在查询界面右上角单击开启索引
    • 开启分析:单击开启索引后,在弹出的查询分析菜单中打开指定字段的开启统计按钮。
  2. 全文索引属性和键值索引属性必须至少启用一种。
  3. 索引类型为long/double时,大小写敏感和分词符属性无效。
  4. 打开对应列的统计功能,才能使用SQL进行快速统计分析。
  5. 在查询日志时您必须指定查询的Logstore和查询时间区域。Logstore必须属于所指定的Project,时间区域不超过Logstore的日志存储周期。

支持的数据类型

1. 文本类型(Text)

和搜索引擎类似,文本类(Text)数据查询基于词(Term)的命中,因此需要配置分词符,大小写敏感,包含中文(中文分词)等选项。

1.1 大小写敏感

原始日志查询时是否需要支持大小写,例如原始日志为“internalError”:

  • false(不区分),即查询关键字“INTERNALERROR”和“internalerror”都能查询到样例日志。
  • true(区分),只能通过关键字“internalError”查询到样例日志。

1.2 分词符

原始日志内容根据分词符可以将日志内容切分成多个关键词。

例如我们要查询如下日志内容:

  1. /url/pic/abc.gif
  • 不设置任何分词符,整个字符串会作为一个独立单词/url/pic/abc.gif,只有通过该完整字符串,或通过模糊查询/url/pic/*才能找到。
  • 如果设置分词符为/,则原始日志被切分为urlpicabc.gif三个单词,可以使用任意一个单词或单词模糊查询都可以找到该日志,例如urlabc.gifpi*,也可以使用/url/pic/abc.gif进行查询(查询时会被拆分为url and pic and abc.gif三个条件)。
  • 如果设置分词符为/.,则原始日志被切分为url pic abc gif四个单词。

注意:通过设置合理的分词符,可以放宽查询的范围。

1.3 包含中文

如果日志中包含中文,需要打开中文分词。例如对如下日志内容:

  1. buyer:用户小李飞刀lee

默认分词符为”:”,则原始日志会被拆分为buyer用户小李飞刀lee这两个单词,如果搜索用户,则不会返回lee,如果开启包含中文选项后,日志服务后台分词器会智能去理解中文含义,并将日志拆分为buyer用户小李飞刀lee五个单词,无论使用飞刀小李飞刀(会被解析为:小李 and 飞刀) 都可以查找到日志。

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

2. 数值类型数据

支持类型:long(整数)或者double(小数),当设置为数值类型后对于该键的查询只能通过数值范围。例如,您可以通过以下关键字查询键值范围为1000~2000的longkey。

  1. longKey > 1000 and longKey < 2000

3. 组合类型(JSON)

Json是由文本、布尔、数值、数组(Array)和图(Map)构成的组合类型数据。

3.1 文本类数据

对JSON类型字段,会自动识别text/bool类型字段。

例如对以下jsonkey:

  1. jsonkey: {
  2. key1:text_value,
  3. key2:true,
  4. key3:3.14
  5. }

可以通过jsonkey.key1:"text_value" ,jsonkey.key2:true 等条件进行查询。

3.2 数值类数据

非json array中的double、long类型数据,可通过设置类型,并指定路径后进行查询。

  1. jsonkey.key3这个字段的类型为double
  2. 查询 : jsonkey.key3 > 3

3.3 非完全合法JSON

会尽可能解析有效内容,直到遇到非法部分结束。

例如:

  1. "json_string":
  2. {
  3. "key_1" : "value_1",
  4. "key_map" :
  5. {
  6. "key_2" : "value_2",
  7. "key_3" : "valu

在key_3之后的数据被截断丢失,对于这种缺失的日志可正确解析到json_string.key_map.key_2这个字段。

注意事项
  • 不支持json object、json array类型。
  • 字段不能在json array中。
  • bool类型字段可以转成text类型。

4. 组合类型(全文查询)

全文查询(索引)默认会将整条日志作为文本类型,全文查询默认不需要指定key。例如对以下由4个字段组成的日志(时间/status/level/message)。

  1. [20180102 12:00:00] status:200,level:"error",message:"some thing is error in this field"

当打开全文索引时,整条日志所有的key,value都会被拆分成一个个独立单词。

  1. [20180102 12:00:00] status 200 level error message some thing is error in this field

在检索过程中搜索error时(level和message两个字段中error都会被命中)。

示例

以下一条日志除时间外,还包含4个键值:

序号 Key 类型
0 time
1 class text
2 status long
3 latency double
4 message json
  1. time:2018-01-01 12:00:00
  2. 1. class:central-log
  3. 2. status:200
  4. 3. latency:68.75
  5. 4. message:
  6. {
  7. "methodName": "getProjectInfo",
  8. "success": true,
  9. "remoteAddress": "1.1.1.1:11111",
  10. "usedTime": 48,
  11. "param": [
  12. {
  13. "projectName": "ali-log-test-project",
  14. "requestId": "d3f0c96a-51b0-4166-a850-f4175dde7323"
  15. }
  16. ],
  17. "result": {
  18. "message": "successful",
  19. "code": "200",
  20. "data": {
  21. "clusterRegion": "ap-southeast-1",
  22. "ProjectName": "ali-log-test-project",
  23. "CreateTime": "2017-06-08 20:22:41"
  24. },
  25. "success": true
  26. }
  27. }

设置如下:

29000

其中:

  • ①表示可查询json字段中所有string和bool数据。
  • ②表示可查询long类型数据。
  • ③表示配置的字段可进行SQL分析。

示例1: 查询string、bool类型

  1. class : cental*
  2. message.traceInfo.requestId : 92.137_1518139699935_5599
  3. message.param.projectName : ali-log-test-project
  4. message.success : true

注意

  • json内字段无需配置。
  • json map、array 自动展开,支持多层嵌套,每一层以”.”进行分割。

示例2: 查询Double、Long类型

  1. latency>40
  2. message.usedTime > 40

注意:需要对json内字段独立配置,字段必须不在array。

示例3: 组合查询

  1. class : cental* and message.usedTime > 40 not message.param.projectName:ali-log-test-project

查询分析语法

查询语法请参见 日志查询语法 ,对查询结果进行分析参见分析语法

其他

如果您查询需要检索的日志数据量很大时(如查询时间跨度非常长,其中数据量在百亿以上等),则一次查询请求无法检索完所有数据。在这种情况下,日志服务会把已有的数据返回给您,并在返回结果中告知您该查询结果并不完整。如此同时,服务端会缓存 15 分钟内的查询结果。当查询请求的结果有部分被缓存命中,则服务端会在这次请求中继续扫描未被缓存命中的日志数据。为了减少您合并多次查询结果的工作量,日志服务会把缓存命中的查询结果与本次查询新命中的结果合并返回给您。因此日志服务可以让您通过以相同参数反复调用该接口来获取最终完整结果。

本文导读目录