Loading...
Loading...
通过 Python(alibabacloud_sls20201230)调用阿里云 SLS:ListProject(列出 Project)、ListLogStores(列出日志库)、GetLogsV2(查询日志)。 适用于「列出 Project」「列出 LogStore」「查询 SLS 日志」「搜索与分析日志」等场景。 API 契约见 reference/*.yml;可运行示例见 scripts/;依赖见 scripts/requirements.txt。
npx skill4agent add shigzz/aliyun-skills aliyun-sls-skillsaliyun-sls-skills/
├── SKILL.md
├── .env.example
├── reference/ # API 定义(YML),含入参与返回值
│ ├── list_project.yml
│ ├── list_logstores.yml
│ └── get_log_v2.yml
└── scripts/
├── sls_util.py # 凭证与 Client 构造(供脚本复用)
├── list_project.py
├── list_logstores.py
├── get_logs_v2.py
└── requirements.txtaliyun-sls-skillspython scripts/list_logstores.py ...pip install -r aliyun-sls-skills/scripts/requirements.txt| 能力 | API | 用途 | 使用场景 |
|---|---|---|---|
| 列出 Project | ListProject | 列出账号下 SLS Project | 确认 project 名称、分页浏览 |
| 列出日志库 | ListLogStores | 列出 Project 下 LogStore | 确认 logstore 名称、分页浏览 |
| 查询日志 | GetLogsV2 | 按时间范围与查询语句拉取日志 | 检索错误日志、SQL 分析、scan 模式 |
projectlogstore[from, to)from < toalibabacloud_sls20201230.modelsGetLogsV2Requestfrom_tofrom_timeto_time.aliyun-config.json.aliyun-config.json{
"version": 1,
"sls": {
"region": "cn-hangzhou",
"project": "your-project",
"logstore": "your-logstore",
"last_query_at": "2026-04-01T12:00:00Z"
},
"notes": "可选备注"
}| 字段 | 说明 |
|---|---|
| 配置文件版本号 |
| SLS 所在地域(如 |
| Project 名称 |
| 默认 LogStore 名称(可选) |
| 上次查询时间(ISO 8601 格式) |
.aliyun-config.jsonimport json
import os
config_path = os.path.join(os.getcwd(), ".aliyun-config.json")
sls_config = {}
if os.path.exists(config_path):
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
sls_config = config.get("sls", {})
region = sls_config.get("region")
project = sls_config.get("project")
logstore = sls_config.get("logstore").aliyun-config.jsonsls.regionsls.projectsls.logstore.aliyun-config.jsonsls.last_query_atimport json
import os
from datetime import datetime, timezone
config_path = os.path.join(os.getcwd(), ".aliyun-config.json")
# 读取现有配置(若存在)
config = {}
if os.path.exists(config_path):
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
# 更新 sls 部分
config["version"] = config.get("version", 1)
config["sls"] = {
"region": "cn-hangzhou",
"project": "your-project",
"logstore": "your-logstore",
"last_query_at": datetime.now(timezone.utc).isoformat()
}
# 写入
with open(config_path, "w", encoding="utf-8") as f:
json.dump(config, f, indent=2, ensure_ascii=False).aliyun-config.jsonosscdndomainsls{
"version": 1,
"sls": { "region": "cn-hangzhou", "project": "..." },
"oss": { "bucket": "...", "region": "..." },
"cdn": { "domain": "..." }
}.env.aliyun-config.json.gitignoreecho "AK_ID: ${ALIBABA_CLOUD_ACCESS_KEY_ID:+已设置}"
echo "AK_SECRET: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET:+已设置}".envfind . -maxdepth 1 -name ".env" -exec cat {} \;from dotenv import load_dotenv
import os
access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID", "").strip()
access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "").strip()
if not access_key_id or not access_key_secret:
load_dotenv()
access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID", "").strip()
access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "").strip()
if not access_key_id or not access_key_secret:
raise RuntimeError("缺少 ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET")pip install -r aliyun-sls-skills/scripts/requirements.txtpip install alibabacloud_sls20201230 alibabacloud_credentials alibabacloud_tea_openapi alibabacloud_tea_util python-dotenvendpoint{region}.log.aliyuncs.comcreate_sls_client(region)CredentialClient()open_api_models.Config(credential=credential)endpointfrom alibabacloud_sls20201230.client import Client as Sls20201230Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
credential = CredentialClient()
config = open_api_models.Config(credential=credential)
config.endpoint = f"{region}.log.aliyuncs.com"
client = Sls20201230Client(config)| 概念 | SDK 字段 | 说明 |
|---|---|---|
| projectName | | Project 名称,支持模糊匹配 |
| offset | | 查询开始行,默认 0 |
| size | | 每页行数,默认 500,最大 500 |
| resourceGroupId | | 资源组 ID |
| fetchQuota | | 是否获取 Project 配额信息 |
create_client()ListProjectRequestclient.list_project_with_options(request, headers, runtime)resp.body.to_map()cd aliyun-sls-skills
python scripts/list_project.pyfrom alibabacloud_sls20201230.client import Client as Sls20201230Client
from alibabacloud_sls20201230 import models as sls_models
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
import json
credential = CredentialClient()
config = open_api_models.Config(credential=credential)
config.endpoint = "cn-hangzhou.log.aliyuncs.com"
client = Sls20201230Client(config)
request = sls_models.ListProjectRequest(project_name="test", size=10)
runtime = util_models.RuntimeOptions()
resp = client.list_project_with_options(request, {}, runtime)
print(json.dumps(resp.body.to_map(), default=str, indent=2, ensure_ascii=False))totalcountprojects| 概念 | SDK 字段 | 说明 |
|---|---|---|
| project | 方法参数 | 必填 |
| logstoreName | | 模糊匹配过滤 |
| offset / size | | 分页,size 最大 500,默认 200 |
| telemetryType | | 日志 / Metrics |
| mode | | |
create_sls_client(region)ListLogStoresRequestclient.list_log_stores_with_options(project, request, {}, runtime)resp.body.to_map()cd aliyun-sls-skills
python scripts/list_logstores.py --region cn-hangzhou --project your-project
python scripts/list_logstores.py --region cn-hangzhou --project your-project --logstore-name appfrom alibabacloud_sls20201230 import models as sls_models
from alibabacloud_tea_util import models as util_models
import json
from sls_util import create_sls_client
client = create_sls_client("cn-hangzhou")
request = sls_models.ListLogStoresRequest(logstore_name="error")
runtime = util_models.RuntimeOptions()
resp = client.list_log_stores_with_options("your-project", request, {}, runtime)
print(json.dumps(resp.body.to_map(), default=str, indent=2, ensure_ascii=False))totalcountlogstores| 概念 | SDK 字段 | 说明 |
|---|---|---|
| from(Unix 秒) | | 区间左端(含) |
| to(Unix 秒) | | 区间右端(不含) |
| query | | 搜索或 SQL 分析语句 |
| line / offset | | 搜索语句下的分页,line 最大 100 |
| reverse | | 是否按时间逆序(搜索语句时) |
| topic | | 主题 |
| powerSql | | SQL 增强 |
| session | | 如 |
| Accept-Encoding | | 如 |
若为分析语句,query/line往往不生效,请用 SQLoffset等分页(见官方文档)。LIMIT
GetLogsV2Request(from_=..., to=..., query=..., ...)headers = GetLogsV2Headers(accept_encoding="lz4")gzipclient.get_logs_v2with_options(project, logstore, request, headers, runtime)resp.body.to_map()metadatapython scripts/get_logs_v2.py --region cn-hangzhou --project your-project --logstore your-logstore --recent-minutes 15 --query "error"
python scripts/get_logs_v2.py --region cn-hangzhou --project your-project --logstore your-logstore \
--from-time 1700000000 --to-time 1700003600 --query '* | SELECT count(*) AS cnt'
python scripts/get_logs_v2.py --region cn-hangzhou --project your-project --logstore your-logstore \
--from-time 1700000000 --to-time 1700003600 --query '*' --session "mode=scan"import time
from alibabacloud_sls20201230 import models as sls_models
from alibabacloud_tea_util import models as util_models
import json
from sls_util import create_sls_client
client = create_sls_client("cn-hangzhou")
now = int(time.time())
request = sls_models.GetLogsV2Request(
query="error",
from_=now - 900,
to=now,
line=100,
offset=0,
reverse=False,
)
headers = sls_models.GetLogsV2Headers(accept_encoding="lz4")
runtime = util_models.RuntimeOptions()
resp = client.get_logs_v2with_options("your-project", "your-logstore", request, headers, runtime)
print(json.dumps(resp.body.to_map(), default=str, indent=2, ensure_ascii=False))try:
resp = client.get_logs_v2with_options(project, logstore, request, headers, runtime)
except Exception as error:
print(getattr(error, "message", str(error)))
if hasattr(error, "data") and error.data:
print(error.data.get("Recommend", ""))print_operation_error| 常见情况 | 说明 |
|---|---|
| 401/403 | AK/SK 或 RAM 权限不足 |
| ProjectNotExist | Project 名或 region 错误 |
| LogStoreNotExist | 先用 ListLogStores 核对名称 |
| ParameterInvalid | 时间区间、query 语法、offset 等参数不合法 |
.envscripts/requirements.txt.aliyun-config.jsonquerybodymetadata.aliyun-config.json