本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
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內。
如果VPC一致,但vSwitch不一致,需要在Kafka實例頁面將SAE的vSwitch添加至白名單。
如果需要設置為VPC內可訪問,設置為0.0.0.0/0即可。
背景信息
配置文件日志收集
在創建應用過程中配置文件日志收集
登錄SAE控制臺,在左側導航欄選擇 ,然后選擇目標地域和目標命名空間,最后單擊創建應用。
在應用基本信息配置向導,設置應用相關信息,并單擊下一步:高級設置。
展開日志配置區域,開啟Kafka日志服務的開關,然后根據下表說明設置相關參數。
配置項
說明
Kafka實例
選擇目標實例。
采集日志類型
選擇日志類型。
文件日志(容器內日志路徑):可以設置多條,默認顯示。
容器標準輸出日志:僅可以設置一條。當您的vSwitch屬于推薦可用區時,下拉列表才會顯示該選項。更多信息,請參見切換安全組和vSwitch。
日志源
輸入日志源存放的文件目錄。目錄須包含日志的文件名,例如/tmp0/cjsc.log。容器標準輸出無需設置此選項。文件名與路徑支持正則匹配,同一目錄下,如果日志文件數量多且文件格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。
重要請勿在日志源的存放目錄中存放其他重要文件,避免目錄內的文件被覆蓋。
Kafka Topic名稱
選擇已創建的Kafka Topic。
單擊創建應用。
驗證結果。
應用部署完成后,SAE依據所配的日志收集規則收集日志并存放到指定的文件內。
您可以在應用詳情頁面左側導航欄中,選擇
,在持久化日志頁面的日志采集到 Kafka頁簽查看所收集的日志信息。如果存在日志數據,則表示日志收集配置成功,您可以依據日志信息進行相關業務分析。
在部署應用過程中配置文件日志收集
重新部署應用后,該應用將會被重啟。為避免業務中斷等不可預知的錯誤,請在業務低峰期執行部署操作。
更新應用配置的路徑因實例數的不同而不同。本文以實例數大于等于1為例,介紹如何配置目標功能。當實例數等于0時的操作路徑,請參見更新應用。
登錄SAE控制臺,在左側導航欄選擇 ,然后選擇目標地域和目標命名空間,最后單擊目標應用名稱。
在目標應用的基礎信息頁面,單擊部署應用。
找到并展開日志配置區域,開啟Kafka日志服務的開關。
配置項
說明
Kafka實例
選擇目標實例。
采集日志類型
選擇日志類型。
文件日志(容器內日志路徑):可以設置多條,默認顯示。
容器標準輸出日志:僅可以設置一條。當您的vSwitch屬于推薦可用區時,下拉列表才會顯示該選項。更多信息,請參見切換安全組和vSwitch。
日志源
輸入日志源存放的文件目錄。目錄須包含日志的文件名,例如/tmp0/cjsc.log。容器標準輸出無需設置此選項。文件名與路徑支持正則匹配,同一目錄下,如果日志文件數量多且文件格式相同,可以輸入例如/xxx/xxx/xxx/*.log的格式。
重要請勿在日志源的存放目錄中存放其他重要文件,避免目錄內的文件被覆蓋。
Kafka Topic名稱
選擇已創建的Kafka Topic。
配置完成后,完成確定。
重要Kafka不支持同一個文件被同時采集到不同的Topic中。因此,如果您在應用部署時采用分批發布或者灰度發布策略,同時配置的日志源不變,只改變日志收集的Topic,那么在所有批次的部署流程成功完成之前,您的日志仍會收集到舊的Topic中。
驗證結果。
應用部署完成后,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
。采集不到日志是什么原因導致的?
可能跟網絡有關。您可以按照以下步驟進行排查:
登錄SAE的Webshell,使用telnet命令確認Kafka實例地址、查看網絡是否正常連接。關于Webshell的具體信息,請參見使用Webshell診斷應用。
確認網絡狀態。
網絡不同:確認SAE應用和Kafka實例是否在同一個VPC內,以及是否設置了白名單。
網絡正常:加入釘群(釘群號:32874633),聯系產品技術專家進行咨詢。