DLA可以在不移動OSS記錄檔的情況下讀取並分析記錄檔資料,定位服務故障原因等。
對於一個服務而言,記錄檔記錄了服務啟動並執行所有詳細資料。在進行故障排除、狀態監控或者預測警示時,都需要對記錄檔進行查詢分析。阿里雲Object Storage Service服務OSS(Object Storage Service),是阿里雲提供的海量、安全、低成本、高可靠的雲端儲存體服務。越來越多的使用者傾向於把大量的記錄檔儲存在OSS中,DLA可以在不移動OSS記錄檔的情況下讀取並分析記錄檔資料,定位服務故障原因等。
本文以Apache WebServer日誌、Nginx訪問日誌、Apache Log4j日誌為例,介紹如何通過DLA讀取並分析OSS記錄檔資料。
前提條件
通過DLA讀取OSS記錄檔資料前,您需要通過以下操作在OSS中準備測試資料。
開通OSS服務,詳情請參見開始使用OSS。
建立儲存空間,詳情請參見控制台建立儲存空間。
上傳記錄檔,詳情請參見控制台上傳檔案。
將記錄檔webserver.log、nginx_log、log4j_sample.log上傳到OSS的log目錄中。- Apache WebServer記錄檔webserver.log資料:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 127.0.0.1 - - [26/May/2009:00:00:00 +0000] "GET /someurl/?track=Blabla(Main) HTTP/1.1" 200 5864 - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.XX Safari/525.19"
Regex:([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?
- Nginx訪問記錄檔nginx_log資料:
127.0.0.1 - - [14/May/2018:21:58:04 +0800] "GET /?stat HTTP/1.1" 200 182 "-" "aliyun-sdk-java/2.6.0(Linux/2.6.32-220.23.2.ali927.el5.x86_64/amd64;1.6.0_24)" "-" 127.0.0.1 - - [14/May/2018:21:58:04 +0800] "GET /?prefix=&delimiter=%2F&max-keys=100&encoding-type=url HTTP/1.1" 200 7202 "https://XXX/XXX/XXX.html" "aliyun-sdk-java/2.6.0(Linux/2.6.32-220.23.2.ali927.el5.x86_64/amd64;1.6.0_24)" "-"
Regex:([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*)
- Apache Log4j記錄檔,以Hadoop預設產生的記錄檔log4j_sample.log資料為例:
2018-11-27 17:45:23,128 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Minimum allocation = <memory:1024, vCores:1> 2018-11-27 17:45:23,128 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Maximum allocation = <memory:8192, vCores:4> 2018-11-27 17:45:23,154 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration: max alloc mb per queue for root is undefined 2018-11-27 17:45:23,154 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration: max alloc vcore per queue for root is undefined
Regex:^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}.\\d{2}.\\d{2}.\\d{3})\\s+(\\S+)\\s+(\\S+)\\s+(.*)$
注意事項
通過DLA讀取日誌資料時,記錄檔需滿足以下條件:
記錄檔的格式為純文字格式,且每行可以映射為表中的一條記錄。
每行的內容有固定的模式,可以用一個Regex去匹配。
在DLA中建立記錄檔外表時,最繁瑣的一步是寫Regex,Regex說明如下:
Regex中的每個欄位用
()
作為邊界,通常日誌中的每個欄位以空格分隔。建表語句中定義的列的個數與Regex中的欄位數完全符合。
通常,數字可以用
([0-9]*)
或者(-|[0-9]*)
匹配,字串用(1*)`
或者(“.*?”)
匹配。