全部產品
Search
文件中心

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

更新時間:Sep 12, 2025

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即可。

背景資訊

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

設定檔日誌收集

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

  1. 應用基本資料設定精靈,設定應用相關資訊,並單擊下一步:進階設定

  2. 展開日誌配置地區,開啟KafkaLog Service的開關,然後根據下表說明設定相關參數。

    配置項

    說明

    Kafka執行個體

    選擇目標執行個體。

    採集日誌類型

    選擇日誌類型。

    • 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。

    • 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch

    日誌源

    輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。

    重要

    請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。

    Kafka Topic名稱

    選擇已建立的Kafka Topic。

  3. 單擊建立應用

  4. 驗證結果。

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

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

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

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

警告

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

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

  1. 在目標應用的基礎資訊頁面,單擊部署應用

  2. 找到並展開日誌配置地區,開啟KafkaLog Service的開關。

    配置項

    說明

    Kafka執行個體

    選擇目標執行個體。

    採集日誌類型

    選擇日誌類型。

    • 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。

    • 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch

    日誌源

    輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。

    重要

    請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。

    Kafka Topic名稱

    選擇已建立的Kafka Topic。

  3. 配置完成後,完成確定

    重要

    Kafka不支援同一個檔案被同時採集到不同的Topic中。因此,如果您在應用部署時採用分批發布或者灰階發布策略,同時配置的日誌源不變,只改變日誌收集的Topic,那麼在所有批次的部署流程成功完成之前,您的日誌仍會收集到舊的Topic中。

  4. 驗證結果。

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

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

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

格式說明

當您成功配置日誌採集到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),聯絡產品技術專家進行諮詢。