全部产品
云市场

背景信息以及准备工作

更新时间:2019-03-17 17:18:02

背景信息

对于一个服务来说,日志文件记录了服务运行的所有详细信息。在进行故障排除、状态监控或者预测告警时,都离不开对日志文件的查询分析,而在大数据分析中日志文件的地位更加举足轻重。

阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。越来越多的用户倾向于把大量的日志文件存储在OSS中,DLA可以在不移动OSS中日志文件的情况下,直接对日志文件进行读取分析,定位服务故障原因等。

本文将以Apache WebServer日志Ngnix访问日志Aapache Log4j日志为例,向您介绍如何通过DLA进行日志文件的读取分析。

准备工作

使用DLA读取OSS日志数据前,您需要通过以下操作在OSS中准备好测试数据。

  1. 开通OSS服务

  2. 创建存储空间

  3. 上传日志文件

    将下列三个日志文件webserver.log、ngnix_log、log4j_sample.log上传至OSS的log目录。

    日志文件存储示意图

  • Apache WebServer日志文件webserver.log,测试数据:

    1. 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    2. 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.65 Safari/525.19"

    正则表达式

    1. ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?
  • NGINX访问日志文件ngnix_log,测试数据:

    1. 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)" "-"
    2. 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://help.aliyun.com/product/70174.html" "aliyun-sdk-java/2.6.0(Linux/2.6.32-220.23.2.ali927.el5.x86_64/amd64;1.6.0_24)" "-"

    正则表达式

    1. ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*)
  • Aapache Log4j日志文件,以Hadoop默认生成的日志文件log4j_sample.log为例,测试数据:

    1. 2018-11-27 17:45:23,128 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Minimum allocation = <memory:1024, vCores:1>
    2. 2018-11-27 17:45:23,128 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Maximum allocation = <memory:8192, vCores:4>
    3. 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
    4. 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

    正则表达式

    1. ^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}.\\d{2}.\\d{2}.\\d{3})\\s+(\\S+)\\s+(\\S+)\\s+(.*)$

注意事项

通过DLA读取日志数据时,日志文件需满足以下条件:

  • 日志文件的格式是纯文本格式,每行可以映射为表中的一条记录。

  • 每行的内容有固定的模式,可以用一个正则表达式去匹配。

在DLA中创建日志文件外表时,最繁琐的一步是写正则表达式,正则表达式说明如下

  • 正则表达式中的每个字段用()作为边界,日志中通常每个字段以空格分隔。

  • 建表语句中定义的列的个数要和正则表达式中的字段数完全匹配。

  • 通常,数字可以用([0-9]&#42;)或者(-|[0-9]&#42;)匹配,字符串用(1&#42;)或者(".&#42;?")匹配。

实施步骤

您可以在DMS页面编写SQL创建OSS Schema、创建OSS文件表以及读取OSS文件数据,也可以先通过MySQL客户端或者MySQL命令行工具连接DLA,然后再编写SQL创建OSS Schema、创建OSS文件表以及读取OSS文件数据。

本文介绍如何在DMS中编写SQL创建OSS Schema、创建OSS文件表以及读取OSS文件数据。

  1. 创建OSS Schema

  2. 创建OSS日志文件的外表并读取日志数据