@optima-chat/dev-skills 0.7.5 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.claude/commands/logs.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
快速查看服务日志,支持 CI/Stage/Prod 三个环境。
|
|
4
4
|
|
|
5
|
-
**版本**: v0.
|
|
5
|
+
**版本**: v0.3.0
|
|
6
6
|
|
|
7
7
|
## 使用场景
|
|
8
8
|
|
|
@@ -19,25 +19,32 @@
|
|
|
19
19
|
## 参数
|
|
20
20
|
|
|
21
21
|
- `service` (必需): 服务名称
|
|
22
|
-
- `commerce-backend` - 电商后端
|
|
23
|
-
- `user-auth` -
|
|
24
|
-
- `
|
|
22
|
+
- `commerce-backend` - 电商后端 API
|
|
23
|
+
- `user-auth` - 用户认证服务
|
|
24
|
+
- `user-auth-admin` - 用户认证管理后台
|
|
25
25
|
- `agentic-chat` - AI 聊天服务
|
|
26
|
-
- `
|
|
27
|
-
- `
|
|
26
|
+
- `bi-backend` - BI 后端
|
|
27
|
+
- `bi-dashboard` - BI 仪表板
|
|
28
|
+
- `session-gateway` - AI Shell 网关
|
|
29
|
+
- `ai-shell-web-ui` - Shell Web UI
|
|
30
|
+
- `optima-scout` - 产品研究工具
|
|
31
|
+
- `optima-store` - 商城前端(仅 Stage)
|
|
32
|
+
- `commerce-rq-worker` - RQ 后台任务
|
|
33
|
+
- `commerce-rq-scheduler` - RQ 定时调度
|
|
28
34
|
- `lines` (可选): 显示行数,默认 50
|
|
29
35
|
- `environment` (可选): 环境,默认 ci
|
|
30
36
|
- `ci` - CI 持续集成环境(开发环境,默认)
|
|
31
|
-
- `stage` - Stage
|
|
32
|
-
- `prod` -
|
|
37
|
+
- `stage` - Stage 预发布环境(ECS Fargate)
|
|
38
|
+
- `prod` - 生产环境(ECS Fargate)
|
|
33
39
|
|
|
34
40
|
## 示例
|
|
35
41
|
|
|
36
42
|
```bash
|
|
37
43
|
/logs commerce-backend # 查看 CI 环境最近 50 行(默认)
|
|
38
44
|
/logs user-auth 100 # 查看 CI 环境最近 100 行(默认)
|
|
39
|
-
/logs
|
|
45
|
+
/logs agentic-chat 200 stage # 查看 Stage 环境最近 200 行
|
|
40
46
|
/logs user-auth 100 prod # 查看 Prod 环境最近 100 行
|
|
47
|
+
/logs session-gateway 50 prod # 查看 Prod AI Shell 网关日志
|
|
41
48
|
```
|
|
42
49
|
|
|
43
50
|
## 特殊参数处理
|
|
@@ -49,7 +56,7 @@
|
|
|
49
56
|
**重要提示**:根据用户指定的 `environment` 参数选择执行方式:
|
|
50
57
|
- `ci` 或未指定 → 使用 SSH + Docker Compose(第 0 节,默认)
|
|
51
58
|
- `stage` → 使用 AWS CloudWatch Logs - ECS(第 1 节)
|
|
52
|
-
- `prod` → 使用 AWS CloudWatch Logs -
|
|
59
|
+
- `prod` → 使用 AWS CloudWatch Logs - ECS(第 2 节)
|
|
53
60
|
|
|
54
61
|
### 0. CI 环境(environment = "ci" 或默认)
|
|
55
62
|
|
|
@@ -71,10 +78,7 @@ sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST}
|
|
|
71
78
|
**服务映射**(路径 + docker compose 服务名):
|
|
72
79
|
- `commerce-backend` → `/data/xuhao/commerce-backend` → `commerce-backend`
|
|
73
80
|
- `user-auth` → `/data/xuhao/user-auth` → `user-auth`
|
|
74
|
-
- `mcp-host` → `/data/xuhao/mcp-host` → `app`
|
|
75
81
|
- `agentic-chat` → `/data/xuhao/agentic-chat` → `optima-ai-chat`
|
|
76
|
-
- `commerce-mcp` → `/data/xuhao/actions-runner/_work/commerce-mcp/commerce-mcp` → `commerce-mcp`
|
|
77
|
-
- `comfy-mcp` → `/data/xuhao/actions-runner/_work/comfy-mcp/comfy-mcp` → `comfy-mcp`
|
|
78
82
|
|
|
79
83
|
**完整命令示例**(先获取配置):
|
|
80
84
|
```bash
|
|
@@ -89,21 +93,13 @@ sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST}
|
|
|
89
93
|
# user-auth
|
|
90
94
|
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "cd /data/xuhao/user-auth && docker compose logs --tail 50 user-auth"
|
|
91
95
|
|
|
92
|
-
# mcp-host
|
|
93
|
-
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "cd /data/xuhao/mcp-host && docker compose logs --tail 50 app"
|
|
94
|
-
|
|
95
96
|
# agentic-chat
|
|
96
97
|
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "cd /data/xuhao/agentic-chat && docker compose logs --tail 50 optima-ai-chat"
|
|
97
|
-
|
|
98
|
-
# commerce-mcp (via actions-runner)
|
|
99
|
-
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "cd /data/xuhao/actions-runner/_work/commerce-mcp/commerce-mcp && docker compose logs --tail 50 commerce-mcp"
|
|
100
|
-
|
|
101
|
-
# comfy-mcp (via actions-runner)
|
|
102
|
-
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "cd /data/xuhao/actions-runner/_work/comfy-mcp/comfy-mcp && docker compose logs --tail 50 comfy-mcp"
|
|
103
98
|
```
|
|
104
99
|
|
|
105
100
|
### 1. Stage 环境(environment = "stage")
|
|
106
101
|
|
|
102
|
+
**部署方式**: ECS Fargate(Fargate Spot 降低成本)
|
|
107
103
|
**日志路径格式**: `/ecs/{service}-stage`
|
|
108
104
|
|
|
109
105
|
**步骤**:
|
|
@@ -120,54 +116,56 @@ aws logs get-log-events --log-group-name /ecs/commerce-backend-stage --log-strea
|
|
|
120
116
|
**服务映射**:
|
|
121
117
|
- `commerce-backend` → `/ecs/commerce-backend-stage`
|
|
122
118
|
- `user-auth` → `/ecs/user-auth-stage`
|
|
123
|
-
- `
|
|
119
|
+
- `user-auth-admin` → `/ecs/user-auth-admin-stage`
|
|
124
120
|
- `agentic-chat` → `/ecs/agentic-chat-stage`
|
|
125
|
-
- `
|
|
126
|
-
- `
|
|
121
|
+
- `bi-backend` → `/ecs/bi-backend-stage`
|
|
122
|
+
- `bi-dashboard` → `/ecs/bi-dashboard-stage`
|
|
123
|
+
- `session-gateway` → `/ecs/session-gateway-stage`
|
|
124
|
+
- `ai-shell-web-ui` → `/ecs/ai-shell-web-ui-stage`
|
|
125
|
+
- `optima-scout` → `/ecs/optima-scout-stage`
|
|
126
|
+
- `optima-store` → `/ecs/optima-store-stage`
|
|
127
|
+
- `commerce-rq-worker` → `/ecs/commerce-rq-worker-stage`
|
|
128
|
+
- `commerce-rq-scheduler` → `/ecs/commerce-rq-scheduler-stage`
|
|
127
129
|
|
|
128
130
|
### 2. Prod 环境(environment = "prod")
|
|
129
131
|
|
|
130
|
-
|
|
132
|
+
**部署方式**: ECS Fargate(核心服务标准 Fargate,非核心服务 Fargate Spot)
|
|
133
|
+
**日志路径格式**: `/ecs/{service}-prod`
|
|
131
134
|
|
|
132
135
|
**IMPORTANT**: Prod 环境必须指定 `--region ap-southeast-1`
|
|
133
136
|
|
|
134
137
|
**推荐方式(使用 aws logs tail)**:
|
|
135
138
|
```bash
|
|
136
|
-
#
|
|
137
|
-
aws logs tail /
|
|
139
|
+
# 查看最近日志(实时跟踪)
|
|
140
|
+
aws logs tail /ecs/commerce-backend-prod --since 1h --region ap-southeast-1
|
|
138
141
|
|
|
139
|
-
#
|
|
140
|
-
aws logs tail /
|
|
142
|
+
# 过滤错误日志
|
|
143
|
+
aws logs tail /ecs/user-auth-prod --filter-pattern "ERROR" --region ap-southeast-1
|
|
141
144
|
```
|
|
142
145
|
|
|
143
146
|
**备用方式(使用 get-log-events)**:
|
|
144
147
|
```bash
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
# 1. 获取最新的 log stream(ECS Task ID 是动态的)
|
|
149
|
+
STREAM=$(aws logs describe-log-streams --log-group-name /ecs/commerce-backend-prod --order-by LastEventTime --descending --max-items 1 --region ap-southeast-1 | jq -r '.logStreams[0].logStreamName')
|
|
150
|
+
|
|
151
|
+
# 2. 获取日志内容(纯文本)
|
|
152
|
+
aws logs get-log-events --log-group-name /ecs/commerce-backend-prod --log-stream-name "$STREAM" --limit 50 --region ap-southeast-1 | jq -r '.events[] | .message'
|
|
148
153
|
```
|
|
149
154
|
|
|
150
155
|
**服务映射**:
|
|
151
|
-
- `commerce-backend` → `/
|
|
152
|
-
- `user-auth` → `/
|
|
153
|
-
- `
|
|
154
|
-
- `agentic-chat` → `/
|
|
155
|
-
- `
|
|
156
|
-
- `
|
|
157
|
-
- `
|
|
158
|
-
- `
|
|
159
|
-
- `
|
|
160
|
-
- `
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
- `rq-worker` - 后台任务日志
|
|
165
|
-
- `rq-scheduler` - 调度器日志
|
|
166
|
-
|
|
167
|
-
**注意**:
|
|
168
|
-
- MCP 服务部署在 EC2 (ec2-1az),日志路径为 `/optima/prod/ec2-1az/{service}`
|
|
169
|
-
- 核心服务(commerce-backend、user-auth 等)日志路径为 `/optima/prod/{service}`
|
|
170
|
-
- **必须指定 `--region ap-southeast-1`**
|
|
156
|
+
- `commerce-backend` → `/ecs/commerce-backend-prod`
|
|
157
|
+
- `user-auth` → `/ecs/user-auth-prod`
|
|
158
|
+
- `user-auth-admin` → `/ecs/user-auth-admin-prod`
|
|
159
|
+
- `agentic-chat` → `/ecs/agentic-chat-prod`
|
|
160
|
+
- `bi-backend` → `/ecs/bi-backend-prod`
|
|
161
|
+
- `bi-dashboard` → `/ecs/bi-dashboard-prod`
|
|
162
|
+
- `session-gateway` → `/ecs/session-gateway-prod`
|
|
163
|
+
- `ai-shell-web-ui` → `/ecs/ai-shell-web-ui-prod`
|
|
164
|
+
- `optima-scout` → `/ecs/optima-scout-prod`
|
|
165
|
+
- `commerce-rq-worker` → `/ecs/commerce-rq-worker-prod`
|
|
166
|
+
- `commerce-rq-scheduler` → `/ecs/commerce-rq-scheduler-prod`
|
|
167
|
+
|
|
168
|
+
**注意**: `optima-store` 仅在 Stage 环境部署
|
|
171
169
|
|
|
172
170
|
## 完整示例脚本
|
|
173
171
|
|
|
@@ -185,14 +183,13 @@ aws logs get-log-events --log-group-name /ecs/${SERVICE}-stage --log-stream-name
|
|
|
185
183
|
### Prod 环境
|
|
186
184
|
```bash
|
|
187
185
|
# 推荐方式:使用 aws logs tail
|
|
188
|
-
|
|
189
|
-
aws logs tail /optima/prod/commerce-backend --since 1h --region ap-southeast-1
|
|
190
|
-
|
|
191
|
-
# MCP 服务(ec2-1az 路径)
|
|
192
|
-
aws logs tail /optima/prod/ec2-1az/commerce-mcp --since 1h --region ap-southeast-1
|
|
186
|
+
aws logs tail /ecs/commerce-backend-prod --since 1h --region ap-southeast-1
|
|
193
187
|
|
|
194
|
-
# 备用方式:使用 get-log-events
|
|
195
|
-
|
|
188
|
+
# 备用方式:使用 get-log-events(获取指定行数)
|
|
189
|
+
SERVICE="commerce-backend"
|
|
190
|
+
LINES=50
|
|
191
|
+
STREAM=$(aws logs describe-log-streams --log-group-name /ecs/${SERVICE}-prod --order-by LastEventTime --descending --max-items 1 --region ap-southeast-1 | jq -r '.logStreams[0].logStreamName')
|
|
192
|
+
aws logs get-log-events --log-group-name /ecs/${SERVICE}-prod --log-stream-name "$STREAM" --limit $LINES --region ap-southeast-1 | jq -r '.events[] | .message'
|
|
196
193
|
```
|
|
197
194
|
|
|
198
195
|
## 常见错误处理
|
|
@@ -204,8 +201,7 @@ aws logs get-log-events --log-group-name /optima/prod/commerce-backend --log-str
|
|
|
204
201
|
**解决**:
|
|
205
202
|
```bash
|
|
206
203
|
# 列出所有可用的日志组
|
|
207
|
-
aws logs describe-log-groups --log-group-name-prefix /ecs
|
|
208
|
-
aws logs describe-log-groups --log-group-name-prefix /optima/prod
|
|
204
|
+
aws logs describe-log-groups --log-group-name-prefix /ecs --region ap-southeast-1
|
|
209
205
|
```
|
|
210
206
|
|
|
211
207
|
### 错误:No log streams found
|
|
@@ -222,10 +218,10 @@ aws logs describe-log-streams \
|
|
|
222
218
|
|
|
223
219
|
## 注意事项
|
|
224
220
|
|
|
225
|
-
1. **Stage 环境**: log stream 名称是动态的(ECS Task ID),需要先查询最新的 stream
|
|
226
|
-
2.
|
|
227
|
-
3.
|
|
228
|
-
4.
|
|
221
|
+
1. **Stage/Prod 环境**: log stream 名称是动态的(ECS Task ID),需要先查询最新的 stream
|
|
222
|
+
2. **日志延迟**: CloudWatch Logs 可能有 1-2 秒延迟
|
|
223
|
+
3. **权限要求**: 需要 AWS CLI 配置了正确的凭证和权限
|
|
224
|
+
4. **日志保留**: Stage 和 Prod 环境日志保留 7 天
|
|
229
225
|
|
|
230
226
|
## 相关资源
|
|
231
227
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
执行 SQL 查询,支持 CI/Stage/Prod 三个环境。
|
|
4
4
|
|
|
5
|
-
**版本**: v0.
|
|
5
|
+
**版本**: v0.6.0
|
|
6
6
|
|
|
7
7
|
## 使用场景
|
|
8
8
|
|
|
@@ -44,7 +44,6 @@ optima-query-db commerce-backend "SELECT * FROM products LIMIT 5" prod
|
|
|
44
44
|
- `service` (必需): 服务名称
|
|
45
45
|
- `commerce-backend` - 电商后端数据库
|
|
46
46
|
- `user-auth` - 用户认证数据库
|
|
47
|
-
- `mcp-host` - MCP 协调器数据库
|
|
48
47
|
- `agentic-chat` - AI 聊天服务数据库
|
|
49
48
|
- `sql` (必需): SQL 查询语句(用引号包裹)
|
|
50
49
|
- `environment` (可选): 环境,默认 ci
|
|
@@ -133,12 +132,6 @@ sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST}
|
|
|
133
132
|
- 密码: `password123`
|
|
134
133
|
- 数据库: `userauth`
|
|
135
134
|
|
|
136
|
-
- `mcp-host`:
|
|
137
|
-
- 容器: `mcp-host-db-1`
|
|
138
|
-
- 用户: `mcp_user`
|
|
139
|
-
- 密码: `mcp_password`
|
|
140
|
-
- 数据库: `mcp_host`
|
|
141
|
-
|
|
142
135
|
- `agentic-chat`:
|
|
143
136
|
- 容器: `optima-postgres`
|
|
144
137
|
- 用户: `postgres`
|
|
@@ -158,9 +151,6 @@ sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST}
|
|
|
158
151
|
# user-auth
|
|
159
152
|
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec user-auth-postgres-1 psql -U userauth -d userauth -c \"SELECT COUNT(*) FROM users\""
|
|
160
153
|
|
|
161
|
-
# mcp-host
|
|
162
|
-
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec mcp-host-db-1 psql -U mcp_user -d mcp_host -c \"SELECT COUNT(*) FROM sessions\""
|
|
163
|
-
|
|
164
154
|
# agentic-chat
|
|
165
155
|
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec optima-postgres psql -U postgres -d optima_chat -c \"SELECT COUNT(*) FROM conversations\""
|
|
166
156
|
```
|
|
@@ -199,59 +189,51 @@ print(f\"COMMERCE_DB_USER={secrets['COMMERCE_DB_USER']}\")
|
|
|
199
189
|
print(f\"COMMERCE_DB_PASSWORD={secrets['COMMERCE_DB_PASSWORD']}\")
|
|
200
190
|
" > /tmp/stage_db_config.sh && source /tmp/stage_db_config.sh
|
|
201
191
|
|
|
202
|
-
# 4. 建立 SSH 隧道到
|
|
203
|
-
ssh -i ~/.ssh/optima-ec2-key -f -N -L 15432
|
|
192
|
+
# 4. 建立 SSH 隧道到 Shared EC2,通过隧道访问 Stage RDS
|
|
193
|
+
ssh -i ~/.ssh/optima-ec2-key -f -N -L 15432:optima-stage-postgres.ctg866o0ehac.ap-southeast-1.rds.amazonaws.com:5432 ec2-user@13.251.46.219
|
|
204
194
|
|
|
205
195
|
# 5. 通过本地端口 15432 连接到 RDS
|
|
206
|
-
PGPASSWORD="${COMMERCE_DB_PASSWORD}" psql -h localhost -p 15432 -U "${COMMERCE_DB_USER}" -d
|
|
196
|
+
PGPASSWORD="${COMMERCE_DB_PASSWORD}" psql -h localhost -p 15432 -U "${COMMERCE_DB_USER}" -d optima_commerce -c "SELECT COUNT(*) FROM products"
|
|
207
197
|
|
|
208
198
|
# 6. 关闭 SSH 隧道(可选)
|
|
209
199
|
pkill -f "ssh.*15432:${DATABASE_HOST}:5432"
|
|
210
200
|
```
|
|
211
201
|
|
|
212
|
-
|
|
202
|
+
**完整示例(三个服务)**:
|
|
213
203
|
```bash
|
|
214
204
|
# commerce-backend
|
|
215
|
-
# 使用 COMMERCE_DB_USER, COMMERCE_DB_PASSWORD, 数据库:
|
|
205
|
+
# 使用 COMMERCE_DB_USER, COMMERCE_DB_PASSWORD, 数据库: optima_commerce
|
|
216
206
|
|
|
217
207
|
# user-auth
|
|
218
|
-
# 使用 AUTH_DB_USER, AUTH_DB_PASSWORD, 数据库:
|
|
219
|
-
|
|
220
|
-
# mcp-host
|
|
221
|
-
# 使用 MCP_DB_USER, MCP_DB_PASSWORD, 数据库: optima_stage_mcp
|
|
208
|
+
# 使用 AUTH_DB_USER, AUTH_DB_PASSWORD, 数据库: optima_auth
|
|
222
209
|
|
|
223
210
|
# agentic-chat
|
|
224
|
-
# 使用 CHAT_DB_USER, CHAT_DB_PASSWORD, 数据库:
|
|
211
|
+
# 使用 CHAT_DB_USER, CHAT_DB_PASSWORD, 数据库: optima_chat
|
|
225
212
|
```
|
|
226
213
|
|
|
227
214
|
**数据库配置映射**:
|
|
228
215
|
- `commerce-backend`:
|
|
229
|
-
- 数据库: `
|
|
216
|
+
- 数据库: `optima_commerce`
|
|
230
217
|
- 用户: Infisical `COMMERCE_DB_USER`
|
|
231
218
|
- 密码: Infisical `COMMERCE_DB_PASSWORD`
|
|
232
219
|
|
|
233
220
|
- `user-auth`:
|
|
234
|
-
- 数据库: `
|
|
221
|
+
- 数据库: `optima_auth`
|
|
235
222
|
- 用户: Infisical `AUTH_DB_USER`
|
|
236
223
|
- 密码: Infisical `AUTH_DB_PASSWORD`
|
|
237
224
|
|
|
238
|
-
- `mcp-host`:
|
|
239
|
-
- 数据库: `optima_stage_mcp`
|
|
240
|
-
- 用户: Infisical `MCP_DB_USER`
|
|
241
|
-
- 密码: Infisical `MCP_DB_PASSWORD`
|
|
242
|
-
|
|
243
225
|
- `agentic-chat`:
|
|
244
|
-
- 数据库: `
|
|
226
|
+
- 数据库: `optima_chat`
|
|
245
227
|
- 用户: Infisical `CHAT_DB_USER`
|
|
246
228
|
- 密码: Infisical `CHAT_DB_PASSWORD`
|
|
247
229
|
|
|
248
230
|
**说明**:
|
|
249
231
|
- Infisical 配置从 GitHub Variables 获取
|
|
250
232
|
- 数据库密钥从 Infisical 动态获取(项目: optima-secrets, 环境: staging, 路径: /infrastructure)
|
|
251
|
-
-
|
|
252
|
-
-
|
|
253
|
-
- SSH 隧道: 本地端口 `15432` → EC2 → RDS `5432`
|
|
254
|
-
- Stage 和 Prod
|
|
233
|
+
- Stage RDS: `optima-stage-postgres.ctg866o0ehac.ap-southeast-1.rds.amazonaws.com`
|
|
234
|
+
- Shared EC2 IP: `13.251.46.219`
|
|
235
|
+
- SSH 隧道: 本地端口 `15432` → Shared EC2 → Stage RDS `5432`
|
|
236
|
+
- Stage 和 Prod 有独立的 RDS 实例
|
|
255
237
|
|
|
256
238
|
### 2. Prod 环境(environment = "prod")
|
|
257
239
|
|
|
@@ -288,8 +270,8 @@ print(f\"COMMERCE_DB_USER={secrets['COMMERCE_DB_USER']}\")
|
|
|
288
270
|
print(f\"COMMERCE_DB_PASSWORD={secrets['COMMERCE_DB_PASSWORD']}\")
|
|
289
271
|
" > /tmp/prod_db_config.sh && source /tmp/prod_db_config.sh
|
|
290
272
|
|
|
291
|
-
# 4. 建立 SSH 隧道到
|
|
292
|
-
ssh -i ~/.ssh/optima-ec2-key -f -N -L 15433
|
|
273
|
+
# 4. 建立 SSH 隧道到 Shared EC2,通过隧道访问 Prod RDS
|
|
274
|
+
ssh -i ~/.ssh/optima-ec2-key -f -N -L 15433:optima-prod-postgres.ctg866o0ehac.ap-southeast-1.rds.amazonaws.com:5432 ec2-user@13.251.46.219
|
|
293
275
|
|
|
294
276
|
# 5. 通过本地端口 15433 连接到 RDS
|
|
295
277
|
PGPASSWORD="${COMMERCE_DB_PASSWORD}" psql -h localhost -p 15433 -U "${COMMERCE_DB_USER}" -d optima_commerce -c "SELECT COUNT(*) FROM products"
|
|
@@ -298,7 +280,7 @@ PGPASSWORD="${COMMERCE_DB_PASSWORD}" psql -h localhost -p 15433 -U "${COMMERCE_D
|
|
|
298
280
|
pkill -f "ssh.*15433:${DATABASE_HOST}:5432"
|
|
299
281
|
```
|
|
300
282
|
|
|
301
|
-
|
|
283
|
+
**完整示例(三个服务)**:
|
|
302
284
|
```bash
|
|
303
285
|
# commerce-backend
|
|
304
286
|
# 使用 COMMERCE_DB_USER, COMMERCE_DB_PASSWORD, 数据库: optima_commerce
|
|
@@ -306,9 +288,6 @@ pkill -f "ssh.*15433:${DATABASE_HOST}:5432"
|
|
|
306
288
|
# user-auth
|
|
307
289
|
# 使用 AUTH_DB_USER, AUTH_DB_PASSWORD, 数据库: optima_auth
|
|
308
290
|
|
|
309
|
-
# mcp-host
|
|
310
|
-
# 使用 MCP_DB_USER, MCP_DB_PASSWORD, 数据库: optima_mcp
|
|
311
|
-
|
|
312
291
|
# agentic-chat
|
|
313
292
|
# 使用 CHAT_DB_USER, CHAT_DB_PASSWORD, 数据库: optima_chat
|
|
314
293
|
```
|
|
@@ -324,11 +303,6 @@ pkill -f "ssh.*15433:${DATABASE_HOST}:5432"
|
|
|
324
303
|
- 用户: Infisical `AUTH_DB_USER`
|
|
325
304
|
- 密码: Infisical `AUTH_DB_PASSWORD`
|
|
326
305
|
|
|
327
|
-
- `mcp-host`:
|
|
328
|
-
- 数据库: `optima_mcp`
|
|
329
|
-
- 用户: Infisical `MCP_DB_USER`
|
|
330
|
-
- 密码: Infisical `MCP_DB_PASSWORD`
|
|
331
|
-
|
|
332
306
|
- `agentic-chat`:
|
|
333
307
|
- 数据库: `optima_chat`
|
|
334
308
|
- 用户: Infisical `CHAT_DB_USER`
|
|
@@ -337,10 +311,11 @@ pkill -f "ssh.*15433:${DATABASE_HOST}:5432"
|
|
|
337
311
|
**说明**:
|
|
338
312
|
- Infisical 配置从 GitHub Variables 获取
|
|
339
313
|
- 数据库密钥从 Infisical 动态获取(项目: optima-secrets, 环境: prod, 路径: /infrastructure)
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
- SSH 隧道: 本地端口 `15433` → EC2 → RDS `5432`
|
|
343
|
-
- Stage
|
|
314
|
+
- Prod RDS: `optima-prod-postgres.ctg866o0ehac.ap-southeast-1.rds.amazonaws.com`
|
|
315
|
+
- Shared EC2 IP: `13.251.46.219`
|
|
316
|
+
- SSH 隧道: 本地端口 `15433` → Shared EC2 → Prod RDS `5432`
|
|
317
|
+
- Stage 用端口 `15432`,Prod 用端口 `15433`
|
|
318
|
+
- Stage 和 Prod 有独立的 RDS 实例
|
|
344
319
|
|
|
345
320
|
**⚠️ 生产环境安全规则**:
|
|
346
321
|
1. **谨慎操作** - 生产数据库,避免误操作
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"WebSearch",
|
|
5
|
+
"WebFetch(domain:code.claude.com)",
|
|
6
|
+
"WebFetch(domain:platform.claude.com)",
|
|
7
|
+
"WebFetch(domain:github.com)",
|
|
8
|
+
"Bash(gh repo view:*)",
|
|
9
|
+
"Bash(gh repo clone:*)",
|
|
10
|
+
"Bash(gh repo list:*)",
|
|
11
|
+
"Read(//private/tmp/optima-docs/**)",
|
|
12
|
+
"Read(//tmp/optima-docs/**)",
|
|
13
|
+
"Bash(git init:*)",
|
|
14
|
+
"Bash(gh repo create:*)",
|
|
15
|
+
"Read(//private/tmp/optima-workspace/**)",
|
|
16
|
+
"Read(//tmp/optima-workspace/**)",
|
|
17
|
+
"Read(//tmp/optima-workspace/.claude/commands/**)",
|
|
18
|
+
"Bash(git add:*)",
|
|
19
|
+
"Bash(git push:*)",
|
|
20
|
+
"Bash(find:*)",
|
|
21
|
+
"Bash(git commit:*)",
|
|
22
|
+
"Bash(aws logs get-log-events:*)",
|
|
23
|
+
"Bash(npm install:*)",
|
|
24
|
+
"Bash(optima-dev-skills:*)",
|
|
25
|
+
"Bash(optima-generate-test-token:*)",
|
|
26
|
+
"Bash(optima-query-db:*)",
|
|
27
|
+
"Bash(gh variable set:*)",
|
|
28
|
+
"Bash(npm publish:*)",
|
|
29
|
+
"Bash(python3:*)",
|
|
30
|
+
"Bash(gh api:*)",
|
|
31
|
+
"Bash(curl -s http://auth.optima.chat/openapi.json)",
|
|
32
|
+
"Bash(curl -s https://auth.optima.chat/openapi.json)",
|
|
33
|
+
"Bash(cat:*)",
|
|
34
|
+
"Bash(node /Users/verypro/optima-dev-skills/scripts/install.js:*)",
|
|
35
|
+
"Bash(aws logs tail:*)",
|
|
36
|
+
"Bash(grep:*)"
|
|
37
|
+
],
|
|
38
|
+
"deny": [],
|
|
39
|
+
"ask": []
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "logs"
|
|
3
|
+
description: "当用户请求查看日志、查看服务日志、排查问题、看看日志、检查日志、商品服务日志、后端日志、API日志、正式环境日志、生产环境日志、CI环境日志、开发环境日志时,使用此技能。支持 CI、Stage、Prod 三个环境的 commerce-backend、user-auth、agentic-chat、bi-backend、session-gateway 等服务。"
|
|
4
|
+
allowed-tools: ["Bash", "SlashCommand"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 查看服务器日志
|
|
8
|
+
|
|
9
|
+
当你需要查看服务日志排查问题时,使用这个场景。
|
|
10
|
+
|
|
11
|
+
## 适用情况
|
|
12
|
+
|
|
13
|
+
- API 返回错误,需要查看详细错误信息
|
|
14
|
+
- 服务行为异常,需要查看运行日志
|
|
15
|
+
- 监控服务状态,查看日志输出
|
|
16
|
+
- 排查数据库连接、配置问题
|
|
17
|
+
|
|
18
|
+
## 快速操作
|
|
19
|
+
|
|
20
|
+
### 1. 查看 CI 环境日志(默认)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
/logs commerce-backend
|
|
24
|
+
/logs user-auth 100
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**说明**:
|
|
28
|
+
- 查看 CI 开发环境(dev.optima.chat)
|
|
29
|
+
- 默认环境,不需要指定 `ci` 参数
|
|
30
|
+
- 通过 SSH + Docker Compose 访问
|
|
31
|
+
- 从 GitHub Variables 获取认证信息
|
|
32
|
+
|
|
33
|
+
### 2. 查看 Stage 环境日志
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/logs commerce-backend 50 stage
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**说明**:
|
|
40
|
+
- 查看 Stage 预发布环境
|
|
41
|
+
- 使用 AWS CloudWatch Logs(ECS Fargate)
|
|
42
|
+
|
|
43
|
+
**常用服务**:
|
|
44
|
+
- `commerce-backend` - 电商 API
|
|
45
|
+
- `user-auth` - 用户认证
|
|
46
|
+
- `agentic-chat` - AI 聊天服务
|
|
47
|
+
- `bi-backend` - BI 后端
|
|
48
|
+
- `session-gateway` - AI Shell 网关
|
|
49
|
+
|
|
50
|
+
### 3. 查看更多日志行数
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
/logs commerce-backend 200
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
查看最近 200 行日志,用于排查历史问题。
|
|
57
|
+
|
|
58
|
+
### 4. 查看 Prod 环境日志
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
/logs commerce-backend 100 prod
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
查看生产环境日志(通过 AWS CloudWatch,ECS Fargate)。
|
|
65
|
+
|
|
66
|
+
## 常见问题排查
|
|
67
|
+
|
|
68
|
+
### 问题 1:API 返回 500 错误
|
|
69
|
+
|
|
70
|
+
**步骤**:
|
|
71
|
+
1. 查看日志:`/logs commerce-backend 100`
|
|
72
|
+
2. 搜索 ERROR 关键字
|
|
73
|
+
3. 查看完整错误堆栈
|
|
74
|
+
4. 定位问题代码或数据
|
|
75
|
+
|
|
76
|
+
**示例日志**:
|
|
77
|
+
```
|
|
78
|
+
ERROR - 2025-01-23 10:30:45 - Exception in /products endpoint
|
|
79
|
+
Traceback:
|
|
80
|
+
File "app/routes/products.py", line 45
|
|
81
|
+
merchant = db.query(Merchant).filter(id == product.merchant_id).first()
|
|
82
|
+
MerchantNotFound: Merchant with id 'xxx' not found
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 问题 2:服务启动失败
|
|
86
|
+
|
|
87
|
+
**步骤**:
|
|
88
|
+
1. 查看启动日志:`/logs commerce-backend 200`
|
|
89
|
+
2. 查找启动错误信息
|
|
90
|
+
3. 检查环境变量、数据库连接
|
|
91
|
+
|
|
92
|
+
**常见错误**:
|
|
93
|
+
- 数据库连接失败
|
|
94
|
+
- Redis 连接失败
|
|
95
|
+
- 环境变量缺失
|
|
96
|
+
|
|
97
|
+
**示例日志**:
|
|
98
|
+
```
|
|
99
|
+
redis.exceptions.ConnectionError: Error connecting to localhost:8285.
|
|
100
|
+
Multiple exceptions: [Errno 111] Connection refused
|
|
101
|
+
ERROR: Application startup failed. Exiting.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 问题 3:性能问题(响应慢)
|
|
105
|
+
|
|
106
|
+
**步骤**:
|
|
107
|
+
1. 查看日志:`/logs commerce-backend`
|
|
108
|
+
2. 查找 "response_time" 或包含毫秒数的日志
|
|
109
|
+
3. 识别慢查询或慢接口
|
|
110
|
+
|
|
111
|
+
**示例**:
|
|
112
|
+
```
|
|
113
|
+
INFO - GET /products - response_time: 3500ms (SLOW)
|
|
114
|
+
INFO - Database query took 3200ms: SELECT * FROM products WHERE...
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 日志分析技巧
|
|
118
|
+
|
|
119
|
+
### 过滤关键信息
|
|
120
|
+
|
|
121
|
+
查看日志后,可以使用 grep 过滤:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 只看错误
|
|
125
|
+
/logs commerce-backend 200 | grep -i error
|
|
126
|
+
|
|
127
|
+
# 只看特定 API
|
|
128
|
+
/logs commerce-backend 200 | grep "GET /products"
|
|
129
|
+
|
|
130
|
+
# 查看 Redis 相关日志
|
|
131
|
+
/logs commerce-backend 200 | grep -i redis
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 日志级别
|
|
135
|
+
|
|
136
|
+
日志级别说明:
|
|
137
|
+
- **ERROR** - 错误,需要立即处理
|
|
138
|
+
- **WARNING** - 警告,可能有问题
|
|
139
|
+
- **INFO** - 信息,正常运行日志
|
|
140
|
+
- **DEBUG** - 调试信息,详细输出
|
|
141
|
+
|
|
142
|
+
## 环境对比
|
|
143
|
+
|
|
144
|
+
### CI 环境
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
/logs user-auth 100 ci
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**特点**:
|
|
151
|
+
- CI 开发环境,适合开发调试
|
|
152
|
+
- 实时性最好
|
|
153
|
+
- 查看 Docker Compose 日志
|
|
154
|
+
|
|
155
|
+
### Stage 环境
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
/logs commerce-backend 100 stage
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**特点**:
|
|
162
|
+
- 预发布环境
|
|
163
|
+
- AWS ECS Fargate 运行(Fargate Spot)
|
|
164
|
+
- 通过 CloudWatch Logs 查看
|
|
165
|
+
|
|
166
|
+
### Prod 环境
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
/logs commerce-backend 100 prod
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**特点**:
|
|
173
|
+
- 生产环境
|
|
174
|
+
- AWS ECS Fargate 运行
|
|
175
|
+
- 通过 CloudWatch Logs 查看
|
|
176
|
+
- 日志保留 7 天
|
|
177
|
+
|
|
178
|
+
## 支持的服务列表
|
|
179
|
+
|
|
180
|
+
| 服务 | 说明 | CI | Stage | Prod |
|
|
181
|
+
|------|------|:--:|:-----:|:----:|
|
|
182
|
+
| `commerce-backend` | 电商后端 API | ✓ | ✓ | ✓ |
|
|
183
|
+
| `user-auth` | 用户认证服务 | ✓ | ✓ | ✓ |
|
|
184
|
+
| `user-auth-admin` | 认证管理后台 | - | ✓ | ✓ |
|
|
185
|
+
| `agentic-chat` | AI 聊天服务 | ✓ | ✓ | ✓ |
|
|
186
|
+
| `bi-backend` | BI 后端 | - | ✓ | ✓ |
|
|
187
|
+
| `bi-dashboard` | BI 仪表板 | - | ✓ | ✓ |
|
|
188
|
+
| `session-gateway` | AI Shell 网关 | - | ✓ | ✓ |
|
|
189
|
+
| `ai-shell-web-ui` | Shell Web UI | - | ✓ | ✓ |
|
|
190
|
+
| `optima-scout` | 产品研究工具 | - | ✓ | ✓ |
|
|
191
|
+
| `optima-store` | 商城前端 | - | ✓ | - |
|
|
192
|
+
| `commerce-rq-worker` | RQ 后台任务 | - | ✓ | ✓ |
|
|
193
|
+
| `commerce-rq-scheduler` | RQ 定时调度 | - | ✓ | ✓ |
|
|
194
|
+
|
|
195
|
+
## 最佳实践
|
|
196
|
+
|
|
197
|
+
1. **先查日志,再动手修** - 不要猜测,看日志确认问题
|
|
198
|
+
2. **查足够多的行数** - 有时错误原因在更早的日志里
|
|
199
|
+
3. **关注启动日志** - 服务启动时的错误最关键
|
|
200
|
+
4. **保留错误日志** - 复制错误信息,方便分享讨论
|
|
201
|
+
5. **对比环境差异** - Stage 出错、Prod 正常?对比日志差异
|
|
202
|
+
|
|
203
|
+
## 相关命令
|
|
204
|
+
|
|
205
|
+
- `/logs` - 查看服务日志(详细使用方法和技术细节请查看 `/logs --help`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "query-db"
|
|
3
|
-
description: "当用户请求查询数据库、执行SQL、查看数据、统计数据、检查数据库、查询表、数据库查询时,使用此技能。支持 CI、Stage、Prod 三个环境的 commerce-backend、user-auth、
|
|
3
|
+
description: "当用户请求查询数据库、执行SQL、查看数据、统计数据、检查数据库、查询表、数据库查询时,使用此技能。支持 CI、Stage、Prod 三个环境的 commerce-backend、user-auth、agentic-chat 服务的数据库查询。优先使用 optima-query-db CLI 工具。"
|
|
4
4
|
allowed-tools: ["Bash", "SlashCommand"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -73,7 +73,6 @@ optima-query-db commerce-backend "SELECT status, COUNT(*) FROM orders GROUP BY s
|
|
|
73
73
|
**常用服务**:
|
|
74
74
|
- `commerce-backend` - 电商数据库
|
|
75
75
|
- `user-auth` - 用户认证数据库
|
|
76
|
-
- `mcp-host` - MCP 协调器数据库
|
|
77
76
|
- `agentic-chat` - AI 聊天数据库
|
|
78
77
|
|
|
79
78
|
### 常用查询示例
|
|
File without changes
|