亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python搭建監(jiān)控平臺的實現(xiàn)示例

 更新時間:2023年07月12日 15:22:10   作者:滿載星輝  
本文主要介紹了Python搭建監(jiān)控平臺的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

監(jiān)控和運維,是互聯(lián)網(wǎng)工業(yè)鏈上非常重要的一環(huán)。監(jiān)控的目的就是防患于未然。通過監(jiān)控,我們能夠及時了解到企業(yè)網(wǎng)絡(luò)的運行狀態(tài)。一旦出現(xiàn)安全隱患,你就可以及時預(yù)警,或者是以其他方式通知運維人員,讓運維監(jiān)控人員有時間處理和解決隱患,避免影響業(yè)務(wù)系統(tǒng)的正常使用,將一切問題的根源扼殺在搖籃當(dāng)中。

不過,萬變不離其宗,運維工作最重要的就是維護(hù)系統(tǒng)的穩(wěn)定性。除了熟悉運用各種提高運維效率的工具來輔助工作外,云資源費用管理、安全管理、監(jiān)控等,都需要耗費不少精力和時間。運維監(jiān)控不是一朝一夕得來的,而是隨著業(yè)務(wù)發(fā)展的過程中同步和發(fā)展的。

今天我們就使用 Django 這個 Web 框架,來搭建一個簡單的量化監(jiān)控平臺。

Django 簡介和安裝

Django 是用 Python 開發(fā)的一個免費開源的 Web 框架,可以用來快速搭建優(yōu)雅的高性能網(wǎng)站。它采用的是“MVC”的框架模式,即模型 M、視圖 V 和控制器 C。

Django 最大的特色,在于將網(wǎng)頁和數(shù)據(jù)庫中復(fù)雜的關(guān)系,轉(zhuǎn)化為 Python 中對應(yīng)的簡單關(guān)系。它的設(shè)計目的,是使常見的Web開發(fā)任務(wù)變得快速而簡單。Django是開源的,不是商業(yè)項目或者科研項目,并且集中力量解決Web開發(fā)中遇到的一系列問題。所以,Django 每天都會在現(xiàn)有的基礎(chǔ)上進(jìn)步,以適應(yīng)不斷更迭的開發(fā)需求。這樣既節(jié)省了開發(fā)時間,也提高了后期維護(hù)的效率。

說了這么多,接下來,我們通過上手使用進(jìn)一步來了解。先來看一下,如何安裝和使用 Django。你可以先按照下面代碼塊的內(nèi)容來操作,安裝Django :

pip3?install?Django
django-admin?--version
##########?輸出?##########
2.2.3

接著,我們來創(chuàng)建一個新的 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

這時,你能看到文件系統(tǒng)大概是下面這樣的:

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 的映射關(guān)系;
  • TradingMonitor/wsgi.py,表示Python 程序和 Web 服務(wù)器的通信協(xié)議;
  • manage.py,表示一個命令行工具,用來和 Django 項目進(jìn)行交互;
  • Db.sqlite3,表示默認(rèn)的數(shù)據(jù)庫,可以在設(shè)置中替換成其他數(shù)據(jù)庫。

另外,你可能注意到了上述命令中的 python3 manage.py migrate,這個命令表示創(chuàng)建或更新數(shù)據(jù)庫模式。每當(dāng) model 源代碼被改變后,如果我們要將其應(yīng)用到數(shù)據(jù)庫上,就需要執(zhí)行一次這個命令。

接下來,我們?yōu)檫@個系統(tǒng)添加管理員賬戶:

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 已經(jīng)部署成功了。

alt

Django 的安裝是不是非常簡單呢?這其實也是 Python 一貫的理念,簡潔,并簡化入門的門檻。

OK,現(xiàn)在我們再定位到 http://127.0.0.1:8000/admin,你會看到 Django 的后臺管理網(wǎng)頁,這里我就不過多介紹了。

alt

alt

到此,Django 就已經(jīng)成功安裝,并且正常啟動啦。

MVC 架構(gòu)

剛剛說過,MVC 架構(gòu)是 Django 設(shè)計模式的精髓。接下來,我們就來具體看一下這個架構(gòu),并通過 Django 動手搭建一個服務(wù)端。

設(shè)計模型 Model

peewee 這個庫,它能避開通過繁瑣的 SQL 語句來操作 MySQL,直接使用 Python 的 class 來進(jìn)行轉(zhuǎn)換。事實上,這也是 Django 采取的方式。

Django 無需數(shù)據(jù)庫就可以使用,它通過對象關(guān)系映射器(object-relational mapping),僅使用Python代碼就可以描述數(shù)據(jù)結(jié)構(gòu)。

我們先來看下面這段 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 類來描述數(shù)據(jù)表,稱為模型 。運用這個類,你可以通過簡單的 Python 代碼來創(chuàng)建、檢索、更新、刪除數(shù)據(jù)庫中的記錄,而不用寫一條又一條的SQL語句,這也是我們之前所說的避免通過 SQL 操作數(shù)據(jù)庫。

在這里,我們創(chuàng)建了一個 Position 模型,用來表示我們的交易倉位信息。其中,

  • asset 表示當(dāng)前持有資產(chǎn)的代碼,例如 btc;
  • timestamp 表示時間戳;
  • amount 則表示時間戳?xí)r刻的持倉信息。

設(shè)計視圖 Views

在模型被定義之后,我們便可以在視圖中引用模型了。通常,視圖會根據(jù)參數(shù)檢索數(shù)據(jù),加載一個模板,并使用檢索到的數(shù)據(jù)呈現(xiàn)模板。

