用Python搭建监控平台详解

news2024/11/18 15:24:48

b84f9a57c37a4a42924e0248e59a2205.jpg


 概要

 

监控和运维,是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控,我们能够及时了解到企业网络的运行状态。一旦出现安全隐患,你就可以及时预警,或者是以其他方式通知运维人员,让运维监控人员有时间处理和解决隐患,避免影响业务系统的正常使用,将一切问题的根源扼杀在摇篮当中。

不过,万变不离其宗,运维工作最重要的就是维护系统的稳定性。除了熟悉运用各种提高运维效率的工具来辅助工作外,云资源费用管理、安全管理、监控等,都需要耗费不少精力和时间。运维监控不是一朝一夕得来的,而是随着业务发展的过程中同步和发展的。

今天我们就使用 Django 这个 Web 框架,来搭建一个简单的量化监控平台。


 

Django 简介和安装

 

Django 是用 Python 开发的一个免费开源的 Web 框架,可以用来快速搭建优雅的高性能网站。它采用的是“MVC”的框架模式,即模型 M、视图 V 和控制器 C。

Django 最大的特色,在于将网页和数据库中复杂的关系,转化为 Python 中对应的简单关系。它的设计目的,是使常见的Web开发任务变得快速而简单。Django是开源的,不是商业项目或者科研项目,并且集中力量解决Web开发中遇到的一系列问题。所以,Django 每天都会在现有的基础上进步,以适应不断更迭的开发需求。这样既节省了开发时间,也提高了后期维护的效率。

说了这么多,接下来,我们通过上手使用进一步来了解。先来看一下,如何安装和使用 Django。你可以先按照下面代码块的内容来操作,安装Django :

pip3 install Django
django-admin --version

########## 输出 ##########

2.2.3

接着,我们来创建一个新的 Django 项目:

django-admin startproject TradingMonitor
cd TradingMonitor/
python3 manage.py migrate

########## 输出 ##########

  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

这时,你能看到文件系统大概是下面这样的:

TradingMonitor/
├── TradingMonitor
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
└── manage.py

我简单解释一下它的意思:

  • TradingMonitor/TradingMonitor,表示项目最初的 Python 包;

  • TradingMonitor/init.py,表示一个空文件,声明所在目录的包为一个 Python 包;

  • TradingMonitor/settings.py,管理项目的配置信息;

  • TradingMonitor/urls.py,声明请求 URL 的映射关系;

  • TradingMonitor/wsgi.py,表示Python 程序和 Web 服务器的通信协议;

  • manage.py,表示一个命令行工具,用来和 Django 项目进行交互;

  • Db.sqlite3,表示默认的数据库,可以在设置中替换成其他数据库。

另外,你可能注意到了上述命令中的 python3 manage.py migrate,这个命令表示创建或更新数据库模式。每当 model 源代码被改变后,如果我们要将其应用到数据库上,就需要执行一次这个命令。

接下来,我们为这个系统添加管理员账户:

python3 manage.py createsuperuser

########## 输出 ##########

Username (leave blank to use 'ubuntu'): admin
Email address:
Password:
Password (again):
Superuser created successfully.

然后,我们来启动 Django 的 debugging 模式:

python3 manage.py runserver

最后,打开浏览器输入: http://127.0.0.1:8000。如果你能看到下面这个画面,就说明 Django 已经部署成功了。

ec0f111d4d004b758f9e202ad654f0eb.png

 Django 的安装是不是非常简单呢?这其实也是 Python 一贯的理念,简洁,并简化入门的门槛。

OK,现在我们再定位到 http://127.0.0.1:8000/admin,你会看到 Django 的后台管理网页,这里我就不过多介绍了。

fe2d09adcc5347b88acf1963318a2881.png

0815334fd0884dccb60e27109d715493.png

 到此,Django 就已经成功安装,并且正常启动啦。

MVC 架构

刚刚说过,MVC 架构是 Django 设计模式的精髓。接下来,我们就来具体看一下这个架构,并通过 Django 动手搭建一个服务端。

设计模型 Model

peewee 这个库,它能避开通过繁琐的 SQL 语句来操作 MySQL,直接使用 Python 的 class 来进行转换。事实上,这也是 Django 采取的方式。

Django 无需数据库就可以使用,它通过对象关系映射器(object-relational mapping),仅使用Python代码就可以描述数据结构。

我们先来看下面这段 Model 代码:

#  TradingMonitor/models.py

from django.db import models

class Position(models.Model):
    asset = models.CharField(max_length=10)
    timestamp = models.DateTimeField()
    amount = models.DecimalField(max_digits=10, decimal_places=3)

