Serverless 應用引擎 SAE(Serverless App Engine)支援將應用執行個體的標準輸出(stdout),以及將應用執行個體指定路徑的日誌採集到雲訊息佇列 Kafka 版中。在此基礎上,您可以結合自身的業務情境,將Kafka的資料投遞到例如Elasticsearch等其他持久化庫中,便於集中管理和分析日誌。本文介紹在SAE控制台設定日誌收集到Kafka的使用情境、操作步驟與採集格式說明。
前提條件
- SAE
確保應用中每個執行個體至少預留0.25 Core CPU和250 MB記憶體的可用資源。
- Kafka
- 開通Kafka並建立Topic。SAE支援Kafka 2.x及以上版本的執行個體。
- 如果Kafka的執行個體通過內網採集,無公網訪問能力,則Kafka叢集需要和SAE的執行個體在同一個VPC內。
- 配置Kafka白名單:
- 如果VPC一致,但vSwitch不一致,需要在Kafka執行個體頁面將SAE的vSwitch添加至白名單。
- 如果需要設定為VPC內可訪問,設定為0.0.0.0/0即可。
背景資訊
設定檔日誌收集
在建立應用過程中設定檔日誌收集
登入SAE控制台。
在左側導覽列,單擊應用列表,在頂部功能表列選擇地區,然後單擊建立應用。
在應用基本資料設定精靈,設定應用相關資訊,並單擊下一步:應用部署配置。
在應用部署配置設定精靈,選擇技術棧語言和應用部署方式,設定部署資訊。
- 展開日誌收集服務地區,單擊日誌採集到Kafka頁簽,開啟開通日誌收集到KafkaLog Service功能開關。
配置項 說明 Kafka執行個體 選擇目標執行個體。 採集日誌類型 選擇日誌類型。 - 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。
- 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch。
日誌源 輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。 重要 請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。Kafka Topic名稱 選擇已建立的Kafka Topic。 單擊下一步:確認規格。
在確認規格設定精靈,查看您所建立應用的詳細資料以及配置費用情況,並單擊確認建立。
頁面會跳轉至建立完成設定精靈,您可以單擊應用詳情頁進入基本資料頁面。
- 驗證結果。應用部署完成後,SAE依據所配的日誌收集規則收集日誌並存放到指定的檔案內。
您可以在應用詳情頁面左側導覽列中,選擇
,在持久化日誌頁面查看所收集的日誌資訊。如果存在日誌資料,則表示日誌收集配置成功,您可以依據日誌資訊進行相關業務分析。
在部署應用過程中設定檔日誌收集
重新部署應用後,該應用將會被重啟。為避免業務中斷等不可預知的錯誤,請在業務低峰期執行部署操作。
更新應用配置的路徑因執行個體數的不同而不同。本文以執行個體數大於等於1為例,介紹如何配置目標功能。當執行個體數等於0時的操作路徑,請參見更新應用。
登入SAE控制台。
在左側導覽列,單擊應用列表,在頂部功能表列選擇地區,然後單擊具體應用程式名稱。
在基本資料頁面右上方,單擊部署應用。
- 在部署應用頁面下方,展開日誌收集服務地區,單擊日誌採集到Kafka頁簽,開啟開通日誌收集到KafkaLog Service功能開關。
配置項 說明 Kafka執行個體 選擇目標執行個體。 採集日誌類型 選擇日誌類型。 - 檔案日誌(容器內日誌路徑):可以設定多條,預設顯示。
- 容器標準輸出日誌:僅可以設定一條。當您的vSwitch屬於推薦可用性區域時,下拉式清單才會顯示該選項。更多資訊,請參見切換安全性群組和vSwitch。
日誌源 輸入日誌源存放的檔案目錄。目錄須包含日誌的檔案名稱,例如/tmp0/cjsc.log。容器標準輸出無需設定此選項。檔案名稱與路徑支援正則匹配,同一目錄下,如果記錄檔數量多且檔案格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。 重要 請勿在日誌源的存放目錄中存放其他重要檔案,避免目錄內的檔案被覆蓋。Kafka Topic名稱 選擇已建立的Kafka Topic。 - 配置完成後,單擊確認。重要 Kafka不支援同一個檔案被同時採集到不同的Topic中。因此,如果您在應用部署時採用分批發布或者灰階發布策略,同時配置的日誌源不變,只改變日誌收集的Topic,那麼在所有批次的部署流程成功完成之前,您的日誌仍會收集到舊的Topic中。
- 驗證結果。應用部署完成後,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
。 - 採集不到日誌是什麼原因導致的?可能跟網路有關。您可以按照以下步驟進行排查:
- 登入SAE的Webshell,使用telnet命令確認Kafka執行個體地址、查看網路是否正常串連。關於Webshell的具體資訊,請參見使用Webshell診斷應用。
- 確認網路狀態。
- 網路不同:確認SAE應用和Kafka執行個體是否在同一個VPC內,以及是否設定了白名單。
- 網路正常:加入釘群(釘群號:32874633),聯絡產品技術專家進行諮詢。