全部產品
Search
文件中心

Serverless App Engine:設定日誌收集至Kafka

更新時間:Sep 03, 2024

Serverless 應用引擎 SAE(Serverless App Engine)支援將應用執行個體的標準輸出(stdout),以及將應用執行個體指定路徑的日誌採集到雲訊息佇列 Kafka 版中。在此基礎上,您可以結合自身的業務情境,將Kafka的資料投遞到例如Elasticsearch等其他持久化庫中,便於集中管理和分析日誌。本文介紹在SAE控制台設定日誌收集到Kafka的使用情境、操作步驟與採集格式說明。

前提條件

  • SAE

    確保應用中每個執行個體至少預留0.25 Core CPU和250 MB記憶體的可用資源。

  • Kafka
    • 開通Kafka並建立TopicSAE支援Kafka 2.x及以上版本的執行個體。
    • 如果Kafka的執行個體通過內網採集,無公網訪問能力,則Kafka叢集需要和SAE的執行個體在同一個VPC內。
    • 配置Kafka白名單
      • 如果VPC一致,但vSwitch不一致,需要在Kafka執行個體頁面將SAE的vSwitch添加至白名單。
      • 如果需要設定為VPC內可訪問,設定為0.0.0.0/0即可。

背景資訊

SAE日誌匯入Kafka的功能是對SLS日誌採集功能的補充增強,適用於不便使用SLS採集、RAM使用者(子帳號)無法查看SLS日誌等情境。

設定檔日誌收集

在建立應用過程中設定檔日誌收集

  1. 登入SAE控制台

  2. 在左側導覽列,單擊應用列表,在頂部功能表列選擇地區,然後單擊建立應用

  3. 應用基本資料設定精靈,設定應用相關資訊,並單擊下一步:應用部署配置

  4. 應用部署配置設定精靈,選擇技術棧語言應用部署方式,設定部署資訊。

  5. 展開日誌收集服務地區,單擊日誌採集到Kafka頁簽,開啟開通日誌收集到KafkaLog Service功能開關。
    配置項說明
    Kafka執行個體選擇目標執行個體。
    採集日誌類型選擇日誌類型。
    • 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。
    • 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch
    日誌源輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。
    重要 請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。
    Kafka Topic名稱選擇已建立的Kafka Topic。
  6. 單擊下一步:確認規格

  7. 確認規格設定精靈,查看您所建立應用的詳細資料以及配置費用情況,並單擊確認建立

    頁面會跳轉至建立完成設定精靈,您可以單擊應用詳情頁進入基本資料頁面。

  8. 驗證結果。
    應用部署完成後,SAE依據所配的日誌收集規則收集日誌並存放到指定的檔案內。

    您可以在應用詳情頁面左側導覽列中,選擇日誌管理 > 持久化日誌,在持久化日誌頁面查看所收集的日誌資訊。

    如果存在日誌資料,則表示日誌收集配置成功,您可以依據日誌資訊進行相關業務分析。

在部署應用過程中設定檔日誌收集

警告

重新部署應用後,該應用將會被重啟。為避免業務中斷等不可預知的錯誤,請在業務低峰期執行部署操作。

更新應用配置的路徑因執行個體數的不同而不同。本文以執行個體數大於等於1為例,介紹如何配置目標功能。當執行個體數等於0時的操作路徑,請參見更新應用

  1. 登入SAE控制台

  2. 在左側導覽列,單擊應用列表,在頂部功能表列選擇地區,然後單擊具體應用程式名稱。

  3. 基本資料頁面右上方,單擊部署應用

  4. 部署應用頁面下方,展開日誌收集服務地區,單擊日誌採集到Kafka頁簽,開啟開通日誌收集到KafkaLog Service功能開關。
    配置項說明
    Kafka執行個體選擇目標執行個體。
    採集日誌類型選擇日誌類型。
    • 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。
    • 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch
    日誌源輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。
    重要 請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。
    Kafka Topic名稱選擇已建立的Kafka Topic。
  5. 配置完成後,單擊確認
    重要 Kafka不支援同一個檔案被同時採集到不同的Topic中。因此,如果您在應用部署時採用分批發布或者灰階發布策略,同時配置的日誌源不變,只改變日誌收集的Topic,那麼在所有批次的部署流程成功完成之前,您的日誌仍會收集到舊的Topic中。

  6. 驗證結果。
    應用部署完成後,SAE依據所配的日誌收集規則收集日誌並存放到指定的檔案內。

    您可以在應用詳情頁面左側導覽列中,選擇日誌管理 > 持久化日誌,在持久化日誌頁面查看所收集的日誌資訊。

    如果存在日誌資料,則表示日誌收集配置成功,您可以依據日誌資訊進行相關業務分析。

格式說明

當您成功配置日誌採集到Kafka後,得到的採集資料格式如下。

{
    "file":"/home/admin/apache-tomcat-8.5.42/logs/localhost.2022-03-01.log",
    "host":"test-kafka-9527eec8-b2c1-4f03-9178-5dac0fe16d07-*****",
    "message":"01-Mar-2022 15:09:36.016 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath",
    "topic":"test2"
}
參數說明如下。
  • file:採集的檔案路徑。
  • host:採集的執行個體名稱。
  • message:採集的具體日誌內容。
  • topic:發送的Kafka Topic。

多行採集說明

  • 目前Java應用出現的異常情況表現為日誌會被自動合并到一行。Java異常日誌樣本如下:
    java.lang.RuntimeException: testLog
        at cn.niutong.controller.TestController.heathc(TestController.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
      at ...
  • 檢測到分行符號\n的情況下,日誌會被重新寫到新的一條裡面。建議您在業務程式中,將日誌封裝成一個JSON字串,作為一行統一對外輸出。

如果您有更多需求,例如想要實現多行合并,請加入釘群(釘群號:32874633),聯絡產品技術專家進行諮詢。

常見問題

  • SAE日誌採集到Kafka是否支援萬用字元?

    支援。您可以通過設定星號(*)來表示某個檔案夾下的所有檔案,例如/tmp/logs/*.log

  • 採集不到日誌是什麼原因導致的?
    可能跟網路有關。您可以按照以下步驟進行排查:
    1. 登入SAE的Webshell,使用telnet命令確認Kafka執行個體地址、查看網路是否正常串連。關於Webshell的具體資訊,請參見使用Webshell診斷應用
    2. 確認網路狀態。
      • 網路不同:確認SAE應用和Kafka執行個體是否在同一個VPC內,以及是否設定了白名單。
      • 網路正常:加入釘群(釘群號:32874633),聯絡產品技術專家進行諮詢。