GetLogs
调用GetLogs接口查询指定Project下某个Logstore中的原始日志数据,返回结果显示某时间区间中的原始日志。
接口说明
- 请求语法中Host由Project名称和日志服务Endpoint构成,您需要在Host中指定Project。
-
已创建并获取AccessKey。更多信息,请参见访问密钥。
阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。RAM用户需具备操作日志服务资源的权限。具体操作,请参见创建RAM用户及授权。
- 已明确您查询日志所属的Project名称、所属地域、Logstore名称等。如何查询,请参见管理Project和管理Logstore。
- 日志服务查询日志时存在使用限制。请设计合理查询与分析语句、设置合理查询区间等。更多信息,请参见查询日志使用限制和分析日志使用限制。
- 查询日志前,已配置索引。具体操作,请参见创建索引。
- 当查询涉及的日志数量变化非常大时,日志服务API无法预测需要调用多少次该接口来获取完整结果。所以需要您查看每次请求返回结果中的x-log-progress状态值,根据状态值来确定是否需要重复调用该接口来获取最终完整结果。每次重复调用该接口都会重新消耗相同数量的查询CU。
- 当日志写入到Logstore中,日志服务的查询接口(GetHistograms和GetLogs)能够查到该日志的延时因写入日志类型不同而异。日志服务按日志时间戳把日志分为如下两类:
- 实时数据:日志中时间点为服务器当前时间点(-180秒,900秒]。例如,日志时间为UTC 2014-09-25 12:03:00,服务器收到时为UTC 2014-09-25 12:05:00,则该日志被作为实时数据处理,一般出现在正常场景下。
-
历史数据:日志中时间点为服务器当前时间点[-7x86400秒,-180秒)。例如,日志时间为UTC 2014-09-25 12:00:00,服务器收到时为UTC 2014-09-25 12:05:00,则该日志被作为历史数据处理,一般出现在补数据场景下。
其中,实时数据写入至可查询的最大延时为3秒,99.9%情况下1秒内即可查询完毕。
- 日志服务提供Java和Python SDK的GetLogs查询使用示例。更多信息,请参见Java GetLogs使用示例和Python GetLogs使用示例。
鉴权资源
下表列出了API对应的授权信息。您可以在RAM权限策略语句的Action元素中添加该信息,用于为RAM用户或RAM角色授予调用此API的权限。
动作(Action) |
授权策略中的资源描述方式(Resource) |
log:GetLogStoreLogs |
acs:log:{#regionId}:{#accountId}:project/{#ProjectName}/logstore/{#LogstoreName} |
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
请求头
该接口使用公共请求头,无特殊请求头。请参见公共请求参数文档。
请求语法
GET /logstores/{logstore}?type=log HTTP/1.1
请求参数
名称 | 类型 | 位置 | 是否必选 | 示例值 | 描述 |
project | String | Host | 是 | ali-test-project | Project名称。 |
logstore | String | Path | 是 | example-logstore | 查询Logstore中的数据。 |
from | Integer | Query | 是 | 1627268185 | 查询开始时间点。该时间是指写入日志数据时指定的日志时间。
说明 如果您要确保不漏查数据,请将查询时间对齐到分钟级别。如果您在分析语句中设置了时间范围,则查询分析时以该时间范围为准。 如果您需要精确到秒,需要在分析语句中指定时间时,使用from_unixtime函数或to_unixtime函数转换下时间格式。例如:
|
to | Integer | Query | 是 | 1627269085 | 查询结束时间点。该时间是指写入日志数据时指定的日志时间。
说明 如果您要确保不漏查数据,请将查询时间对齐到分钟级别。如果您在分析语句中设置了时间范围,则查询分析时以该时间范围为准。 如果您需要精确到秒,需要在分析语句中指定时间时,使用from_unixtime函数或to_unixtime函数转换下时间格式。例如:
|
query | String | Query | 否 | status: 401 | SELECT remote_addr,COUNT(*) as pv GROUP by remote_addr ORDER by pv desc limit 5 |
在query参数的分析语句中加上 说明 当query参数中有分析语句(SQL语句)时,该接口的line参数和offset参数无效,建议设置该接口的参数为0,需通过SQL语句的LIMIT语法实现翻页。更多信息,请参见分页显示查询分析结果。 |
topic | String | Query | 否 | topic | 日志主题。默认值为双引号("")。更多信息,请参见日志主题(Topic)。 |
line | Long | Query | 否 | 100 | 仅当query参数为查询语句时,该参数有效,表示请求返回的最大日志条数。最小值为0,最大值为100,默认值为100。 |
offset | Long | Query | 否 | 0 | 仅当query参数为查询语句时,该参数有效,表示查询开始行。默认值为0。 |
reverse | Boolean | Query | 否 | false | 用于指定返回结果是否按日志时间戳降序返回日志,精确到分钟级别。
重要
|
powerSql | Boolean | Query | 否 | false | 是否使用SQL独享版。更多信息,请参见开启SQL独享版。
除通过powerSql参数配置SQL独享版外,您还可以使用query参数。 |
返回数据
名称 | 类型 | 示例值 | 描述 |
x-log-progress | String | Complete | 整体查询结果的状态,包括:
说明 获取日志总条数,您可以使用 *|select count(*) as count 获取,也可以使用GetHistogram接口获取每个区间内日志条数后自行累加。如果不需要获取日志总条数,可修改接口中offset后多次执行查询,当状态为Complete且返回的行数小于请求的行数时,表示已读完全部数据。 |
x-log-count | Long | 100 | 本次查询请求返回的日志行数。 说明 返回参数中不支持查询满足条件的日志总条数。您可以通过查询语句查询满足条件的日志总条数。例如 request_method:GET|select count(*) as count 用于查询request_method为GET的日志总条数。更多信息,请参见查询与分析最佳实践和使用Java SDK查询和分析日志示例。 |
x-log-processed-rows | Long | 10000 | 本次查询处理的行数。 |
x-log-elapsed-millisecond | Long | 5 | 本次查询消耗的毫秒时间。 |
Server | String | nginx | 服务器名称。 |
Content-Type | String | application/json | 返回的响应体的内容格式。 |
Content-Length | String | 0 | 响应内容长度。 |
Connection | String | close | 是否长链接。取值包括:
|
Date | String | Sun, 27 May 2018 08:25:04 GMT | 返回响应的时间。 |
x-log-requestid | String | 5B0A6B60BB6EE39764D458B5 | 服务端产生的标识,该请求的唯一ID。 |
Array of Object | [{'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.100.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}] | 日志数组Logs,其每个元素就是一条Log。 |
示例
请求示例
GET /logstores/{logstore}?type=log&from=1627268185&to=1627269085&query=status: 401 | SELECT remote_addr,COUNT(*) as pv GROUP by remote_addr ORDER by pv desc limit 5&topic=topic&line=100&offset=0&reverse=false&powerSql=false HTTP/1.1
Host:ali-test-project.cn-hangzhou.log.aliyuncs.com
Content-Type:application/json
请求示例补充说明
### 原始日志示例
```json
{
"remote_addr": "203.0.*.*",
"__time__": 1649904328,
"__topic__": "nginx_access_log",
"__source__": "127.0.0.1",
"body_bytes_sent": "3841",
"__tag__:__receive_time__": "1649904334",
"time_local": "14/Apr/2022:02:45:28",
"request_method": "HEAD",
"request_uri": "/request/path-2/file-2",
"http_user_agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
"remote_user": "jlqd8",
"request_time": "17",
"__pack_meta__": "1|MTYyODY2Mjk0NzQ1ODU1Mjk4Mg==|197|165",
"request_length": "4184",
"http_referer": "www.example.com",
"__tag__:__receive_time___0": "1649904334",
"host": "www.example.com",
"http_x_forwarded_for": "198.51.100.48",
"upstream_response_time": "0.23",
"status": "401"
}
```
正常返回示例
JSON
格式
HTTP/1.1 200 OK
Content-Type:application/json
{
"x-log-progress" : "Complete",
"x-log-count" : 5,
"logs" : "[{'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.XXX.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}, {'remote_addr': '198.51.100.XXX', 'pv': '1', '__source__': '', '__time__': '1649902984'}]"
}
错误码
访问错误中心查看更多错误码。
HttpStatusCode |
ErrorCode |
ErrorMessage |
错误码描述 |
404 |
ProjectNotExist |
Project does not exist. |
Project不存在。 |
404 |
LogStoreNotExist |
Logstore does not exist. |
Logstore不存在。 |
400 |
InvalidTimeRange |
Request time range is invalid. |
请求的时间区间无效。 |
400 |
InvalidQueryString |
Query string is invalid. |
请求的查询分析语句无效。 |
400 |
InvalidOffset |
Offset is invalid. |
请求的offset参数无效。 |
400 |
InvalidLine |
Line is invalid. |
请求的line参数无效。 |
400 |
InvalidReverse |
Reverse value is invalid. |
Reverse参数的值无效。 |
400 |
IndexConfigNotExist |
Logstore without index config. |
Logstore未开启索引。 |
400 |
ParameterInvalid |
ErrorType:OLSQueryParseError.ErrorMessage:offset is not available for pagination in sql query, please use limit x,y syntax for pagination. |
当query参数中有分析语句(SQL语句)时,建议设置该接口的line参数和offset参数为0,通过SQL语句的LIMIT语法实现翻页。 query参数中的SQL语句存在问题时,您可以参见查询与分析日志的常见报错进行排查。 |
500 |
InternalServerError |
Specified Server Error Message. |
内部服务调用错误。 |
更多信息,请参见通用错误码。