models.py 文件主要用一个 Python 类来描述数据表,称为模型 。运用这个类,你可以通过简单的 Python 代码来创建、检索、更新、删除数据库中的记录,而不用写一条又一条的SQL语句,这也是我们之前所说的避免通过 SQL 操作数据库。

在这里,我们创建了一个 Position 模型,用来表示我们的交易仓位信息。其中,

  • asset 表示当前持有资产的代码,例如 btc;

  • timestamp 表示时间戳;

  • amount 则表示时间戳时刻的持仓信息。

设计视图 Views

在模型被定义之后,我们便可以在视图中引用模型了。通常,视图会根据参数检索数据,加载一个模板,并使用检索到的数据呈现模板。

设计视图,则是我们用来实现业务逻辑的地方。我们来看 render_positions 这个代码,它接受 request 和 asset 两个参数,我们先不用管 request。这里的 asset 表示指定一个资产名称,例如 btc,然后这个函数返回一个渲染页面。

#  TradingMonitor/views.py

from django.shortcuts import render
from .models import Position

def render_positions(request, asset):
    positions = Position.objects.filter(asset = asset)
    context = {'asset': asset, 'positions': positions}
    return render(request, 'positions.html', context)

不过,这个函数具体是怎么工作的呢?我们一行行来看。

positions = Position.objects.filter(asset = asset)

这行代码向数据库中执行一个查询操作,其中, filter 表示筛选,意思是从数据库中选出所有我们需要的 asset 的信息。不过,这里我只是为你举例做示范;真正做监控的时候,我们一般会更有针对性地从数据库中筛选读取信息,而不是一口气读取出所有的信息。

context = {'asset': asset, 'positions': positions}

这行代码没什么好说的,封装一个字典。至于这个字典的用处,下面的内容中可以体现。

return render(request, 'positions.html', context)

最后这行代码返回一个页面。这里我们采用的模板设计,这也是 Django 非常推荐的开发方式,也就是让模板和数据分离,这样,数据只需要向其中填充即可。

最后的模板文件是 position.html,你应该注意到了, context 作为变量传给了模板,下面我们就来看一下设计模板的内容。

设计模板Templates

模板文件,其实就是 HTML 文件和部分代码的综合。你可以想象成,这个HTML 在最终送给用户之前,需要被我们预先处理一下,而预先处理的方式就是找到对应的地方进行替换。

我们来看下面这段示例代码:

#  TradingMonitor/templates/positions.html

<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Positions for {{asset}}</title>
</head>

<body>
<h1>Positions for {{asset}}</h1>

<table>
<tr>
    <th>Time</th>
    <th>Amount</th>
</tr>
{% for position in positions %}
<tr>
    <th>{{position.timestamp}}</th>
    <th>{{position.amount}}</th>
</tr>
{% endfor %}
</table>
</body>

我重点说一下几个地方。首先是 <title>Positions for {{asset}}</title>,这里双大括号括住 asset 这个变量,这个变量对应的正是前面 context 字典中的 asset key。Django 的渲染引擎会将 asset ,替换成 context 中 asset 对应的内容,此处是替换成了 btc。

再来看 {% for position in positions %},这是个很关键的地方。我们需要处理一个列表的情况,用 for 对 positions 进行迭代就行了。这里的 positions ,同样对应的是 context 中的 positions。

末尾的 {% endfor %},自然就表示结束了。这样,我们就将数据封装到了一个列表之中。

设计链接 Urls

最后,我们需要为我们的操作提供 URL 接口,具体操作我放在了下面的代码中,内容比较简单,我就不详细展开讲解了。

#  TradingMonitor/urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('positions/<str:asset>', views.render_positions),
]

到这里,我们就可以通过 http://127.0.0.1:8000/positions/btc 来访问啦!

测试

当然,除了主要流程外,我还需要强调几个很简单但非常关键的细节,不然,我们这些改变就不能被真正地应用。

第一步,在 TradingMonitor/TradingMonitor 下,新建一个文件夹 migrations;并在这个文件夹中,新建一个空文件 __init__.py

mkdir TradingMonitor/migrations
touch TradingMonitor/migrations/__init__.py

此时,你的目录结构应该长成下面这样:

TradingMonitor/
├── TradingMonitor
│   ├── migrations
│       └── __init__.py
│   ├── templates
│       └── positions.html
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── models.py
│   ├── views.py
│   └── wsgi.py
├── db.sqlite3
└── manage.py

第二步,修改 TradingMonitor/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TradingMonitor',  # 这里把我们的 app 加上
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'TradingMonitor/templates')],  # 这里把 templates 的目录加上
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

