四象智投 SI XIANG INTELLIGENCE

INDEPENDENT CONTROL PLANE

让系统状态
始终清晰可见

面向生产环境的独立运维控制面,聚合真实服务摘要,并以明确边界管理强类型业务配置。

01
真实状态有界轮询与故障隔离
02
强类型配置校验、版本与生效回执
03
权限分级查看、操作与管理隔离

独立构建 · 独立进程 · 独立数据边界

SECURE ACCESS

欢迎回来

使用已授权的运维中心账号继续。

仅限授权人员访问,登录会话受服务端权限控制。
四象运维CONTROL CENTER

BNT PLATFORM OPERATIONS

系统总览

真实接口 · 固定目录 · 最近快照

正在读取采集状态

NEEDS ATTENTION

需要关注

只列真实上报的异常与采集问题

BUSINESS WORKFLOWS

业务运行摘要

未接入下次执行接口的链路不会推测时间

SERVICE HEALTH

服务健康

详细依赖与观测信息见服务目录

状态来源健康接口与运行摘要

不使用静态部署状态或人工填报结果。

采集策略30–60 秒有界轮询

单个依赖失败隔离,不阻塞其他服务。

数据边界轻量最近快照

不保存全量时序指标,不替代日志平台。

SERVICE CATALOG

服务目录

运行状态、版本、依赖与最近观测

CONTROLLED CONFIGURATION

配置中心

先定位并查看真实文件;修改仍在服务器上完成

READ-ONLY FILE INVENTORY

生产配置文件

固定清单 · 实时读取 · 敏感值遮蔽

这里展示服务器当前文件的脱敏预览,不是运行中服务的生效值。ENV 只显示键名与经审核的用途说明;说明来自随代码发布的目录,不读取文件注释,未收录的键显示“暂无说明”。YAML 中未经允许的值和所有注释均被遮蔽。修改请按路径在服务器上备份、校验并按需重启。

选择文件查看当前服务器上的脱敏预览。

TYPED DYNAMIC CONFIG

AI Outcome 运行配置

固定 4 项 · 完整快照 · 原子生效

VERSIONED STARTUP CONFIG

AI Outcome 启动配置包

固定 6 项 · Jenkins 显式选择 · 重启后生效

PRODUCTION OPERATIONS HANDBOOK

运维手册

基于生产盘点的服务台账、标准操作与故障处置

生产事实 · 2026-08-24
执行边界

下列命令仅供已授权人员在服务器终端执行。运维中心不会代为运行 Shell、systemctl 或 Jenkins Job,也不会读取 root-only 凭据文件或返回配置中的秘密值。页面中的端口、路径和权限来自生产盘点,但执行前仍应再次确认当前状态、交易窗口与影响范围。

生产主机47.106.221.211Asia/Shanghai
主站入口bntinvestment.comHTTPS :443
运维入口ops.bntinvestment.com独立控制面
Jenkinsjenkins.bntinvestment.comHTTPS · 登录账号同权
01

RUNTIME TOPOLOGY

服务拓扑与台账

端口均以服务器实际监听和服务目录为准;loopback 服务不应直接开放公网。

服务Unit / Runtime监听健康接口运行用户
Nginx公网入口nginx.service443 publicHTTPS 主站系统服务
Backtest主站 APIbnt-backtest.service127.0.0.1:18080/actuator/healthbnt:bnt
AI AnalysisAI API / Gatewaybnt-ai-analysis.service127.0.0.1:18091/actuator/healthbnt:bnt
Market Data MCPJava MCPmarket-data-mcp.service127.0.0.1:9070/health/readybnt:bnt
QMT Trace实盘高风险服务bnt-qmt-trace-service.service9998 当前 all-address/actuator/healthbnt:bnt
Live Fact Bridge独立事实桥bnt-ai-live-fact-bridge.service127.0.0.1:18092/actuator/healthbnt:bnt
运维中心独立控制面bnt-platform-control-center.service127.0.0.1:18095/actuator/healthbnt:bnt
HermesGateway / Dashboardhermes-gateway.service
hermes-dashboard.service
127.0.0.1:8642 / 9119Dashboard /hermes:hermes
MySQL / RedisDockerbt_mysql / bt_redis127.0.0.1:3306 / 6379Docker health容器用户

生产盘点发现 QMT 9998 监听所有地址,MySQL/Redis 另有 33309/36379 宿主映射。它们必须由云安全组与主机防火墙限制,不能仅凭应用配置判断为安全。

Python MCP Unit

fundamentals-mcp · hot-money-mcp · lockup-mcp · news-mcp · options-history-mcp · options-realtime-mcp

已登记 systemd Unit 和固定端口,但没有统一 health URL;日常以 Unit 状态和 Hermes/MCP 汇总为准。

真实健康接口

curl -fsS http://127.0.0.1:18080/actuator/health
curl -fsS http://127.0.0.1:18091/actuator/health
curl -fsS http://127.0.0.1:9070/health/ready
curl -fsS http://127.0.0.1:9998/actuator/health
curl -fsS http://127.0.0.1:18092/actuator/health
curl -fsS http://127.0.0.1:18095/actuator/health
02

DAILY CHECK

日常巡检

先建立基线,再做变更;只读巡检不应改变任何服务状态。

一键受控巡检

/opt/bnt-ops/bin/verify-services.sh

失败 Unit 与核心状态

systemctl --failed --no-pager
systemctl is-active bnt-backtest bnt-ai-analysis market-data-mcp \
  bnt-qmt-trace-service bnt-ai-live-fact-bridge \
  hermes-gateway hermes-dashboard nginx

容器健康

docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
docker inspect --format '{{.Name}} {{.State.Health.Status}}' bt_mysql bt_redis

资源基线

uptime
free -h
df -h / /data /opt
systemd-cgtop --depth=2

异常日志窗口

journalctl -p warning --since '30 min ago' --no-pager
journalctl --disk-usage
  • 磁盘空间足够容纳新 release 与数据库备份
  • 可用内存满足构建或研究任务预算
  • 变更前现网没有未解释的 DOWN/DEGRADED
  • 交易时段不操作 QMT Trace 等高风险服务
03

LOG DIAGNOSIS

日志与进程排查

journalctl 是 systemd 服务的事实源;运维中心不替代日志平台。

实时日志

journalctl -u bnt-ai-analysis -f
journalctl -u bnt-backtest -f
journalctl -u market-data-mcp -f
journalctl -u hermes-gateway -f
journalctl -u bnt-qmt-trace-service -f
journalctl -u bnt-ai-live-fact-bridge -f
journalctl -u bnt-platform-control-center -f

最近记录与启动周期

journalctl -u bnt-ai-analysis -n 200 --no-pager
journalctl -u bnt-ai-analysis --since '1 hour ago' --no-pager
journalctl -u bnt-ai-analysis -b --no-pager
systemctl status bnt-ai-analysis --no-pager --full

优先记录首次异常时间、Unit、release ID、错误类型和依赖状态。不要只截取最后一行异常。

04

SERVICE LIFECYCLE

启动、停止与受控重启

重启只管理当前制品;发布才会构建并替换版本。

推荐入口

Jenkins: BNT-Service-Operations
ACTION: status | logs | restart
LOG_LINES: 1–1000

服务器受控脚本

/opt/bnt-ops/bin/service-action.sh bnt-ai-analysis status
/opt/bnt-ops/bin/service-action.sh bnt-ai-analysis logs 200
/opt/bnt-ops/bin/service-action.sh bnt-ai-analysis restart

终端应急命令

systemctl status bnt-backtest bnt-ai-analysis market-data-mcp --no-pager
systemctl is-active bnt-backtest bnt-ai-analysis market-data-mcp
systemctl restart bnt-backtest
systemctl restart bnt-ai-analysis
systemctl restart market-data-mcp

应急重启前先记录状态与日志;完成后运行全局健康检查。不要用 restart 代替发布。

MCP 配置/Schema 变化→验证 9070 readiness→重启 AI Analysis→检查 Hermes 工具目录→真实调用验收
05

RELEASE & ROLLBACK

Jenkins、发布与回滚

所有发布使用 Gitee 可定位 commit、不可变 release、SHA-256 和健康检查。

推荐入口

https://jenkins.bntinvestment.com

公网只开放 Nginx 443;Jenkins 宿主端口 127.0.0.1:18088 继续保持 loopback,不加入云安全组公网规则。

应急 SSH 隧道

ssh -L 18088:127.0.0.1:18088 root@47.106.221.211
http://127.0.0.1:18088
凭据边界

凭据位于服务器 /etc/bnt-ops/jenkins/*.password 的 root-only 文件中。本页面不提供内容查看、下载或复制命令。

发布前后

  1. 运行 BNT-Health-Check 并记录现网基线
  2. 确认仓库、分支和 40 位 commit
  3. 核对测试开关、交易窗口与配置版本
  4. 在 Confirm 页面核对 release 与摘要
  5. 发布后检查 Unit、健康接口、Nginx 和核心业务
  6. 记录 commit、release、迁移、操作人和验收结果

Jenkins 授权策略

角色账号允许禁止
管理员admin完整 Jenkins 管理凭据仍不得输出到页面或构建日志
普通登录用户maintainer1 / maintainer2 / liu / chen与 admin 相同的完整 Jenkins 管理权限凭据仍不得输出到页面或构建日志
匿名未登录登录页面Jenkins API、Job 和管理页面

当前策略为“登录用户完整控制”。任一普通账号泄露都等同管理员账号泄露;账号只发给完全受信人员,人员离开或设备失陷时必须立即停用账号并轮换相关凭据。

Jenkins Job用途主要影响
BNT-Health-Check全局只读健康检查不改变状态
BNT-Service-Operations登记服务 status / logs / restartrestart 只重启当前版本
BNT-Deploy-PlatformBacktest、AI Analysis、Web、migration备份 bt_ai,切换主平台 release
MCP-Deploy-Market-Data构建发布 Java MCP替换 MCP JAR并刷新 AI 工具目录
BNT-Deploy-QMT-Trace发布实盘 QMT Trace高风险,禁止交易时段执行
BNT-Deploy-Live-Fact-Bridge独立发布事实 Bridge不重启 QMT/AI/Hermes
BNT-Deploy-Control-Center独立发布运维中心只重启运维中心
BNT-LightGBM-Research研究训练、预测与导入不触发交易;受资源门槛控制
主平台/opt/bnt-platform/releases/<release-id>/opt/bnt-platform/current
运维中心/opt/bnt-platform-control-center/releases/<release-id>/opt/bnt-platform-control-center/current
事实 Bridge/opt/bnt-ai-live-fact-bridge/releases/<release-id>/opt/bnt-ai-live-fact-bridge/current
Java MCP/data/javaMcp/releases/<release-id>/data/javaMcp/backups/before-<release-id>
QMT Trace/data/bnt-qmt-trace-service/releases/<release-id>/data/bnt-qmt-trace-service/backups/before-<release-id>

查看当前主平台版本

/opt/bnt-ops/bin/show-platform-version.sh
readlink -f /opt/bnt-platform/current
ls -l /opt/bnt-platform/current
cat /opt/bnt-platform/current/RELEASE

流水线切换后健康检查失败会自动恢复上一 release。需要人工恢复时先停止继续发布并保存失败日志,由发布负责人按已有不可变 release 执行,不在手册中提供裸软链接替换命令。

06

CONFIGURATION CONTRACT

配置文件与变更规则

外置配置不随代码发布覆盖;修改后必须按生效方式重启或发布验证。

服务生产路径实测权限规则
Backtest/etc/bnt-platform/backtest.envEnvironmentFile秘密 ENV,禁止页面展示值
AI Analysis/etc/bnt-platform/ai-analysis.env
/etc/bnt-platform/ai-analysis/application.yml
640 root:bnt
600 bnt:bnt
ENV/YAML 均需重启;发布不覆盖
AI 启动配置包/etc/bnt-platform/managed/ai-analysis-outcome.env640 root:bnt由 Jenkins 生成,不手工编辑
Market Data MCP/etc/market-data-mcp/env600 bnt:bnt修改后重启 MCP,再刷新 AI
QMT Trace/etc/bnt-qmt-trace-service/ai-live-tracking.env640 root:bnt实盘配置,交易窗口外变更
Live Fact Bridge/etc/bnt-ai-live-fact-bridge/bridge.env640 root:bnt只重启独立 Bridge
运维中心/etc/bnt-platform-control-center/control-center.env640 root:bnt含数据库与服务令牌;绝不展示值

安全盘点

stat -c '%a %U:%G %s %n' /etc/bnt-platform/ai-analysis.env
sha256sum /etc/bnt-platform/ai-analysis.env
cut -d= -f1 /etc/market-data-mcp/env

用权限、大小、键名和 SHA 判断漂移;不要把秘密值复制到终端回显、浏览器或聊天。

主平台外置 YAML

ls -lh /etc/bnt-platform/ai-analysis/application.yml
sed -n '1,240p' /etc/bnt-platform/ai-analysis/application.yml
sudoedit /etc/bnt-platform/ai-analysis/application.yml

AI ENV

ls -lh /etc/bnt-platform/ai-analysis.env
sudoedit /etc/bnt-platform/ai-analysis.env
07

BACKUP & RECOVERY

备份、校验与恢复

主平台发布前自动备份 bt_ai;恢复是高风险写操作,必须在维护窗口执行。

创建与核对数据库备份

/opt/bnt-ops/bin/backup-bt-ai.sh
find /data/backup/bnt/releases -maxdepth 1 -name 'bt_ai_*.sql.gz' \
  -printf '%TY-%Tm-%Td %TH:%TM %s %f\n' | sort -r | head
gzip -t /data/backup/bnt/releases/bt_ai_YYYYMMDDHHMMSS.sql.gz

备份使用 single-transaction,落盘为 0600;小于 1 KiB 或 gzip 校验失败会拒绝成功。

恢复前检查单

  1. 确认恢复目标、备份时间、文件大小和 gzip 完整性
  2. 记录当前 release、migration 版本与所有依赖状态
  3. 停止会继续写入目标 Schema 的业务流量
  4. 先在隔离 Schema 验证备份可导入和关键表完整
  5. 明确回退方案和维护窗口后再执行生产恢复
  6. 恢复后运行 migration、健康检查和核心业务验收

本页面不提供数据库导入命令,避免把破坏性恢复误当作日常操作。

08

EDGE & TLS

Nginx、域名与证书

公网只由 Nginx 443 提供;应用端口原则上保持 loopback。

生效配置

/etc/nginx/sites-enabled/bnt-backend
/etc/nginx/snippets/bnt-control-center.conf
/etc/nginx/sites-enabled/ops.bntinvestment.com
/etc/nginx/sites-enabled/jenkins.bntinvestment.com
/etc/nginx/conf.d/jenkins-upstream.conf
/etc/nginx/snippets/jenkins-proxy.conf

验证与重载

nginx -t
systemctl status nginx --no-pager
journalctl -u nginx -n 200 --no-pager
systemctl reload nginx
tail -n 200 /var/log/nginx/jenkins.error.log

固定入口

  • bntinvestment.com → 主站 Web/API
  • ops.bntinvestment.com → 独立运维中心
  • jenkins.bntinvestment.com → Jenkins HTTPS 入口
  • www.bntinvestment.com/ops/ → 兼容入口
  • /internal 与 /actuator 在运维域名公网返回 404
  • Jenkins 18088 仅 loopback,经 Nginx 443 反向代理

TLS 自动续期

systemctl status certbot.timer --no-pager
certbot renew --dry-run
09

INCIDENT RUNBOOKS

常见故障处置

先定位故障层级,再选择最小影响动作;不要通过连续重启掩盖根因。

502 / 504
  1. curl 对应 loopback 健康接口
  2. 检查 Unit active 与最近启动日志
  3. 执行 nginx -t 并查看 Nginx 日志
  4. 核对 current release 和端口监听
  5. 确认依赖后再决定重启或回滚
服务启动失败
  1. systemctl status 获取退出码
  2. journalctl -b 找首次异常
  3. 检查端口占用、磁盘与内存
  4. 只核对配置权限/键名/SHA,不输出秘密
  5. 新 release 失败优先使用自动回滚
MCP 工具缺失
  1. 验证 9070 readiness
  2. 检查 MCP 日志与工具 Schema
  3. 确认 AI Analysis 健康
  4. 按依赖顺序重启 AI Analysis
  5. 检查 Hermes 并做真实工具调用
MySQL / Redis 异常
  1. docker ps 与 health 状态
  2. 确认磁盘、内存和连接压力
  3. 识别所有依赖服务影响
  4. 保存容器日志再决定操作
  5. 禁止未备份直接重建容器或数据卷
磁盘空间不足
  1. df -h 确认受影响文件系统
  2. du -xhd1 /data 与 /opt 定位目录
  3. 检查 journalctl --disk-usage
  4. 按保留策略归档旧制品与备份
  5. 禁止临时 rm -rf 不明目录
配置漂移
  1. 记录文件权限、大小和 SHA
  2. 对照最近发布与运维中心 revision
  3. 确认生效方式为动态或需重启
  4. 恢复到已知版本而非现场猜测
  5. 复核实际摘要和应用回执
10

SECURITY & ACCEPTANCE

安全边界与验收清单

秘密只留在服务器受限文件;任何生产变更都必须留下可定位的版本和结果。

禁止事项

  • 禁止在浏览器、聊天或构建日志中显示 ENV、Token 和密码
  • 禁止把 Jenkins 密码文件内容复制出服务器
  • 禁止用 root 运行新的业务进程
  • 禁止绕过 Jenkins 直接覆盖不可变 release 制品
  • 禁止在交易窗口发布或重启实盘高风险服务
  • 禁止对不明目录、数据卷执行递归删除

变更验收

  • 目标 commit / release / 配置 revision 已记录
  • 所有受影响 Unit 为 active
  • 健康接口和 BNT-Health-Check 通过
  • Nginx 配置与公网核心路径通过
  • 秘密 ENV 的权限和 SHA 未被意外改变
  • 数据库 migration 与备份可定位
  • 关键业务流程完成真实验收
  • 操作人、时间、结果和异常已记录
Jenkins 密码文件

/etc/bnt-ops/jenkins/admin.password、maintainer1.password、maintainer2.password 仅用于受控服务器端登录。页面只记录路径,不提供读取命令或秘密值。

运维中心同级管理员

ops-admin、maintainer1、maintainer2 均拥有 OPS_VIEWER、OPS_OPERATOR、OPS_ADMIN。两个维护账号的独立密码仅保存于服务器 /etc/bnt-platform-control-center/maintainer1.password 与 maintainer2.password;页面不读取、不显示秘密值。

运维中心提供只读状态、登记配置与操作参考;不提供任意命令、SQL、URL 探测或秘密值读取入口。