iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
Elastic Stack on Cloud

親愛的,我把ElasticSearch上雲了系列 第 25

Day 25 Docker-Compose nginx + flask container with filebeat-3

  • 分享至 

  • xImage
  •  

Day 25 Docker-Compose nginx + flask container with filebeat-3

前言

昨天我們講解完了docker-compose 啟動 nginx + flask的流程,接著我們可以透過cmd檢視目前container的log。今天我們透過改變flask的一些設定,以及特別將程式留下錯誤,讓系統會報error log,來檢視nginx log蒐集的狀況。

檢視container狀況

剛剛提到,按照上一篇設置好後,我們可以透過

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的拜訪次數

Error Log

接著我們同樣修改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會類似如下:


上一篇
Day 24 Docker-Compose nginx + flask container with filebeat-2
下一篇
Day 26 Docker-Compose nginx + flask container with filebeat-another structure
系列文
親愛的,我把ElasticSearch上雲了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言