第三步,运行 python manage.py makemigrations

python manage.py makemigrations

########## 输出 ##########

Migrations for 'TradingMonitor':
  TradingMonitor/migrations/0001_initial.py
    - Create model Position

第四步,运行 python manage.py migrate

python manage.py migrate

########## 输出 ##########

Operations to perform:
  Apply all migrations: TradingMonitor, admin, auth, contenttypes, sessions
Running migrations:
  Applying TradingMonitor.0001_initial... OK

这几步的具体操作,我都用代码和注释表示了出来,你完全可以同步进行操作。操作完成后,现在,我们的数据结构就已经被成功同步到数据库中了。

最后,输入 python manage.py runserver,然后打开浏览器输入 http://127.0.0.1:8000/positions/btc,你就能看到效果啦。

现在,我们再回过头来看一下 MVC 模式,你可以看到,M、V、C这三者,以一种插件似的、松耦合的方式连接在一起:

5c77713f48484c3e9bb95e7a80e05445.png

 当然,我带你写的只是一个简单的 Django 应用程序,对于真正的量化平台监控系统而言,这还只是一个简单的开始。

除此之外,对于监控系统来说,其实还有着非常多的开源插件可以使用。有一些界面非常酷炫,有一些可以做到很高的稳定性和易用性,它们很多都可以结合 Django 做出很好的效果来。比较典型的有:

  • Graphite 是一款存储时间序列数据,并通过 Django Web 应用程序在图形中显示的插件;

  • Vimeo 则是一个基于 Graphite 的仪表板,具有附加功能和平滑的设计;

  • Scout 监控 Django和Flask应用程序的性能,提供自动检测视图、SQL查询、模板等。

总结

本文,我们以 Django 这个 Python 后端为例,讲解了搭建一个服务端的过程。你应该发现了,使用 RESTful Framework 搭建服务器是一个非常不错的选择。

 

好了今天的分享就到这里,如果文章对你有帮助,欢迎帮忙点赞转发收藏,感谢🙏。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle 自定义类型(type)的用法

emp表数据如下所示 定义object类型 create or replace type typeof_userinfo_row as object(user_id varchar2(50),user_name varchar2(50) )创建函数并将此类型作为返回值类型 create or replace function FUN_TEST return typeof_userinfo_row isFunctionResult typeof_use…

互联网业务全球化互通组网

随着互联网业务的快速发展&#xff0c;越来越多的企业开始全球化扩张业务&#xff0c;并需要在全球范围内建立互联网组网以实现业务数据的高效传输。在这个过程中&#xff0c;如何建立高效、稳定的全球互联网组网方案&#xff0c;是每个企业都需要考虑的问题。 一种可行的方案…

springboot 上传文件

在Spring Boot中&#xff0c;可以使用RequestParam注解来接收文件。 在你的控制器方法中&#xff0c;使用RequestParam注解来声明一个MultipartFile类型的参数来接收上传的文件 MultipartFile是spring类型&#xff0c;代表HTML中form data方式上传的文件&#xff0c;包含二进制…

【C语言操作符优先级】

C语言操作符优先级 C语言操作符1、操作符的优先级序表2、操作符的属性2.1、操作符优先级运算例程12.2、操作符优先级运算例程2 C语言操作符 前言&#xff1a; &#xff08;1&#xff09;在我们熟悉的数学加减乘除运算中&#xff0c;都知道先乘除再加减&#xff0c;有括号的先算…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

数据库管理-第八十六期 19c OCM之路-第一堂(01)(20230628)

数据库管理 2023-06-28 第八十六期 19c OCM之路-第一堂&#xff08;01&#xff09;1 环境补充说明2 第一堂-01考点1&#xff1a;Create a pluggable database 创建PDB考点2&#xff1a;Create tablespace 创建表空间考点3&#xff1a;Managing undo 管理undo 总结 第八十六期 1…

【无名管道】无名管道(Pipe)与进程通信:快速上手

目录 0. 管道概述&#xff1a; 1. 管道特点 2. 管道创建&#xff1a;pipe函数 3. 管道的读写特点 4. 通过fcntl函数设置文件的阻塞特性 5. 查看管道缓冲区命令 总结&#xff1a; 0. 管道概述&#xff1a; 管道也叫无名管道&#xff0c;它是是 UNIX 系统 IPC&#xff08;…

019、数据库管理之备份恢复管理(BR)

备份的重要性 数据库恢复审计和分析典型DBA任务 备份的类型 热备&#xff0c;允许应用程序完全访问数据。冷备&#xff0c;不允许应用程序访问年数据温备&#xff0c;允许应用程序读取&#xff0c;但不能修改 热备份 热备份是在读取和修改数据时进行的&#xff0c;几乎不会…

怎么高效批量调整视频的尺寸大小

大家平时在剪辑视频的过程中&#xff0c;是否会遇到视频尺寸大小不合适的情况&#xff0c;当我们遇到这种情况时&#xff0c;如何才能快速批量地解决呢&#xff1f;有没有什么方法可以快速批量修改视频尺寸大小呢&#xff1f;跟着小编一起来看看我平时批量修改视频尺寸的方法。…

联邦学习的架构思想

目录 联邦学习介绍&#xff08;非常详细&#xff09; 联邦学习的由来 联邦学习的发展历程 1) 机器学习 2) 分布式机器学习 3) 隐私保护技术 4) 联邦学习 联邦学习的规范与标准 联邦学习的架构思想 联邦学习的社区与生态 联邦学习介绍&#xff08;非常详细&#xff09…

Lenovo联想笔记本电脑 小新 Air-14 2020 Intel平台IIL版(81YJ)原装Win10系统恢复原厂OEM预装专用系统

Lenovo联想笔记本电脑&#xff0c;小新 Air-14 2020 Intel平台IIL版(81YJ)出厂Windows10系统原装系统镜像&#xff0c;恢复原厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1…

基于微信小程序的上课签到系统(数据库+报告+文档+演示视频)

系统技术语言介绍&#xff1a; 本系统采用了SSM (Spring Spring MVC Mybatis&#xff09;架构&#xff0c; MySQL作为基础数据库&#xff0c;微信开发工具作为前端基础&#xff0c;前端采用了 wxml的设计语言&#xff0c;Idea作为后台的开发工具。 功能列表&#xff1a; 1.…

从数字图像到音视频学习:我的学习之旅

数字图像是一门广泛应用于计算机视觉、图像处理和计算机图形学等领域的学科&#xff0c;而音视频学习则涵盖了音频和视频的处理、分析和应用。 如果你最开始接触数字图像&#xff0c;可能会学习一些基本概念&#xff0c;例如像素、分辨率、色彩空间和图像处理算法等。这可能涉…

java项目之药源购物网站ssm源码+文档

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的药源购物网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#xff…

隔离变压器和浪涌保护器SPD有哪些不同作用

浪涌保护装置&#xff08;SPD&#xff09;和隔离变压器的作用经常混淆。为了保护敏感的电子设备和设备免受瞬态事件的影响&#xff0c;必须考虑各种因素。 无论瞬态来自外部还是内部&#xff0c;信号噪声、共模瞬变、差模瞬变和接地电位上升都可能导致保护不力的设备出现问题。…

vue中使用mock.js

安装mock npm install mockjs --save-dev或者在ui中选择依赖 查看安装是否成功 进入package.json文件 配置mock 在src目录下新建mock文件夹&#xff0c;在mock文件夹下建立index.js 配置模拟请求数据 index.js import Mock from mockjsconst loginData Mock.mock(http://l…

【 云原生 kubernetes 】- 单点登录Authelia + OpenLdap

文章目录 简介AutheliaOpenLdap属性介绍 Helm部署openldap配置调整数据持久化部署使用命令行Web Authelia 页面访问反向代理进行集成流程 ⚡️: OpenLDAP是轻量级目录访问协议&#xff08;LDAP&#xff09;的开源实现&#xff0c;它提供了一种存储和访问关于用户、组、计算机和…

使用Python将图片转pdf

使用Python将图片转pdf 1. 效果图2. 源码参考 今天需要把图片转pdf&#xff0c;发现迅捷pdf转换开始默认带水印了&#xff0c;收费版那算了&#x1f602;&#x1f602;&#xff0c;那就用Python吧&#xff0c;可单转&#xff0c;可批量转。 参考: https://blog.csdn.net/qq_53…

我是如何在linux下 安装 mongoDB的

背景 接到上级任务&#xff0c;需要在测试环境搭建一套mongodb&#xff1b;对于从来没接触过mongodb的小白&#xff0c;但拥有多年编程经验的我来说&#xff0c;不虚好吧。因为我有自己做事的思考。 首先向领导确认两点&#xff1a; 搭建mongo db是单机版的&#xff0c;还是主…

自定义Veiw实战《渐变的文字》

自定义Veiw实战《渐变的文字》 前言SpannableString什么时候使用常用场景 自定义TextView控件什么时候使用实战歌词渐变的文字先看效果第一步&#xff1a;初始化第二步&#xff1a;测量文字&#xff0c;并确认文字绘制的起点第三步&#xff1a;绘制文字第四步&#xff1a;调用 …