调用阿里云日志服务(SLS)CLI命令查询指定Project和Logstore下的日志数据,支持基础日志查询和SQL分析查询,适用于获取指定时间范围内、指定数量的日志数据场景。
| 依赖项 | 要求 |
| -------- | ------------------------------------------------------------------------------------------- |
| 操作系统 | Windows、Linux、macOS |
| Python版本 | Python 2.7+ 或 Python 3.7+(推荐Python 3.7及以上) |
| 依赖组件 | docopt、aliyun-log-python-sdk、jmespath、aliyun-python-sdk-core、aliyun-python-sdk-sts、requests |
```bash
touch ~/.bash_profile
vim ~/.bash_profile
```
```bash
export PATH=$PATH:/usr/local/python3/bin
```
```bash
source ~/.bash_profile
```
#### Windows
D:\dev\python\python37\bin
### CLI安装
#### 通用安装命令(推荐)
```bash
pip3 install aliyun-log-python-sdk aliyun-log-cli -U --no-cache
```
#### 各系统验证安装
```bash
aliyunlog --version
# 输出示例:aliyun-log-cli 0.2.9
```
### CLI升级与卸载
```bash
pip3 install aliyun-log-python-sdk aliyun-log-cli -U --no-cache
```
```bash
pip3 uninstall aliyun-log-cli
```
## CLI配置指南
### 凭证优先级(从高到低)
### 配置默认账号
```bash
aliyunlog configure "你的AccessKey ID" "你的AccessKey Secret" "cn-hangzhou.log.aliyuncs.com"
```
配置文件会自动生成在以下路径:
~/.aliyunlogcli
C:\Users\你的用户名\.aliyunlogcli
文件内容示例:
```ini
[main]
access-id = LTAIpLMZ
access-key = XjAsPeRqax
region-endpoint = cn-hangzhou.log.aliyuncs.com
sts-token =
```
### 配置多账号
```bash
aliyunlog configure "你的AccessKey ID" "你的AccessKey Secret" "cn-shanghai.log.aliyuncs.com" "test"
```
```bash
aliyunlog log get_log ... --client-name=test
```
### 全局输出格式配置
```bash
aliyunlog configure --format-output=json
```
```bash
aliyunlog configure --format-output=no_escape
```
```bash
aliyunlog configure --format-output=json,no_escape
```
### 特殊字符转义
当查询语句包含$、` `、\、!`等特殊字符时,需使用以下两种方式之一转义:
```bash
--query="event_name:\$_enter"
```
```bash
--query='event_name:$_enter'
```
## 触发词
## 参数定义
### 业务参数
| 参数名 | 类型 | 是否必选 | 默认值 | 描述 |
| --------- | ------- | ---- | ----- | ----------------------------------------------------------------------------------------------------- |
| project | string | 是 | - | 阿里云SLS Project名称 |
| logstore | string | 是 | - | 阿里云SLS Logstore名称 |
| from_time | string | 是 | - | 查询开始时间,支持两种格式:
1. Unix时间戳(秒级)
2. %Y-%m-%d %H:%M:%S 格式,如 2026-05-14 18:00:00+8:00 |
| to_time | string | 是 | - | 查询结束时间,格式同from_time |
| topic | string | 否 | "" | 日志主题,默认空字符串 |
| query | string | 否 | "*" | 查询语句或SQL分析语句,默认查询所有日志 |
| reverse | boolean | 否 | false | 仅基础查询有效,是否按时间戳降序返回日志
true:降序
false:升序(默认) |
| offset | integer | 否 | 0 | 仅基础查询有效,查询开始行偏移量 |
| size | integer | 否 | 100 | 仅基础查询有效,返回最大日志条数,范围0-100 |
| power_sql | boolean | 否 | false | 是否使用SQL独享版
true:使用独享版
false:使用普通版(默认) |
### 全局参数(可选)
| 参数名 | 类型 | 是否必选 | 示例值 | 描述 |
| --------------- | ------ | ---- | ---------------------------- | --------------------------- |
| access-id | string | 否 | LTAI | 阿里云AccessKey ID,优先级高于配置文件 |
| access-key | string | 否 | yourAccessKeySecret | 阿里云AccessKey Secret |
| sts-token | string | 否 | - | STS临时访问令牌 |
| region-endpoint | string | 否 | cn-hangzhou.log.aliyuncs.com | SLS服务入口域名 |
| client-name | string | 否 | test | 使用指定的多账号配置名称 |
| profile | string | 否 | akProfile | 使用阿里云CLI配置文件中的凭证 |
| format-output | string | 否 | json,no_escape | 输出格式,支持组合:json、no_escape |
| jmes-filter | string | 否 | "data[*].status" | JMES语法表达式,过滤返回结果 |
| decode-output | string | 否 | utf8 | 二进制日志解码方式,支持utf8、latin1、gbk |
## 命令模板
```bash
aliyunlog log get_log \
--project="{{project}}" \
--logstore="{{logstore}}" \
--from_time="{{from_time}}" \
--to_time="{{to_time}}" \
{{#if topic}}--topic="{{topic}}"{{/if}} \
{{#if query}}--query="{{query}}"{{/if}} \
{{#if reverse}}--reverse={{reverse}}{{/if}} \
{{#if offset}}--offset={{offset}}{{/if}} \
{{#if size}}--size={{size}}{{/if}} \
{{#if power_sql}}--power_sql={{power_sql}}{{/if}} \
{{#if access-id}}--access-id="{{access-id}}"{{/if}} \
{{#if access-key}}--access-key="{{access-key}}"{{/if}} \
{{#if sts-token}}--sts-token="{{sts-token}}"{{/if}} \
{{#if region-endpoint}}--region-endpoint="{{region-endpoint}}"{{/if}} \
{{#if client-name}}--client-name="{{client-name}}"{{/if}} \
{{#if profile}}--profile="{{profile}}"{{/if}} \
{{#if jmes-filter}}--jmes-filter="{{jmes-filter}}"{{/if}} \
{{#if decode-output}}--decode-output="{{decode-output}}"{{/if}} \
--format-output={{format_output|default("json,no_escape")}}
```
## 使用示例
### 示例1:基础日志查询(获取最近100条INFO级别日志)
```
用户输入:查询阿里云日志 project=aliyun-test-project logstore=logstore-a from_time="2026-05-14 18:00:00+8:00" to_time="2026-05-14 18:30:00+8:00" query="level:INFO" reverse=true
```
生成命令:
```bash
aliyunlog log get_log \
--project="aliyun-test-project" \
--logstore="logstore-a" \
--from_time="2026-05-14 18:00:00+8:00" \
--to_time="2026-05-14 18:30:00+8:00" \
--query="level:INFO" \
--reverse=true \
--format-output=json,no_escape
```
### 示例2:SQL分析查询(统计不同状态码的请求数)
```
用户输入:阿里云日志分析 project=aliyun-test-project logstore=logstore-a from_time="2026-05-14 00:00:00+8:00" to_time="2026-05-14 18:30:00+8:00" query=" | select status,COUNT() as pv group by status order by pv desc limit 20"
```
生成命令:
```bash
aliyunlog log get_log \
--project="aliyun-test-project" \
--logstore="logstore-a" \
--from_time="2026-05-14 00:00:00+8:00" \
--to_time="2026-05-14 18:30:00+8:00" \
--query=" | select status,COUNT() as pv group by status order by pv desc limit 20" \
--format-output=json,no_escape
```
### 示例3:使用全局参数指定临时凭证
```
用户输入:SLS临时查询 project=aliyun-test-project logstore=logstore-a from_time="2026-05-14 12:00:00+8:00" to_time="2026-05-14 18:30:00+8:00" access-id="LTAI" access-key="XjAsP" region-endpoint="cn-beijing.log.aliyuncs.com"
```
生成命令:
```bash
aliyunlog log get_log \
--project="aliyun-test-project" \
--logstore="logstore-a" \
--from_time="2026-05-14 12:00:00+8:00" \
--to_time="2026-05-14 18:30:00+8:00" \
--access-id="LTAI" \
--access-key="XjAsP" \
--region-endpoint="cn-beijing.log.aliyuncs.com" \
--format-output=json,no_escape
```
### 示例4:使用JMES过滤结果(只返回状态码字段)
```
用户输入:查询阿里云日志 project=aliyun-test-project logstore=logstore-a from_time="2026-05-14 18:00:00+8:00" to_time="2026-05-14 18:30:00+8:00" jmes-filter="data[*].status"
```
生成命令:
```bash
aliyunlog log get_log \
--project="aliyun-test-project" \
--logstore="logstore-a" \
--from_time="2026-05-14 18:00:00+8:00" \
--to_time="2026-05-14 18:30:00+8:00" \
--jmes-filter="data[*].status" \
--format-output=json,no_escape
```
## 重要注意事项
query参数包含SQL分析语句时,reverse、offset、size参数无效,必须通过SQL语句的ORDER BY指定排序,通过LIMIT语法实现分页
+8:00时区,如2026-05-14 18:30:00+8:00
power_sql=true参数开启外,也可以在query语句中添加set session parallel_sql=true;
--client-name指定配置名称,或通过--profile使用阿里云CLI凭证
## 返回结果说明
返回结果为JSON格式,主要包含两部分:
data:查询结果数据数组,包含日志字段和分析结果
meta:查询元信息,包括执行状态、处理行数、CPU耗时、是否准确等
示例返回结果:
```json
{
"data": [
{
"__source__": "192.168.1.100",
"__time__": "1747297200",
"pv": "1256",
"status": "200"
},
{
"__source__": "192.168.1.101",
"__time__": "1747297200",
"pv": "42",
"status": "500"
}
],
"meta": {
"count": 2,
"isAccurate": true,
"progress": "Complete",
"processedRows": 1298,
"cpuSec": 0.032,
"elapsedMillisecond": 15
}
}
```
## 错误处理与常见问题
| 错误现象 | 可能原因 | 解决方法 |
| --------------------------------------------------- | ------------------------- | ------------------------------------ |
| 命令未找到:aliyunlog | Python环境变量未配置或CLI未安装 | 检查Python环境变量,重新执行安装命令 |
| 权限不足:Unauthorized | AccessKey错误或无SLS操作权限 | 验证AccessKey有效性,为RAM用户授予SLS相关权限 |
| 服务不可达:Connection refused | Endpoint错误或网络不通 | 检查region-endpoint是否正确,确认网络可访问SLS服务入口 |
| 时间格式错误 | 未指定时区或格式不正确 | 使用%Y-%m-%d %H:%M:%S+8:00格式,确保时区正确 |
| SQL语法错误 | 分析语句语法不正确 | 检查SQL语句,参考SLS查询分析语法文档 |
| 中文显示乱码 | 输出未配置no_escape | 添加--format-output=json,no_escape参数 |
| 参数无效:offset/size | 使用了SQL分析语句但仍传入offset/size | 移除offset/size参数,使用SQL的LIMIT语法分页 |
| 需要我帮你补充自动分页查询和批量导出日志的高级用法示例,让这个技能支持更多实际场景吗? | | |
共 1 个版本