本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
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頁簽,打開開通日志收集到Kafka日志服務功能開關。
配置項 說明 Kafka實例 選擇目標實例。 采集日志類型 選擇日志類型。 - 文件日志(容器內日志路徑):可以設置多條,默認顯示。
- 容器標準輸出日志:僅可以設置一條。當您的vSwitch屬于推薦可用區時,下拉列表才會顯示該選項。更多信息,請參見切換安全組和vSwitch。
日志源 輸入日志源存放的文件目錄。目錄須包含日志的文件名,例如/tmp0/cjsc.log。容器標準輸出無需設置此選項。文件名與路徑支持正則匹配,同一目錄下,如果日志文件數量多且文件格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。 重要 請勿在日志源的存放目錄中存放其他重要文件,避免目錄內的文件被覆蓋。Kafka Topic名稱 選擇已創建的Kafka Topic。 單擊下一步:確認規格。
在確認規格配置向導,查看您所創建應用的詳細信息以及配置費用情況,并單擊確認創建。
頁面會跳轉至創建完成配置向導,您可以單擊應用詳情頁進入基本信息頁面。
- 驗證結果。應用部署完成后,SAE依據所配的日志收集規則收集日志并存放到指定的文件內。
您可以在應用詳情頁面左側導航欄中,選擇
,在持久化日志頁面查看所收集的日志信息。如果存在日志數據,則表示日志收集配置成功,您可以依據日志信息進行相關業務分析。
在部署應用過程中配置文件日志收集
重新部署應用后,該應用將會被重啟。為避免業務中斷等不可預知的錯誤,請在業務低峰期執行部署操作。
更新應用配置的路徑因實例數的不同而不同。本文以實例數大于等于1為例,介紹如何配置目標功能。當實例數等于0時的操作路徑,請參見更新應用。
登錄SAE控制臺。
在左側導航欄,選擇 ,在頂部菜單欄選擇地域,然后單擊具體應用名稱。
在基本信息頁面右上角,單擊部署應用。
- 在部署應用頁面下方,展開日志收集服務區域,單擊日志采集到Kafka頁簽,打開開通日志收集到Kafka日志服務功能開關。
配置項 說明 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),聯系產品技術專家進行咨詢。