設(shè)計視圖,則是我們用來實現(xiàn)業(yè)務(wù)邏輯的地方。我們來看 render_positions 這個代碼,它接受 request 和 asset 兩個參數(shù),我們先不用管 request。這里的 asset 表示指定一個資產(chǎn)名稱,例如 btc,然后這個函數(shù)返回一個渲染頁面。

#??TradingMonitor/views.py
from?django.shortcuts?import?render
from?.models?import?Position
def?render_positions(request,?asset):
????positions?=?Position.objects.filter(asset?=?asset)
????context?&#61;?{<!-- -->&#39;asset&#39;:?asset,?&#39;positions&#39;:?positions}
????return?render(request,?&#39;positions.html&#39;,?context)

不過,這個函數(shù)具體是怎么工作的呢?我們一行行來看。

  • positions = Position.objects.filter(asset = asset),這行代碼向數(shù)據(jù)庫中執(zhí)行一個查詢操作,其中, filter 表示篩選,意思是從數(shù)據(jù)庫中選出所有我們需要的 asset 的信息。不過,這里我只是為你舉例做示范;真正做監(jiān)控的時候,我們一般會更有針對性地從數(shù)據(jù)庫中篩選讀取信息,而不是一口氣讀取出所有的信息。
  • context = {'asset': asset, 'positions': positions},這行代碼沒什么好說的,封裝一個字典。至于這個字典的用處,下面的內(nèi)容中可以體現(xiàn)。
  • return render(request, 'positions.html', context),最后這行代碼返回一個頁面。這里我們采用的模板設(shè)計,這也是 Django 非常推薦的開發(fā)方式,也就是讓模板和數(shù)據(jù)分離,這樣,數(shù)據(jù)只需要向其中填充即可。

最后的模板文件是 position.html,你應(yīng)該注意到了, context 作為變量傳給了模板,下面我們就來看一下設(shè)計模板的內(nèi)容。

設(shè)計模板Templates

模板文件,其實就是 HTML 文件和部分代碼的綜合。你可以想象成,這個HTML 在最終送給用戶之前,需要被我們預(yù)先處理一下,而預(yù)先處理的方式就是找到對應(yīng)的地方進(jìn)行替換。

我們來看下面這段示例代碼:

#??TradingMonitor/templates/positions.html
<!DOCTYPE?html>
<html?lang&#61;&#34;en-US&#34;>
<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 這個變量,這個變量對應(yīng)的正是前面 context 字典中的 asset key。Django 的渲染引擎會將 asset ,替換成 context 中 asset 對應(yīng)的內(nèi)容,此處是替換成了 btc。

再來看 {% for position in positions %},這是個很關(guān)鍵的地方。我們需要處理一個列表的情況,用 for 對 positions 進(jìn)行迭代就行了。這里的 positions ,同樣對應(yīng)的是 context 中的 positions。

末尾的 {% endfor %},自然就表示結(jié)束了。這樣,我們就將數(shù)據(jù)封裝到了一個列表之中。

設(shè)計鏈接 Urls

最后,我們需要為我們的操作提供 URL 接口,具體操作我放在了下面的代碼中,內(nèi)容比較簡單,我就不詳細(xì)展開講解了。

#??TradingMonitor/urls.py

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

urlpatterns?&#61;?[
????path(&#39;admin/&#39;,?admin.site.urls),
????path(&#39;positions/&lt;str:asset&gt;&#39;,?views.render_positions),
]

到這里,我們就可以通過 http://127.0.0.1:8000/positions/btc 來訪問啦!

測試

當(dāng)然,除了主要流程外,我還需要強(qiáng)調(diào)幾個很簡單但非常關(guān)鍵的細(xì)節(jié),不然,我們這些改變就不能被真正地應(yīng)用。

第一步,在 TradingMonitor/TradingMonitor 下,新建一個文件夾 migrations;并在這個文件夾中,新建一個空文件 __init__.py

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

此時,你的目錄結(jié)構(gòu)應(yīng)該長成下面這樣:

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?&#39;TradingMonitor&#39;:
??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

這幾步的具體操作,我都用代碼和注釋表示了出來,你完全可以同步進(jìn)行操作。操作完成后,現(xiàn)在,我們的數(shù)據(jù)結(jié)構(gòu)就已經(jīng)被成功同步到數(shù)據(jù)庫中了。

最后,輸入 python manage.py runserver,然后打開瀏覽器輸入 http://127.0.0.1:8000/positions/btc,你就能看到效果啦。

現(xiàn)在,我們再回過頭來看一下 MVC 模式,你可以看到,M、V、C這三者,以一種插件似的、松耦合的方式連接在一起:

alt

當(dāng)然,我?guī)銓懙闹皇且粋€簡單的 Django 應(yīng)用程序,對于真正的量化平臺監(jiān)控系統(tǒng)而言,這還只是一個簡單的開始。

除此之外,對于監(jiān)控系統(tǒng)來說,其實還有著非常多的開源插件可以使用。有一些界面非常酷炫,有一些可以做到很高的穩(wěn)定性和易用性,它們很多都可以結(jié)合 Django 做出很好的效果來。比較典型的有:

  • Graphite 是一款存儲時間序列數(shù)據(jù),并通過 Django Web 應(yīng)用程序在圖形中顯示的插件;
  • Vimeo 則是一個基于 Graphite 的儀表板,具有附加功能和平滑的設(shè)計;
  • Scout 監(jiān)控 Django和Flask應(yīng)用程序的性能,提供自動檢測視圖、SQL查詢、模板等。

總結(jié)

本文,我們以 Django 這個 Python 后端為例,講解了搭建一個服務(wù)端的過程。你應(yīng)該發(fā)現(xiàn)了,使用 RESTful Framework 搭建服務(wù)器是如此的簡單呀!

到此這篇關(guān)于Python搭建監(jiān)控平臺的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python搭建監(jiān)控平臺內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論