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*)`或者(“.*?”)匹配。