初始化提交

This commit is contained in:
2025-10-07 15:58:15 +08:00
commit 0e593caf99
378 changed files with 77890 additions and 0 deletions

233
问IA.md Normal file
View File

@@ -0,0 +1,233 @@
我现在有一个python爬虫项目启动是在项目目录内手动python update_yt_week.py > output_week.log 2>&1 &产生的进程日志就放在output_week.log文件内。
现在有问题就是这个进程会直接中断结束我需要有方法自己检测这个进程有什么方法思路或者工具我初步的想法有一个东西可以每10分钟检查改进程假如没有进程就执行启动命令执行完启动后每10秒重新检查进程是否启动假如连续3次没有检查到重新启动的进程就再次立即执行启动命令连续3次执行启动命令且则进程都检查不到说明python项目有问题则整体停止这个检查工具。
你有什么方式方法实现吗不用写具体的脚本代码给我就说有什么方法思路方式工具可以实现并且需要保留日志文件pyhton脚本本身的日志文件以及该工具执行检查启动相关动作的日志文件并且最好这两个文件能够按天分割成不同文件。
is_running() {
pgrep -f "python update_yt_week.py" > /dev/null 2>&1
return $?
}
pgrep -f "python update_yt_week.py" | head -n 1
-----------------------------------------------------
当前项目:
机器A43.159.145.241
安装了tengine部署了前端文件、运行了python项目5001端口本机的5001负责接收前端页面的请求再由python项目的代码请求别的机器上的jar包服务
tengine配置文件主要为
server {
listen 443 ssl;
server_name jennie.deal www.jennie.deal;
ssl ...
...
location / {
root /data/tengine/html/jennie_web/dist/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_pass http://127.0.0.1:5001;
proxy_set_header Host $host;
...
}
}
python项目调用后端jar的配置
[api]
# 远程API基础URL
api_base_url = http://129.204.158.54:8070/prod-api/
# 目标服务器
target_server_8070 = http://129.204.158.54:8070
机器B和C在同个局域网BC都运行了相同的jar包作为机器A的jar后端
机器B: 公网129.204.158.54内网为172.24.16.10
机器C公网43.138.204.95内网为172.24.16.7
机器B安装了tengine配置负载均衡
upstream agent_backend {
server 127.0.0.1:8070 max_fails=3 fail_timeout=30s;
server 172.24.16.7:8070 max_fails=3 fail_timeout=30s;
keepalive 300;
}
server {
listen 8070;
location / {
proxy_pass http://agent_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
...
}
}
现在查看机器BCjar的日志只有机器B有机器C没有说明机器A的前端页面的接口都是访问的机器B负载均衡没起作用为什么怎么办能给单独一个sever块的产生的日志单独产生到另外的日志文件吗
python脚本查询es
TARGET_EVENT = "达人搜索"
query = {
"query": {
"bool": {
"filter": [
{"term": {"mylog.module": "business"}},
{"term": {"mylog.level": "warning"}},
{"wildcard": {"mylog.tail.keyword": f"*[event: {TARGET_EVENT}]*"}},
{"range": {
"@timestamp": {
"gte": start_time.isoformat(),
"lte": end_time.isoformat()
}
}}
]
}
},
"sort": [{"@timestamp": "desc"}],
"size": 1,
"track_total_hits": True
}
注释{"wildcard": {"mylog.tail.keyword": f"*[event: {TARGET_EVENT}]*"}}, 就得到,加上就查不到
日志原本的样子2025-06-12 18:11:48 - business - WARNING - [user_email: 302866617a@gmail.com] [conversation_id: d998dc11-d7a9-4817-8e90-e208454c80a1] [event: 达人搜索 | msg: 处理完成,耗时: 1.43秒,未找到匹配达人 | context: duration:1.43s,results_count:0]
mylog.tail字段是 [event: 达人搜索 | msg: 处理完成,耗时: 1.43秒,未找到匹配达人 | context: duration:1.43s,results_count:0]
echo "2025-06-12 19:16:48 - business - WARNING - [user_email: 123@gmail.com] [conversation_id: 123-d7a9-4817-8e90-e208454c80a1] [event: 达人搜索 | msg: 这是测试的,耗时: 9.13秒,匹配71个达人 | context: duration:9.13s,results_count:71]" >> influencer_search_20250612_184513.log
现在我的ai对话产品有4个套餐等级Free、Basic、Pro、Max格式是“套餐月付价格年付平均月价,每月积分)”
Free ($0,$0,60)
Basic$99.00$84.90,1000
Pro$199$169,2500
Max$299,$259,6000
以下是套餐按钮交互逻辑补充:
- 用户当前订阅了任意一个套餐
- 订阅月度套餐
- 允许用户切换不同套餐类型
- 订阅的是Basic套餐
- 月度套餐界面
- Free套餐按钮Unavailable
- Basic套餐显示Current Plan
- Pro以及Max显示Upgrade to Pro & Max
- 年度套餐界面
- Free套餐按钮Unavailable
- Basic套餐显示Switch to Basic (Yearly)
- Pro以及Max显示Upgrade to Pro & Max
- 订阅是Max最高级别套餐
- 月度套餐界面
- Free套餐按钮Unavailable
- Basic以及Pro显示Downgrade to Basic & Pro
- (下个月生效)
- Max套餐显示Current Plan
- 年度套餐页面
- Free套餐按钮Unavailable
- Basic显示
- Pro套餐显示
- Max套餐显示Switch to Max (Yearly)
- 用户订阅的年度套餐
- 年度basic套餐
- 月度套餐页面
- Free套餐按钮Unavailable
- 所有套餐按钮均为Unavailable
- 鼠标hover显示Switching from annual to monthly isnt supported directly. If you accidentally purchased an annual plan, contact us at support@lessie.ai and well process your refund.
- 不允许用户自己从年度切换回月度
- 年度套餐页面
- Free套餐按钮Unavailable
- Basic显示Current Plan
- Pro和Max套餐显示 Upgrade to Pro & Max
- 点击之后直接进入check out页面补足差价
- 年度Pro套餐
- 月度套餐页面
- Free套餐按钮Unavailable
- 年度套餐页面
- Basic以及Max显示Downgrade to Basic & Pro
- ProCurrent Plan
- 年度Max套餐
- Basic以及Pro显示Downgrade to Basic & Pro
- MaxCurrent Plan
当前套餐:按钮文案为
Current Plan不可点击
升级套餐:按钮文案格式为
Upgrade to Plus / Pro / Max
降级套餐:
1. 若用户当前套餐为 Plus 或 Pro且页面中出现低版本套餐如 Basic按钮文案为
Switch to Basic
2. 若用户降级至免费套餐(假设 Basic 为免费版时),则按钮文案建议为:
Downgrade to Basic / Plus / Pro
我补充一下套餐流转的规则:
1、升级套餐更新订阅周期立即生效积分补足至新版套餐标准
示例用户升级前积分剩余500生成Pro后积分补足到2500
2、套餐降级下一个订阅周期生效用户退款全部人工处理
订阅周期以当前用户的订阅情况来计算
示例:
用户当前购买套餐为 月付Pro版订阅有效期为2025-08-01至2025-09-01用户08-15修改套餐为 月付Basic版
则 月付Basic版 的生效日期为2025-09-01
下一个订阅周期生效
3、低套餐升级到高套餐
及时生效
更新下次扣款日期
从用户付款日开始
收新版本套餐的金额,减去上个月
差价金额 = 高级版金额 - 当月积分消耗比例 × 无折扣(用户付款时)的月付价格
现在前端页面的请求请求到go服务前端的nginx配置文件upstream go_backend { ip_hash; server 10.0.0.10:8100 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.8:8100 weight=10 max_fails=3 fail_timeout=30s; }然后go服务会请求python服务现在python服务是有5台机器运行了5个实例第二个nginx配置文件upstream app_lessie_ai_backend { ip_hash; server 10.0.0.12:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.7:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.11:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.2:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.13:7001 weight=10 max_fails=3 fail_timeout=30s; }。前端正常使用的时候go再请求到python但是python的nginx负载视角看永远是go服务这个IP在请求它导致一直只有一台python服务机器在接受请求怎么办怎么才能让真正的浏览器用户可以负载到不同python服务机器且同一个用户短时间尽量请求同一个python。
前端nginx的日志格式log_format app_lessie_ai_log '客户端IP: $remote_addr | 用户: $remote_user | 时间: $time_local | '
'请求方法和路径: "$request" | 状态码: $status | 响应大小: $body_bytes_sent | '
'来源页面: "$http_referer" | 客户端UA: "$http_user_agent" | '
'上游服务器: $upstream_addr | 上游响应耗时: $upstream_response_time | '
'请求总耗时: $request_time | Host: $host';
查看日志筛选出访问go服务的实际日志内容
客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880236 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.163 | 请求总耗时: 0.168 | Host: app.lessie.ai
客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880230 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.141 | 请求总耗时: 0.146 | Host: app.lessie.ai
客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880222 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.356 | 请求总耗时: 0.355 | Host: app.lessie.ai
客户端IP: 172.71.155.24 | 用户: - | 时间: 23/Sep/2025:20:22:12 +0800 | 请求方法和路径: "GET /api/conversation/v1?page_num=1&page_size=3&keyword=&is_filter_hidden=true HTTP/1.1" | 状态码: 200 | 响应大小: 127 | 来源页面: "https://app.lessie.ai/" | 客户端UA: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.7 Mobile/15E148 Safari/604.1" | 上游服务器: 10.0.0.10:8100 | 上游响应耗时: 0.209 | 请求总耗时: 0.209 | Host: app.lessie.ai
python 服务的nginx的日志格式
upstream prod_py_search {
#ip_hash;
hash $http_x_forwarded_for consistent;
server 10.0.0.12:7001 weight=10 max_fails=3 fail_timeout=30s;
server 10.0.0.7:7001 weight=10 max_fails=3 fail_timeout=30s;
server 10.0.0.11:7001 weight=10 max_fails=3 fail_timeout=30s;
server 10.0.0.2:7001 weight=10 max_fails=3 fail_timeout=30s;
server 10.0.0.13:7001 weight=10 max_fails=3 fail_timeout=30s;
}
log_format prod_py_search_log '客户端IP: $remote_addr | 用户: $remote_user | 时间: $time_local | '
'请求方法和路径: "$request" | 状态码: $status | 响应大小: $body_bytes_sent | '
'XFF: "$http_x_forwarded_for" | 客户端UA: "$http_user_agent" | '
'上游服务器: $upstream_addr | 上游响应耗时: $upstream_response_time | '
'请求总耗时: $request_time | Host: $host';
python服务的nginx日志内容
客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.088 | 请求总耗时: 0.088 | Host: 10.0.0.3
客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.103 | 请求总耗时: 0.103 | Host: 10.0.0.3
客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.107 | 请求总耗时: 0.107 | Host: 10.0.0.3
客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.084 | 请求总耗时: 0.084 | Host: 10.0.0.3
客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.293 | 请求总耗时: 0.294 | Host: 10.0.0.3