如何用python实时监控股票,并且持续扫描大盘?
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
普罗米修斯(prometheus)这个接近完美的监控系统,有很多读者不了解它到底要如何搭建、应用,今天我们就结合普罗米修斯、Grafana和Python采集脚本,写一个小小的东方财富人气榜 TOP100监控系统。
跟着本文的教程耐心往下走,你可能只需要花30分钟便可完成环境的搭建,非常舒服,下面先介绍基本概念。
Grafana 是一个开源的数据可视化网络应用程序平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。
比如说我基于 普罗米修斯(prometheus) + node_exporter 监控主机性能指标,然后由Grafana构建主机实时监控仪表盘,它是长这样的:
至于东方财富人气榜,指的是这个:
它能将市场目前最活跃的一些股票提取出来,可供我们作为投资的一种参考。
而我们今天要做的,就是自己搭建一套监控系统,实时监控某只股票在TOP100上的排名变化。
1.搭建 Prometheus
创建 Prometheus 安装目录并添加 promethus 用户:
PROM_PATH='/data/prometheus'
mkdir -p ${PROM_PATH}
mkdir -p ${PROM_PATH}/{data,conf,logs,bin}
useradd prometheus
cd /usr/local/src
下载解压 prometheus, 这里我们选用2021年5月18日更新的最新版 v2.27.1:
wget https://github.com/prometheus/prometheus/releases/download/v2.27.1/prometheus-2.27.1.linux-amd64.tar.gz
tar -xvf prometheus-2.27.1.linux-amd64.tar.gz
cd prometheus-2.27.1.linux-amd64/
cp prometheus promtool ${PROM_PATH}/bin/
cp prometheus.yml ${PROM_PATH}/conf/
chown -R prometheus.prometheus /data/prometheus
设置环境变量:
cat >> /etc/profile <<EOF
PATH=/data/prometheus/bin:$PATH:$HOME/bin
EOF
将 Promethus 配置为系统服务之一,以便使用 systemctl 命令管控服务:
cat >>/etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/data/prometheus/bin/prometheus --config.file=/data/prometheus/conf/prometheus.yml --storage.tsdb.path=/data/prometheus/data --storage.tsdb.retention=90d
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
现在使用下面的systemctl命令重新加载systemd系统,并查看服务是否启动:
systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
看到 running 状态说明一切正常:
记得开放9090端口,这样才可以访问 Prometheus 的 Web 端,访问 http://服务器IP:9090 查看得到 Prometheus Web界面,说明安装成功:
2.安装 Grafana
Grafana 我们也使用最新的 8.0.1 版本,安装方式如下:
CentOS系列系统使用以下命令安装:
cd /usr/local/src
wget https://dl.grafana.com/oss/release/grafana-8.0.1-1.x86_64.rpm
sudo yum localinstall grafana-6.5.2-1.x86_64.rpm
Ubuntu和Debian系列系统使用以下命令安装:
cd /usr/local/src
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_8.0.1_amd64.deb
sudo dpkg -i grafana_8.0.1_amd64.deb
然后启动系统服务即可:
systemctl start grafana-server
systemctl status grafana-server
看到 running 状态说明一切正常:
记得开放3000端口,这样你才可以访问你的Grafana: http://你的服务器IP:3000 如下所示:
输入用户名,密码登录系统。用户名与密码都是"admin",如果能打开页面则已经安装成功了。
3.初尝Grafana+Prometheus
为了初步尝试这套系统,我们可以通过简单的采集主机性能数据开始。Node_exporter是一个Prometheus推出的官方主机性能采集工具。通过它我们能很方便地输出主机性能指标到Prometheus.
3.1 下载安装Node_Exporter:
NODE_PATH='/data/prometheus/node_exporter/'
cd /usr/local/src/
mkdir -p ${NODE_PATH}
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar -xvf node_exporter-1.1.2.linux-amd64.tar.gz
cp node_exporter-1.1.2.linux-amd64/node_exporter ${NODE_PATH}
chown -R prometheus.prometheus ${NODE_PATH}
配置node_exporter为系统服务:
cat > /lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/data/prometheus/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
现在使用systemctl命令重新加载系统命令,并查看服务是否启动:
systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter
看到如下图的状态说明启动成功。
放行9100端口,访问http://你的服务器地址:9100/metrics 看到如下指标页面说明安装成功:
配置 prometheus.yaml (ubuntu 下为 prometheus.yml), 让 prometheus 采集 node_exporter 输出的指标数据:
vim /data/prometheus/conf/prometheus.yml
配置如下:
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# 主要是新增了node_exporter的job,如果有多个node_exporter,在targets数组后面加即可
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
保存后重启prometheus:
systemctl restart prometheus
最后配置Grafana:
然后选择 Prometheus 数据源:
输入 Prometheus url 然后点击 save&test 保存:
然后导入官方仪表盘,官方提供的模板号为8919:
然后你就能看见本机非常漂亮的性能指标数据仪表盘了。
不看不知道,一看吓一跳,原来我需要升级这台机器的内存了。
4.编写采集脚本
为了能够采集东方财富人气榜前100名,我们需要用Python编写一个人气榜采集脚本,并使其像 node_exporter 一样输出指标信息:
为了达到这个目的,我们必须安装 prometheus_client 模块:
pip3 install prometheus_client
获取股票排名的代码如下:
# Python实用宝典
# 2021-06-13
# 文件名: fetch_stock.py
import time
import requests
from prometheus_client import start_http_server, CollectorRegistry, Gauge
reg = CollectorRegistry()
gauge = Gauge(
'rank', '人气榜排名',
['stock_id'], registry=reg
)
def process_request():
url = "https://emappdata.eastmoney.com/stockrank/getAllCurrentList"
kwargs = {
"appId": "appId01",
"pageNo": 1,
"pageSize": "100",
}
result = requests.post(url, json=kwargs).json()
for i in result.get("data", []):
gauge.labels(stock_id=i["sc"]).set(i["rk"])
time.sleep(60)
if __name__ == '__main__':
start_http_server(8000, registry=reg)
while True:
process_request()
这里我们只捕获人气榜前100名,并通过Prometheus客户端的start_http_server开启一个Web服务,这样你通过http服务访问8000端口的时候就能输出这些指标。
为了让其能持续输出指标数据,我们要用nohup使其成为一个常驻进程:
nohup python3 fetch_stock.py &
开放8000端口,访问 http://你的服务器IP:8000 就能查看输出的指标:
5.应用采集脚本
同配置Node_exporter一样,我们需要将自己编写好的采集脚本落入Prometheus,配置prometheus.yaml:
配置 prometheus.yaml, 让 prometheus 采集 node_exporter 输出的指标数据:
#(CentOS) vim /data/prometheus/conf/prometheus.yaml
vim /data/prometheus/conf/prometheus.yml # ubuntu
配置如下:
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# 主要是新增了node_exporter的job,如果有多个node_exporter,在targets数组后面加即可
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
# 新增我们的Python股票采集脚本
- job_name: 'hot_list'
static_configs:
- targets: ['localhost:8000']
保存后重启prometheus:
systemctl restart prometheus
最后配置Grafana, 选择新建一个dashboard:
然后选择rank指标:
点击 Use query 就能获取所有股票的排名曲线:
6.配置告警
为了在某只股票达到某种排名的时候触发通知,我们需要先配置好告警渠道:
然后配置邮件告警,点击 Test, 此时 Grafana 会告诉你一个错误:
就是我们还没有配置好 SMTP 相关服务,需要配置 SMTP 相关服务才能正常发送邮件,如果你是按照本文按照Grafana的教程走下来的,那么Grafana.ini的文件位于 /etc/grafana/grafana.ini.
vim /etc/grafana/grafana.ini
然后在 smtp 部分配置你的 host、user、password、from_address、from_name,并打开 enabled 如下图所示:
然后重启 Grafana-server
systemctl restart grafana-server
再点击Test,你的邮箱里收到这样的邮件说明通知可以正常发送了:
然后我们进入正题,监控某只股票的排名变化,比如 SH600070:
然后点击 Alert 配置告警,一旦其排名高于65名则发送邮件通知:
完成后点击右上角的 save 保存即可:
然后进入 Alerting 告警中心,你会看到刚刚配置的告警规则在这里可以进行管控:
点击Pause可以暂停这个告警,Edit alert可以去更改告警条件。
一旦触发告警,这个状态便会更改,你就会收到邮件:
邮件效果如下:
邮件里的告警图片没显示出来,因为我们没有安装 “grafana image renderer”, 需要在你的服务器执行以下命令安装并重启 Grafana:
grafana-cli plugins install grafana-image-renderer
systemctl restart grafana-server
新的告警邮件便能看到图片了:
怎么样,用Prometheus+Grafana+Python采集搭建一个股票监控系统还是非常简单的吧?创新性地监控东方财富人气榜上某只股票的变化并产生告警,能让你熟悉监控策略的配置,见微知著。跟着本文的教程走,相信你会有不少收获。
我们可以监控所有100元以下的可转债对应的股票,如果这些股票进入了人气榜TOP100或者飙升榜(本文没有采集,有兴趣的读者可以自行采集),就购入这些低价可转债,这种买入策略或许也不错。
你也可以抛弃东方财富的榜单分类,构建自己的排名环比增长买入策略,环比下跌卖出策略,我相信这会非常有意思。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!
零基础Python学习资源介绍
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉100道Python练习题👈
检查学习结果。
👉面试刷题👈
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)