日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

自定義運行時支持Loggie Agent日志擴展

Loggie是一個基于Golang的輕量級、高性能的云原生日志采集Agent。您可以在自定義運行時的函數中使用Loggie Agent從文件中采集日志,然后上傳到日志服務SLS進行日志的存儲和自定義分析。

前提條件

已創建日志項目和日志庫。具體操作,請參見創建項目Project創建Logstore

重要

創建的日志項目必須和要創建的函數在相同地域。

操作步驟

步驟一:創建函數

  1. 登錄函數計算控制臺,在左側導航欄,單擊函數

  2. 在頂部菜單欄,選擇地域,然后在函數頁面,單擊創建函數

  3. 創建函數頁面,配置以下配置項,其他配置項使用默認值,然后單擊創建。詳細內容請參見創建函數

    • 創建函數的方式:Web函數

    • 基本設置:設置函數名稱

    • 函數代碼:配置函數的運行環境和代碼相關信息。

      配置項

      示例

      運行環境

      Python 3.9

      代碼上傳方式

      選擇通過文件夾上傳代碼。其中上傳的文件夾名稱為codecode目錄下的文件為app.pyapp.py的代碼示例內容如下。

      from flask import Flask
      from flask import request
      import logging
      import os
      
      REQUEST_ID_HEADER = 'x-fc-request-id'
      
      app = Flask(__name__)
      
      format_str = '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
      logging.basicConfig(filename='/tmp/log/fc-flask.log', filemode='w', 
          format=format_str, encoding='utf-8', level=logging.DEBUG)
      @app.route("/invoke", methods = ["POST"])
      def hello_world():
          rid = request.headers.get(REQUEST_ID_HEADER)
          logger = logging.getLogger()
      
          print("FC Invoke Start RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
      
          data = request.stream.read()
          print(str(data))
          logger.info("receive event: {}".format(str(data)))
          
          print("FC Invoke End RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
          return "Hello, World!"
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0',port=9000)
      說明

      您可以修改代碼中配置的filename='/tmp/log/fc-flask.log'為指定的日志類型及日志位置,該配置需要和步驟二中的sources.paths路徑保持一致。

      啟動命令

      /code/bootstrap

      說明

      bootstrap文件在步驟二會創建。

      監聽端口

      9000

步驟二:創建bootstrap文件作為啟動命令

  1. 函數創建成功后,在代碼頁簽使用WebIDE在code目錄下創建bootstrap文件。

    bootstrap文件示例內容如下。

    #!/bin/bash
    
    # 1. 創建pipelines.yml文件
    mkdir -p /tmp/log /code/etc
    cat << EOF > /code/etc/pipelines.yml
    pipelines:
      - name: demo
        sources:
          - type: file
            name: fc-demo
            addonMeta: true
            fields:
              topic: "loggie"
            fieldsUnderRoot: true
            paths:
              - "/tmp/log/*.log"
        sink:
          type: sls
          endpoint: ${LOGGIE_SINK_SLS_ENDPOINT}
          accessKeyId: ${LOGGIE_SINK_SLS_ACCESS_ID}
          accessKeySecret: ${LOGGIE_SINK_SLS_ACCESS_SECRET}
          project: ${LOGGIE_SINK_SLS_PROJECT}
          logstore: ${LOGGIE_SINK_SLS_LOGSTORE}
          topic: ${LOGGIE_SINK_SLS_TOPIC}
    EOF
    
    # 2. 創建loggie.yml文件
    cat << EOF > /code/etc/loggie.yml
    EOF
    
    # 3. 啟動Loggie Agent,作為后臺進程運行
    /opt/bin/loggie -config.system=/code/etc/loggie.yml -config.pipeline=/code/etc/pipelines.yml > /tmp/loggie.log 2>&1 &
    
    # 4. 啟動應用程序
    exec python app.py

    該腳本會執行的操作如下:

    1. 創建配置文件pipelines.ymlpipelines.yml為Pipeline配置文件。

      • sources

        用于指定日志的類型和日志所在位置。本示例展示如何采集/tmp/log目錄下所有以.log結尾的文件中的日志。

        sources配置中的addonMeta表示添加默認的日志采集state元信息。更多關于sources的配置,請參見Source通用配置

      • sink

        用于指定日志服務相關信息。關于參數的說明,請參見配置參數說明腳本中的變量會在步驟四設置。

    2. 創建配置文件loggie.ymlloggie.yml為Loggie的系統配置文件。

      文件為空,表示為默認配置。本文示例采用默認配置方法,loggie.yml文件必須存在。文件不為空時,其具體參數請參見Loggie系統配置

    3. 啟動Loggie Agent,作為后臺進程運行。Loggie Agent運行日志會打印到/tmp/loggie.log

    4. 啟動應用程序。本文示例使用Python運行,請按照實際情況填寫。

  2. 設置bootstrap文件權限為可執行權限。

    在WebIDE中選擇Terminal > New Terminal,執行chmod 777 bootstrap命令設置文件權限。

  3. 單擊部署代碼,完成代碼的部署。

步驟三:添加官方公共層Loggie Agent

  1. 單擊配置頁簽,選擇左側頁簽,在區域單擊編輯

  2. 在編輯函數層面板,選擇添加層 > 添加官方公共層,配置Loggie Agent。

    關于Loggie Agent公共層的相關信息如下。

    層名稱

    兼容的運行時

    層版本

    ARN

    Loggie Agent

    自定義運行時

    本文示例使用層版本1。

    acs:fc:{region}:official:layers/Loggie13x/versions/1

  3. 單擊部署,完成Loggie Agent層的添加。

步驟四:設置環境變量

  1. 配置頁簽,選擇左側環境變量頁簽,單擊編輯

  2. 在編輯函數環境變量面板,添加如下環境變量。關于如何配置環境變量,請參見配置環境變量

    • 設置環境變量FC_EXTENSION_SLS_LOGGIE=true

      添加該環境變量后,在一次函數調用結束時,不會立刻凍結函數實例,會等待10s再凍結函數實例,以確保Loggie Agent擴展成功上報日志。

      重要

      函數計算在調用結束至凍結前的等待時長會產生費用,收費策略與實例調用階段的計費邏輯相同。具體信息,請參見產品計費

    • 設置pipelines.yml文件中的環境變量,包括LOGGIE_SINK_SLS_ENDPOINTLOGGIE_SINK_SLS_ACCESS_IDLOGGIE_SINK_SLS_ACCESS_SECRETLOGGIE_SINK_SLS_PROJECTLOGGIE_SINK_SLS_LOGSTORELOGGIE_SINK_SLS_TOPIC

      環境變量

      說明

      LOGGIE_SINK_SLS_ENDPOINT

      日志服務的服務入口。更多信息,請參見服務入口

      LOGGIE_SINK_SLS_ACCESS_ID

      阿里云AccessKey ID。如何獲取AccessKey ID,請參見訪問密鑰

      LOGGIE_SINK_SLS_ACCESS_SECRET

      阿里云AccessKey Secret。如何獲取AccessKey Secret,請參見訪問密鑰

      LOGGIE_SINK_SLS_PROJECT

      目標Logstore所在的Project。

      LOGGIE_SINK_SLS_LOGSTORE

      用于存儲日志的Logstore。

      LOGGIE_SINK_SLS_TOPIC

      日志主題,自定義設置。

  3. 單擊部署。函數配置更新后,可以支持將函數執行日志通過Loggie上傳到日志服務。

步驟四:驗證結果

  1. 代碼頁簽,單擊測試函數,通過控制臺調試函數。

    配置完成后,首次調試日志可能會有一些延遲,建議多調用幾次。

  2. 登錄日志服務控制臺,按照pipelines.yml文件中配置的地域、Project和Logstore查詢日志。示例如下。

    image

    • body:日志信息。

    • state.*:日志采集state元信息,其中hostname為函數運行所在的實例ID。

問題排查

Loggie Agent獨立運行在函數實例中,函數計算平臺無法感知Loggie Agent是否正常,Loggie Agent運行異常也不會影響函數的正常執行。

如果在日志服務中無法查詢到Loggie Agent相關日志時(會有秒級的延時),可參考以下流程進行排查。

函數運行正常

如果函數運行正常,在調用后函數實例會存活一段時間(一般是幾分鐘),可以登錄實例查看Loggie Agent的運行狀態和日志信息。關于登錄實例的具體操作,請參見實例命令行操作

  • 如果沒有日志信息,可以在命令行嘗試啟動Loggie Agent。

  • 如果Loggie有日志信息,根據日志信息排查。

    • 確認pipelines.yml文件是否配置正確。

    • 確認是否成功啟動SLS sink配置。日志類似pipeline sink(sink/sls)-0 invoke loop start

    • 確認是否獲取到日志文件。日志類似start collect file: /tmp/log/fc-flask.log。如果沒有類似日志,按照pipelines.yml文件配置中的paths路徑,確認是否有日志文件產生。

說明

首次接入SLS Logstore可能會有一定延時,如果日志一切正常,可以多次觸發調用函數,等待幾分鐘后再查詢日志。

函數運行失敗

Loggie Agent作為外部擴展,一般不會影響函數的正常運行,可以先將Loggie Agent啟動邏輯移除,排查函數運行是否正常。如果出現進程異常退出或者執行超時的報錯,可以嘗試調大內存或CPU規格。

相關文檔

  • 在本文示例中,Loggie采集到日志后原樣上傳,沒有經過任何加工處理。如果需要對日志數據加工后再上傳,例如解析JSON格式、移除DEBUG日志等,可以在pipelines.yml中添加Interceptor配置,具體請參見Loggie-Interceptor

  • 如果您希望通過Serverless Devs工具部署一個由Custom-Python3.9事件類型實現的將采集日志文件上報到日志服務的函數,請參見示例應用程序(python3.9 flask)