Python Django項目日志查詢系統


該項目適合中小型公司日志查詢工作。大型公司可以使用elk等。該系統其實就是調用了absible命令去查日志,然后把輸出的信息輸到頁面查看。

 

                                       日志查詢系統

                                                                           維護手冊

                                                                         作者:陳土鋒

                                                                      日期:2020年6月11日

目錄

前言... 1

一、系統底層邏輯說明... 2

二、環境說明... 2

三、系統搭建... 2

3.1 安裝Python3. 2

3.1.1 安裝依賴環境... 2

3.1.2下載Python3. 3

3.1.3 安裝Python3. 3

3.1.4 建立Python3和pip3的軟鏈:. 3

3.1.5 並將/usr/local/python3/bin加入PATH. 3

3.2 安裝虛擬環境... 4

3.2.1 生產環境虛擬環境包路徑:... 4

3.2.2 先安裝distlib-0.3.0.zip. 4

3.2.3 創建虛擬環境... 5

3.3 安裝Django. 6

3.4 測試項目是否正常運行... 7

3.4.1 項目部署... 7

3.4.2 項目測試... 8

四、nginx+uwsgi+Django代理項目... 8

4.1 安裝uwsgi 8

4.2 配置uwsgi 9

4.3 啟動uwsgi 10

4.4 配置nginx 代理Django. 10

五、Django3.0.7安裝... 12

 

前言

1、該程序是根據xxxxxx目前系統管理層面開發而成,故僅適用於xxxxxx系統平台。

2、該系統開發初心為減少運維協助研發查詢線上生產日志、線上配置和線上其他環境而開發出來的。

3、架構使用了Python3+Django+uwsgi+nginx 基礎架構。

4、底層調用ansible命令

 

一、系統底層邏輯說明

1.1 前端代碼通過form表單提交用戶交互信息到后端。

1.2 后端接受到輸入信息,經過邏輯處理之后調用服務器的ansible命令來執行遠程命令。

1.3 遠程命令返回的結果,再通過文本格式展示到前端頁面供用戶查看。

1.4 如果文本文件行數過多,則用戶可以通過下載的連接下載到文本到本地查看查看。

 

二、環境說明

2.1 服務器安裝ansible命令(前提)

2.2 ansible服務器必須能通過下面命令格式去執行遠程命令:

如:ansible slivr --sudo -m shell -a "ls -l "

如果是root用戶則在sudoer文件加入root用戶sudo權限即可,這樣無需修改代碼。

2.3 安裝Python3

2.4 安裝虛擬環境

2.5 安裝Django 1.8 版本(最新版Django3.5需要改下代碼的URL轉發方式)

 

三、系統搭建

3.1 安裝Python3

3.1.1 安裝依賴環境

輸入命令:yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

 

3.1.2下載Python3

1.進入opt文件目錄下,cd opt/

2.下載python3   (可以到官方先看最新版本多少)

輸入命令 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz

3.1.3 安裝Python3

安裝在/usr/local/python3(具體安裝位置看個人喜好)

(1)創建目錄:  mkdir -p /usr/local/python3

(2)解壓下載好的Python-3.x.x.tgz包(具體包名因你下載的Python具體版本不不同⽽而不不同,如:我下載的是Python3.7.1.那我這里就是Python-3.7.1.tgz)

輸入命令 tar -zxvf Python-3.7.1.tgz

解壓后出現python的文件夾

進入解壓后的目錄,編譯安裝。(編譯安裝前需要安裝編譯器yum install gcc)

(3)進入python文件夾,生成編譯腳本(指定安裝目錄):

 cd Python-3.7.1

./configure --prefix=/usr/local/python3  

#/usr/local/python3為上面步驟創建的目錄

(4)編譯:make

(5)編譯成功后,編譯安裝:make install

安裝成功:

(6)檢查python3.7的編譯器:/usr/local/python3/bin/python3.7

3.1.4 建立Python3和pip3的軟鏈:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

3.1.5 並將/usr/local/python3/bin加入PATH

(1)vim /etc/profile

(2)按“I”,然后貼上下面內容:

# vim ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/python3/bin

export PATH

source ~/.bash_profile

 

 

3.2 安裝虛擬環境

3.2.1 生產環境虛擬環境包路徑:

需要用到下面這些包:可以用一台聯網的linux系統用pip命令下載到本地再上傳到離線的服務器。

appdirs-1.4.3-py2.py3-none-any.whl

distlib-0.3.0.zip

filelock-3.0.12-py3-none-any.whl

importlib_metadata-1.6.0-py2.py3-none-any.whl

importlib_resources-1.4.0-py2.py3-none-any.whl

pbr-5.4.5-py2.py3-none-any.whl

six-1.14.0-py2.py3-none-any.whl

stevedore-1.32.0-py2.py3-none-any.whl

virtualenv-20.0.18-py2.py3-none-any.whl

virtualenv_clone-0.5.4-py2.py3-none-any.whl

virtualenvwrapper-4.8.2-py2.py3-none-any.whl

zipp-3.1.0-py3-none-any.whl

 

3.2.2 先安裝distlib-0.3.0.zip

