在 Kubernetes 環境中監視 Python 應用程式

在 Kubernetes中監視 Python 應用程式之前,您必須先安裝 Unified Agent。 然後,更新應用程式部署以監視 Python 應用程式。

開始之前

程序

  1. 更新 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)。

  2. 您可以使用 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 文件。

  3. 在 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,
          })
      
          ......
          ......
      
  4. 建置新的 Docker 映像檔。
  5. 更新應用程式 yaml 檔以使用新的 Docker 映像檔。
  6. 如果 Unified Agent 未安裝在 cp4mcm-cloud-native-monitoring的預設名稱空間中,則需要將下列行新增至 yaml 檔案:
    UA_LWDC_LISTENER_URL=http://lwdc.<NAMESPACE>:8848
    UA_JAEGER_ENDPOINT=http://jaeger.<NAMESPACE>:14268/api/traces
    
    Replace <NAMESPACE> with the namespace where you install Unified Agent.