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

简介

更新时间:2018-04-25 11:57:58

日志服务提供大规模、日志实时查询与分析能力(LogSearch/Analytics) ,可以通过开启索引+字段统计来支持该功能。

功能优势

  • 实时:写入后可以立即被分析。
  • 速度快:
    • 查询:一秒内查询(5个条件)可处理10亿级数据。
    • 分析:一秒内分析(5个维度聚合+GroupBy)可聚合亿级别数据。
  • 灵活:可以改变任意查询和分析条件,实时获取结果。
  • 生态:除控制台提供的报表、仪表盘、快速分析等功能外,还可以和无缝与Grafana、DataV、Jaeger等产品无缝对接,并支持Restful API,JDBC等协议。

基本概念

在不开启查询分析(索引)时,原始数据可以根据Shard进行顺序消费(类似Kafka),在开启后除了支持顺序消费外,还可以对日志数据进行统计与查询,差别参见日志消费与查询分析区别

开启索引

  1. 登录 日志服务管理控制台。选择目标项目,单击项目名称。
  2. 选择目标日志库并单击日志索引列下的 查询。单击右上角的 开启索引。 如您之前已开启索引,请直接单击设置查询分析 > 设置

    • 开启查询、统计后意味着数据将会在后台被索引,会产生索引的流量,以及索引对应存储的空间。
    • 如果不需要查询分析功能,可以单击关闭索引
  3. 进入设置菜单进行配置。

数据类型

对一条日志而言,每个Key都可以设置类型(全文索引本身也是一个特殊的Key,把整条日志作为Value),目前支持类型如下:

类别 类型 说明 查询示例
基础 Text 文本类型,可以进行关键词+模糊匹配,支持中文分词。 uri:"login*" method:"post"
基础 Long 数值类型,支持区间查询。 status>200, status in [200, 500]
基础 Double 带浮点数数值类型。 price>28.95, t in [20.0, 37]
组合 Json 内容为JSON字段,默认为Text类型,支持嵌套模式。可以通过 a.b等路径格式给a层下b元素设置(Text、Long、Double)类型索引,设置后的字段类型以设置为主。 level0.key>29.95 level0.key2:"action"
组合 全文 整条日志当做文本进行查询。 error and "login fail"

查询分析语法

实时分析查询(Query):由(Search、Analytics)两个部分组成,中间通过|进行分割:

  1. $Search | $Analytics
  • 查询(Search):查询条件,可以由关键词、模糊、数值等、区间范围和组合条件等产生。如果为空或”*”,则代表所有数据。
  • 分析(Analytics):对查询结果或全量数据进行计算和统计。

注意: 两部分均为可选,当Search部分为空时代表针对该时间段所有数据不过滤任何条件,直接对结果进行统计。当Analysis部分为空时,代表只返回查询结果,不需要做统计。

更多细节参见:查询介绍查询语法分析语法

查询示例

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

序号 Key 类型
0 time -
1 class text
2 status long
3 latency double
4 message json
  1. 0. 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. "projectName": "ali-log-test-project",
  13. "requestId": "d3f0c96a-51b0-4166-a850-f4175dde7323"
  14. },
  15. "result": {
  16. "message": "successful",
  17. "code": "200",
  18. "data": {
  19. "clusterRegion": "ap-southeast-1",
  20. "ProjectName": "ali-log-test-project",
  21. "CreateTime": "2017-06-08 20:22:41"
  22. },
  23. "success": true
  24. }
  25. }

设置如下:

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 分钟内的查询结果。当查询请求的结果有部分被缓存命中,则服务端会在这次请求中继续扫描未被缓存命中的日志数据。为了减少您合并多次查询结果的工作量,日志服务会把缓存命中的查询结果与本次查询新命中的结果合并返回给您。

因此日志服务可以让您通过以相同参数反复调用该接口来获取最终完整结果。

本文导读目录