unzip distlib-0.3.0.zip

cd distlib-0.3.0

python3 setup.py build

python3 setup.py install

再安裝所有的whl包:

pip3 install *.whl

 

3.2.3 配置環境

mkdir /root/.virtualenvs

用locate virtualenvwrapper.sh 找出這個文件的路徑,一般在安裝的python3 bin目錄下

vim ~/.bashrc 

export WORKON_HOME=/root/.virtualenvs 

source /usr/local/python3/bin/virtualenvwrapper.sh

 

vim  /usr/local/python3/bin/virtualenvwrapper.sh

找到VIRTUALENVWRAPPER_PYTHON關鍵字,在下面的if上面添加紅色代碼,python路徑要對。

VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3

if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]

then

source ~/.bashrc

做virtualenv命令軟連接:否則后續創建虛擬環境會報錯

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

 

 

[root@ansible-server2 dwlirui2]# pip3 list --可以看到已經安裝了上面的包()

Package Version

------------------- -------

appdirs 1.4.3

distlib 0.3.0

filelock 3.0.12

importlib-metadata 1.6.0

importlib-resources 1.4.0

pbr 5.4.5

pip 20.0.2

setuptools 39.0.1

six 1.14.0

stevedore 1.32.0

virtualenv 20.0.18

virtualenv-clone 0.5.4

virtualenvwrapper 4.8.2

zipp 3.1.0

 

3.2.3 創建虛擬環境

[root@ansible-server2 dwlirui2]# mkvirtualenv -p python3 env1

創建成功之后你會默認進入虛擬環境,如創建env1:

[root@ansible-server2 dwlirui2]# mkvirtualenv -p python3 env1

created virtual environment CPython3.6.5.final.0-64 in 1210ms

  creator CPython3Posix(dest=/root/.virtualenvs/env3, clear=False, global=False)

  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)

  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/predeactivate

virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/postdeactivate

virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/preactivate

virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/postactivate

virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/get_env_details

(env1) [root@ansible-server2 dwlirui2]# 這個虛擬環境里面安裝的軟件和外面環境分開的

 

 

3.3 安裝Django

通過舊的虛擬環境導出來的包:存放到requirements.txt文件里面。

舊環境登陸虛擬環境執行導出命令:pip3 freeze >requirements.txt

cat requirements.txt --下載如下包

certifi==2020.4.5.1

chardet==3.0.4

Django==1.8.2

idna==2.9

requests==2.23.0

urllib3==1.25.8

然后找一台測試環境能聯網的機器下載這些包:

[root@vm44 django_instaa]# pip3 download -r requirements.txt

[root@vm44 django_instaa]# ls --總共下載了下面這么多包

backcall-0.1.0.tar.gz idna-2.9-py2.py3-none-any.whl

backcall-0.1.0.zip requests-2.23.0-py2.py3-none-any.whl

certifi-2020.4.5.1-py2.py3-none-any.whl requirements.txt

chardet-3.0.4-py2.py3-none-any.whl

distlib-0.3.0.zip urllib3-1.25.8-py2.py3-none-any.whl

Django-1.8.2-py2.py3-none-any.whl

scp * root@xx.xx.xx.xx:/data/python_install/django_install --把包傳到遠程離線服務器

離線服務器登陸虛擬環境

workon env1 --以下命令均在虛擬環境執行

cd /data/python_install/django_install

離線虛擬環境先安裝:backcall-0.1.0.zip,distlib-0.3.0.zip

以安裝backcall-0.1.0.zip為例:

unzip backcall-0.1.0.zip

cd backcall-0.1.0

python3 setup.py build

python3 setup.py install

再安裝所有的whl包:

pip3 install *.whl

 

安裝完了之后,確定是否存在下面這些包:

[root@ansible-server2 logs]# workon  env1

 (env1) [root@ansible-server2 logs]# pip list

Package    Version  

---------- ----------

backcall   0.1.0    

certifi    2020.4.5.1

chardet    3.0.4    

distlib    0.3.0    

Django     1.8.2    

idna       2.9      

pip        20.0.2   

requests   2.23.0   

setuptools 46.1.3   

urllib3    1.25.8   

uWSGI      2.0.18   

wheel      0.34.2 

 

3.4 測試項目是否正常運行

我是通過虛擬環境搭建這個的,nginx安裝到服務器上面,uwsgi和Django部署到虛擬環境上面。uwsgi和Django在虛擬環境啟動。nginx 在服務器層面啟動。

項目代碼已經備份到10.1.164.15:/share/logs_bak/10.1.99.243/ logsquerybak/logsquery.20200601.tar.gz

3.4.1 項目部署

我的Django項目部署情況:

部署路徑:

/biao/hly_yw_project/

即將logsquery.20200601.tar.gz 直接解壓到/biao/hly_yw_project 目錄。

manage.py 文件路徑:/biao/hly_yw_project/logsquery/manage.py

wsgi.py 文件路徑:/biao/hly_yw_project/logsquery/logsquery/wsgi.py

settings.py 文件路徑:/biao/hly_yw_project/logsquery/logsquery/settings.py

查詢出來的文件放到這里:

