昨天我們講解完了docker-compose 啟動 nginx + flask的流程,接著我們可以透過cmd檢視目前container的log。今天我們透過改變flask的一些設定,以及特別將程式留下錯誤,讓系統會報error log,來檢視nginx log蒐集的狀況。
剛剛提到,按照上一篇設置好後,我們可以透過
docker-compose up
去啟動docker-compose的container,會呈現像下面一樣的畫面。
可以看到上面關於flask,會有一個uwsgi的log,這也就是啟動uwsgi的部分。而Nginx因為背景執行,因此就沒有log顯示。log會記錄在我們放Log的資料夾。
而這時候當我們拜訪頁面,uwsgi就會出現reqeust的Log。
如下:
可以看到request會報在cmd上,除此之外也會在nginx的log中
而這時候我們改flask的架構,多設一個endpoint叫做list,並且隨便給一個response
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
@app.route('/list')
def list():
return "List"
if __name__ == '__main__':
app.run()
這時候因為我們有改過了,而我們的container中是舊版的檔案,因此我們可以透過
docker-compose up --build
這個指令會重新build一版新的image,如此一來就會有新的endpoint
而這時候,我們再拜訪
127.0.0.1/list
可以看到log中就會有關於這個endpoint的log,而同時也會在kibana的dashboard上呈現,你各endpoint的拜訪次數
接著我們同樣修改main.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
@app.route('/list')
def list():
return "List"
@app.route('/error')
def error():
return a
if __name__ == '__main__':
app.run()
我們增加一個endpoint error,並且讓他return一個變數a,而因為a沒宣告,因此一定會報錯。
同樣我們透過docker-compose up --build去重新build container,並且拜訪error這個endpoint
拜訪後會出現Error Page
cmd同樣也會報錯,並且寫原因
你會發現這個錯誤並不會發現在nginx error log,因為它是屬於uwsgi這層出的錯,因此若要紀錄,可以透過uwsgi的ini去紀錄。
而nginx的報錯,可能就會是無法導到flask app,例如像是權限不夠等等,如下圖
而實際上的dashboard會類似如下: