全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

查询日志

更新时间:2018-02-22 09:09:14

日志服务查询功能可以针对各种数据类型(文本、数值、模糊、JSON)提供查询,以下是各类型查询能力介绍:

查询功能需要开启查询分析,可以参考简介

支持类型

1. 文本类型(Text)

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

1.1 大小写敏感

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

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

1.2 分词符

原始日志内容根据分词符可以将日志内容切分成多个关键词,例如我们要查询如下日志内容

  1. /url/pic/abc.gif
  • 不设置任何分词符,整个字符串会作为一个独立单词”/url/pic/abc.gif“,只有通过该完整字符串,或通过模糊查询”/usr/pic/*”才能找到
  • 如果设置分词符为”/“,则原始日志被切分为”url” “pic” “abc.gif“三个单词,可以使用任意一个单词或单词模糊查询都可以找到该日志,例如”url”或”abc.gif”或”pi*“,也可以使用”/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. }

设置如下:

pic

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
  5. 注:
  6. json内字段无需配置
  7. json maparray 自动展开,支持多层嵌套,每一层以"."进行分割

2. 查询:Double、Long类型

  1. latency>40
  2. message.usedTime > 40
  3. 注:
  4. 需要对json内字段独立配置,字段必须不在array

3. 组合查询

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

查询分析语法

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

其他

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

本文导读目录