/biao/hly_yw_project/logsquery/queryapp/static/files/

目前只保留7天的文件:

0 2 * * * find /biao/hly_yw_project/logsquery/queryapp/static/files -name "*.txt" -mtime +7 -type f |xargs rm -f

項目結構是這樣的:

 

3.4.2 項目測試

1、確保Django項目能夠正常運行,即能夠用Python3 manage.py runserver 0.0.0.0:8000 運行。

(env1) [root@ansible-server2 logs]# cd /biao/hly_yw_project/logsquery/

(env1) [root@ansible-server2 logs]# Python3 manage.py runserver 0.0.0.0:8000

用瀏覽器訪問ip:8000看下能否正常訪問下面頁面。

 

 

 

 

四、nginx+uwsgi+Django代理項目

4.1 安裝uwsgi

uwsgi是wsgi協議的實現服務。

我是離線安裝的。

下載 uwsgi-2.0.18.tar.gz

可以找一台能夠聯網的服務器通過pip download 命令來下載,傳到離線服務器上面。

解壓安裝:(在虛擬環境里面安裝)

workon env1

tar zxf uwsgi-2.0.18.tar.gz

cd uwsgi-2.0.18

python3 setup.py build

python3 setup.py install

pip list 查看是否安裝成功

uWSGI 2.0.18

 

4.2 配置uwsgi

mkdir /etc/uwsgi_conf/

cat /etc/uwsgi_conf/uwsgi.ini

# uwsig使用配置文件啟動

[uwsgi]

# 項目所在的根目錄

chdir=/biao/hly_yw_project/logsquery

# 指定項目的application,區別於啟動命令--wsgi-filemysite/wsgi.py

#logsquery自己應用的名字

module=logsquery.wsgi:application

#the local unix socket file than commnuincate to Nginx

# 指定sock的文件路徑,這個sock文件會在nginx的uwsgi_pass配置,用來nginx與uwsgi通信

# 支持ip+port模式以及socket file模式

#socket=/etc/uwsgi_conf/uwsgi.sock

socket=127.0.0.1:9050

# 進程個數

processes = 8

# 每個進程worker數

workers=5

procname-prefix-spaced=queryapp # uwsgi的進程名稱前綴

py-autoreload=1 # py文件修改,自動加載

# 指定IP端口,web訪問入口

http=0.0.0.0:9051

# 啟動uwsgi的用戶名和用戶組

uid=root

gid=root

# 啟用主進程

master=true

# 自動移除unix Socket和pid文件當服務停止的時候

vacuum=true

# 序列化接受的內容,如果可能的話

thunder-lock=true

# 啟用線程

enable-threads=true

# 設置一個超時,用於中斷那些超過服務器請求上限的額外請求

harakiri=30

# 設置緩沖

post-buffering=4096

# 設置日志目錄

daemonize=/var/log/uwsgi_conf/uwsgi.log

# uWSGI進程號存放

pidfile=/etc/uwsgi_conf/uwsgi.pid

#monitor uwsgi status 通過該端口可以監控 uwsgi 的負載情況

# 支持ip+port模式以及socket file模式

# stats=%(chdir)/uwsgi_conf/uwsgi.status

 

 

4.3 啟動uwsgi

cd /etc/uwsgi_conf/

uwsgi --ini uwsgi.ini

停止:

uwsgi --stop uwsgi.pid

 

 

4.4 配置nginx 代理Django

nginx添加一個server:  

server {

            listen       8000;

            server_name  10.1.99.243;

            #注釋下面配置,同時支持https和http訪問

            #ssl on;

   

            #access_log  off;

            access_log /var/log/nginx/nginx.log;

            error_log /var/log/nginx/nginx.log;

            charset utf-8;

            client_max_body_size 100M;

   

            location /static{

                    alias /biao/hly_yw_project/logsquery/queryapp/static;

            }

   

            location /  {

                    include  /etc/nginx/uwsgi_params;

                    uwsgi_pass 0.0.0.0:9050;

                    proxy_read_timeout 3600s;

                    proxy_send_timeout 3600s;

                    uwsgi_read_timeout 600;

                    uwsgi_send_timeout 600;

                    uwsgi_connect_timeout 600;

            }

            error_page   500 502 503 504  /50x.html;

            location = /50x.html {

                root   html;

            }

            #使用497狀態重寫到http上面

        }

 

 

重啟nginx或者重載nginx

nginx -s reload

頁面訪問:

http://ip:8000即可訪問Django項目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五、Django3.0.7安裝

因1.8.2版本有漏洞,需要升級到最新版。最新版有些模塊不兼容,代碼也有些地方相對1.8.2的有改動。

Django3.0的需要用這個包:

10.1.99.243: /biao/hly_yw_project/logsquery.django3.0.7.tar.gz

其他應用安裝方式不變,安裝Django3.0.7方式。

安裝包備份目錄:
10.1.99.243: /usr/local/vvm/logs/django

10.1.164.15:/share/logs_bak/10.1.99.243/django

進入虛擬環境:

workon env1

#解壓

tar zxf django3.0.tar.gz

#安裝

pip install *whl

其他配置參考1.8.2的

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM