本文以查询和分析JSON类型的网站日志为例,为您介绍查询和分析JSON日志的步骤,并提供SQL语句示例。
前提条件
已采集JSON日志。具体操作,请参见使用极简模式采集日志。
步骤一:创建索引
登录日志服务控制台。
在Project列表区域,单击目标Project。
在控制台左侧,单击日志存储,在日志库列表中单击目标Logstore。
在Logstore的查询和分析页面的右上角,选择创建索引。
。如果还未创建索引,需要先单击开启索引。全文索引和字段索引的更多信息、创建索引的详细步骤,请参见说明如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。
配置字段索引。以下是JSON格式的日志示例和对应字段的配置。
__topic__
、__source__
、__tag__
是系统的保留字段,更多信息请参见保留字段。@timestamp
、remote_addr
、remote_user
、http_referer
、http_user_agent
、status
、server_protocal
、http_x_forward_for
、upstream_addr
字段不包含叶子节点,可以在content
字段下直接建立索引。request
、time
字段包含叶子节点,而且叶子节点不是JSON数组。不能为
request
、time
这两个父字段本身建立索引,也不能查询分析这两个父字段。可以为
request
、time
下的叶子节点建立索引,需要指定完整的路径,从最外层的父字段到最内层的叶子节点。格式为KEY1.KEY2.KEY3
,例如time.request_time
、time.upstream_response_time
。建立索引后,可以查询time.request_time
、time.upstream_response_time
字段。
body_bytes_sent
字段的值为JSON数组,不能建立索引,也不能为叶子节点建立索引。不能查询分析body_bytes_sent
字段或body_bytes_sent
的叶子节点。
步骤二:重建索引
配置索引后,只对新采集的数据生效。如果您要查询历史数据,请使用重建索引功能。具体操作,请参见重建索引。
步骤三:查询和分析日志
您可以在Logstore的查询和分析页面,输入查询和分析语句,选择时间范围,进行日志查询操作。对于分析语句(SELECT语句),必须使用双引号("")包裹字段名称,使用单引号('')包裹字符串。查询和分析日志的详细步骤,请参见查询和分析日志。查询分析JSON日志的常见问题,请参见查询和分析JSON日志的常见问题。
查询请求状态为200的日志。
content.status:200
查询请求长度大于70的日志。
content.request.request_length > 70
查询GET请求的日志。
content.request.request_method:GET
统计不同请求状态对应的日志数量。
* | SELECT "content.status", COUNT(*) AS PV GROUP BY "content.status"
计算不同请求时长对应的请求数量,并按照请求时长进行升序排序。
* | SELECT "content.time.request_time", COUNT(*) AS count GROUP BY "content.time.request_time" ORDER BY "content.time.request_time"
计算不同请求方法对应的平均请求时长。
* | SELECT avg("content.time.request_time") AS avg_time,"content.request.request_method" GROUP BY "content.request.request_method"