DLA可以在不移動OSS日志文件的情況下讀取并分析日志文件數據,定位服務故障原因等。

對于一個服務而言,日志文件記錄了服務運行的所有詳細信息。在進行故障排除、狀態監控或者預測告警時,都需要對日志文件進行查詢分析。阿里云對象存儲服務OSS(Object Storage Service),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。越來越多的用戶傾向于把大量的日志文件存儲在OSS中,DLA可以在不移動OSS日志文件的情況下讀取并分析日志文件數據,定位服務故障原因等。

本文以Apache WebServer日志、Nginx訪問日志、Apache Log4j日志為例,介紹如何通過DLA讀取并分析OSS日志文件數據。

前提條件

通過DLA讀取OSS日志文件數據前,您需要通過以下操作在OSS中準備測試數據。

  1. 開通OSS服務,詳情請參見開始使用OSS

  2. 創建存儲空間,詳情請參見控制臺創建存儲空間

  3. 上傳日志文件,詳情請參見控制臺上傳文件

    將日志文件webserver.log、nginx_log、log4j_sample.log上傳到OSS的log目錄中。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"
      正則表達式:
      ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[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)" "-"
      正則表達式:
      ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\".*?\") (-|[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
      正則表達式:
      ^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}.\\d{2}.\\d{2}.\\d{3})\\s+(\\S+)\\s+(\\S+)\\s+(.*)$

注意事項

通過DLA讀取日志數據時,日志文件需滿足以下條件:

  • 日志文件的格式為純文本格式,且每行可以映射為表中的一條記錄。

  • 每行的內容有固定的模式,可以用一個正則表達式去匹配。

在DLA中創建日志文件外表時,最繁瑣的一步是寫正則表達式,正則表達式說明如下:

  • 正則表達式中的每個字段用()作為邊界,通常日志中的每個字段以空格分隔。

  • 建表語句中定義的列的個數與正則表達式中的字段數完全匹配。

  • 通常,數字可以用([0-9]*)或者(-|[0-9]*)匹配,字符串用(1*)`或者(“.*?”)匹配。