在 Kubernetes 環境中監視 Python 應用程式
在 Kubernetes中監視 Python 應用程式之前,您必須先安裝 Unified Agent。 然後,更新應用程式部署以監視 Python 應用程式。
開始之前
- 檢查服務帳戶是否具有 Kubernetes 資源的存取權。 如需相關資訊,請參閱 授權資料收集器以存取 Kubernetes 資源。
- 請確定已安裝 Unified Agent。 如需相關資訊,請參閱 安裝及配置 Unified Agent。
- 檢查您是否已從 Passport Advantage 下載 Python 資料收集器套件,並將它與 Python 應用程式 Dockerfile 放置在相同目錄中。 如需相關資訊,請參閱 下載 Python 資料收集器。
程序
更新 Dockerfile ,以新增下列行來安裝 Python 應用程式的 Python 資料收集器,並取得根目錄的寫入權。
ADD ibm_python_datacollector.tgz root_of_application RUN chmod 777 root_of_application RUN pip install --no-index --find-links=root_of_application/python_dc ibm_python_dc其中,root_of_application 是建置之環境定義的 Python 應用程式根目錄 (Dockerfile)。
您可以使用 Python 資料收集器來監視在 Web 伺服器 uWSGI V1.9.0 或更新版本上執行的 Python 應用程式。 但需要部分配置才能讓 Python 資料收集器正常運作。
- 如果您在沒有執行緒的情況下啟動 uWSGI ,則應用程式及 Python 資料收集器所產生的執行緒將永不執行,因此 Python 資料收集器無法正常運作。 您必須在 uwsgi 指令中新增
--enable-threads選項,以啟用 uWSGI 執行緒。 當您指定 -- threads 選項來配置執行緒數目時,會自動套用這個選項。 - 如果您執行 烏維希 指令並指定 -- master 選項,則會在母項主要處理程序中預載 Python Script 及模組,並從母項主要處理程序分出工作者處理程序。 此外,在主要處理程序中建立的背景執行緒會在工作者處理程序中結束。 若要讓 Python 資料收集器正常運作,您必須在 烏維希 指令中新增 -- lazy-apps 選項,以使用延遲載入模式。
指令範例:
uwsgi --enable-threads --master --lazy-apps --processes 4 --http :8002 --wsgi-file=flask_hello.py --callable app附註: 您也可以在
.ini配置檔中新增選項,並搭配執行 uwsgi 指令與.ini檔案。 如需相關資訊,請參閱 uWSGI 文件。- 如果您在沒有執行緒的情況下啟動 uWSGI ,則應用程式及 Python 資料收集器所產生的執行緒將永不執行,因此 Python 資料收集器無法正常運作。 您必須在 uwsgi 指令中新增
在 Python 應用程式中整合已安裝的資料收集器:
如果您的應用程式基於 Django V1.10 或更新版本,請開啟 Django 應用程式的
settings.py,並將下列內容新增至該檔案中 MIDDLEWARE 區段的第一行:'ibm_python_dc.kpg_dc_django.ResourceMiddleware',如果您的應用程式基於 Django V1.9 或更舊版本,請將下列內容新增至該檔案中 MIDDLEWARE_CLASS 區段的第一行:
'ibm_python_dc.kpg_dc_django.ResourceMiddleware',如果您的應用程式是以 Flask 為基礎,請在 Python 應用程式檔案中新增 Python 資料收集器 wsgi 中介軟體,例如,如果您執行 export FLASK_APP=run.py, 然後編輯
run.py檔案,並確保在其他中介軟體之前新增 Python 資料收集器 wsgi 中介軟體。 範例:from flask import Flask from flask_restful import Api from api.board import Article from api.auth import Login, Register, RefreshToken from middleware import Test from werkzeug.middleware.dispatcher import DispatcherMiddleware api.add_resource(Login, '/login') api.add_resource(Register, '/register') from ibm_python_dc.kpg_dc_wsgi import ResourceMiddleware app.wsgi_app = ResourceMiddleware(app.wsgi_app) app.wsgi_app = DispatcherMiddleware(serve_frontend, { '/test': test, '/admin': admin, }) ...... ......
- 建置新的 Docker 映像檔。
- 更新應用程式 yaml 檔以使用新的 Docker 映像檔。
- 如果 Unified Agent 未安裝在
cp4mcm-cloud-native-monitoring的預設名稱空間中,則需要將下列行新增至 yaml 檔案:
Replace <NAMESPACE> with the namespace where you install Unified Agent.UA_LWDC_LISTENER_URL=http://lwdc.<NAMESPACE>:8848 UA_JAEGER_ENDPOINT=http://jaeger.<NAMESPACE>:14268/api/traces