监控与面板(Dashboard & Monitor)

监控与诊断面板。

译文说明

注:本文为非官方翻译,可能存在疏漏;请以原文为准。

本文档说明如何在生产环境中监控 pysystemtrade。

在阅读本文之前,你应该已经读过:

目录

gh-md-toc 生成

Web Dashboard

Dashboard 目前仍在持续开发中——功能还在不断补充。

目前,dashboard 主要提供一些基础的诊断“红绿灯”(traffic lights),用来展示各个系统组件的运行状态,同时还会展示相关报表的内容。

如果你已经安装了 pyproject.toml 文件中列出的所有 Python 依赖,就可以启动 web dashboard:

1
2
cd pysystemtrade/dashboard
python3 app.py

在浏览器中访问 http://localhost:5000/ 即可查看 dashboard。
如果你想更改访问地址,或者让局域网/外部机器可以访问(这么做有安全风险,请自行权衡!),需要做以下配置:

  • Bash 终端(Linux):sudo ufw allow 5000
  • 在你的 private_control_config.yaml 中添加如下参数:dashboard_visible_on_lan: True

System monitor

另外,还有一个简单的监控工具,它会生成一个 .html 文件,并只显示哪些进程正在运行。
要使用它,可以在重启时通过 crontab 调用下面两条命令,或者手工运行(例如配合 screen 使用):

1
2
cd ~pysystemtrade/private/; python3 -m http.server
cd ~pysystemtrade/syscontrol/; python3 monitor.py

机器启动后,你应当可以在任何连接到同一局域网的机器上访问 http://192.168.1.13:8000/(根据实际情况替换 IP 地址),查看系统状态。

Handling of crashed processes

在 monitor 和 dashboard 运行时,它们还会处理任何“崩溃”的进程(即登记在案的 PID 被杀掉,而进程没有被正常关闭的情况);系统会给用户发送邮件、更新 web 日志,并将该进程标记为已关闭,从而可以再次启动。
它不会自动重启这些进程!(你需要手工重启,或者等待第二天由 crontab 自动重新启动。)

Running a remote dashboard or monitor

你可能更希望在另一台机器上运行 monitor 或 dashboard。
假设交易服务器(被监控的那台机器)同时也是托管 MongoDB 实例的机器,IP 地址为 192.168.0.13;远程监控机的 IP 地址为 192.168.0.10:

  • /etc/mongod.confbind_ip 配置中添加一个 IP 地址,使 MongoDB 允许其他机器连接,例如 bind_ip=localhost, 192.168.0.10;或者在启动 MongoDB 时修改命令,例如在 Linux 下使用 mongod --dbpath /home/rob/data/mongodb --bind_ip_all警告:除非还有其他安全措施,例如防火墙,否则这样做并不安全)。这是必需的步骤。
  • 配置 ssh,使远程监控机可以使用 SSH key(免密码)登录,而不是密码登录(同样,这也有安全隐患,请确保你清楚自己在做什么!)。这是通过 ssh 做远程进程监控所必需的。
  • 在 IB gateway 软件中,把监控机的 IP(192.168.0.10)加入白名单。
  • 你可能需要调整交易服务器上的防火墙设置,打开 27017 端口(MongoDB)和 4001 端口(IB,若你使用默认端口);例如在 Linux 下可以使用 UFW(sudo ufw enable, sudo ufw allow 27017 from 192.168.0.10)或 iptables

然后,在监控机上:

  • 同样,你也可能需要在监控机上调整防火墙设置,打开 27017(MongoDB)和 4001(IB,若端口不同请按实际修改)等端口。
  • 修改系统配置文件 private_config.yaml,让它连接到远程交易服务器的 IP,例如:mongo_host: 192.168.0.13
  • 同样需要在 private_config.yaml 中修改 IB 的连接地址,例如:ib_ipaddress: 192.168.0.13
  • private_config.yaml 中添加如下配置,以便进程监控能正常工作:

trading_server_ip: 192.168.0.13
trading_server_username: 'rob'
trading_server_ssh_port: 22(可选,默认为 22 端口)