文档首页 > > 用户指南> 日志管理> 日志结构化

日志结构化

分享
更新时间: 2019/11/13 GMT+08:00

该功能仅对华北-北京一、华东-上海二和华南-广州区域生效。

数据可分为结构化数据和非结构化数据。结构化数据指能够用数字或统一的数据模型加以描述的数据,具有严格的长度和格式。非结构化数据指不便于用数据库二维逻辑表来表现的数据,数据结构不规则或不完整,没有预定义的数据模型。

日志结构化是以日志桶为单位,通过提取规则将日志桶中的日志进行结构化,提取出有固定格式或相似度较高的日志,过滤掉不相关的日志。

注意事项

  • 日志结构化是以日志桶为单位,请先创建一个日志桶,操作详见添加日志桶
  • 日志桶中的大部分日志需有一定的规则,否则结构化是无意义的。
  • 每个日志桶只能添加一个提取规则,可单击“编辑规则”进行修改,或单击“删除规则”删除后重新添加。

结构化原始日志

通过对日志桶添加提取规则将日志桶中的原始日志按一定的规律进行提取,并将提取后的日志整合到一起,以便进行SQL查询与分析。

下面以Tomcat服务器的原始日志为例进行结构化:

  1. 登录AOM控制台,在左侧导航栏中选择“日志管理 > 日志结构化”。
  2. 结构化是以日志桶为单位,请先创建一个日志桶,操作详见添加日志桶。若您已创建过日志桶,请跳过该步骤。

    日志桶创建完成后,日志桶信息将自动同步至“日志结构化”界面,如下图所示。

    图1 日志桶

  3. 在“日志结构化”界面,选择目标日志桶,单击“添加提取规则”。
  4. 选择示例日志:通过时间和关键词对日志桶中的原始日志进行查询与分析,初步找出可结构化的日志内容,然后选择一条比较典型的日志作为示例日志。

    如下图所示,可看到日志桶中的日志的内容比较规整,初步找出了待结构化的字段:IP、日期、方法、url、版本、返回码、请求大小,在日志列表中选中第一条日志前的单选框,即将第一行内容作为了示例日志,然后单击“下一步”。

    图2 选择示例日志

  5. 选择提取方法。

    • 正则表达式:使用正则表达式提取字段。
    • 特殊字符(暂不支持):使用分隔符(例如:逗号、空格或字符)提取字段。
    图3 选择提取方法

  6. 选择字段。

    在示例日志中,选中待结构化的日志内容,在弹出的对话框中为选中内容设置一个名称。如下图所示,依次提取出ip、date、method、url、version、code、size字段。

    若某条原始日志不符合提取规则,则无法进行提取,只显示原始日志。

    图4 选择字段

  7. 单击“下一步”,确认无误后单击“确认”。完成日志结构化。

    这样已对Tomcat服务器的原始日志进行了结构化,结构化后的日志数据可理解为数据库中的二维表,接下来就可以使用SQL语句对ip、date、method、url、version、code、size字段进行查询与分析。

SQL查询与分析

对原始日志结构化后,等待1~2分钟左右即可对结构化后的日志进行SQL查询与分析。

下面以Tomcat服务器结构化后的日志为例进行SQL查询与分析,定位出Tomcat服务器运行异常的原因。

  1. 在左侧导航栏中选择“日志管理 > 日志桶”。
  2. SQL查询也是以日志桶为单位,请在“桶日志”页签选择目标日志桶,然后单击“结构化日志”。

    图5 结构化后的日志

  3. SQL查询与分析:设置时间范围和查询条件。查询条件请输入SQL语句,目前AOM支持的SQL语句详见SQL查询语法

    例如,需查询近6小时内HTTP返回码大于等于500的请求数,则可执行如下操作:

    在右上角的下拉列表框选择“近6小时”,在搜索框中输入SQL语句:select count(*) where code >= 500,如图6所示 。

    • 对于常用的、复杂的SQL语句,可单击创建统计规则,操作详见创建统计规则。在后续查询时,不用再在文本框中手动输入,直接单击文本框,选择对应的统计规则及其SQL语句,即可自动输入。同时,统计规则创建成功后,AOM会对SQL语句返回的值进行统计并生成指标,可通过指标图表查看数据的走势。
    • 如果SQL语句返回的是单个数值,例如:select count(*) where code >= 500,则支持创建统计规则;如果SQL语句返回的是多个值,例如:select count(*) group by ip,则不支持创建统计规则。
    图6 使用SQL语句进行查询

SQL查询语法

AOM支持使用SQL语句(其中包括了聚合函数和数学函数)对结构化后的日志进行查询与分析。例如,使用MIN函数计算num列中的最小值。

  • SQL语句
    目前支持的SQL语句如 表1所示。
    表1 SQL语句说明

    语句

    说明

    示例

    AS

    用于对列名进行重命名。

    select day as day1 , month as month1

    BETWEEN

    在WHERE子句中使用,用于选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期。

    select * where day between 0 and 20

    COUNT DISTINCT

    用于查询某列去重后值的个数。

    select count(distinct name)

    GROUP BY

    根据一个或多个列对结果集进行分组,经常与聚合函数一起使用。

    select * group by (year),(month)

    LIKE

    在WHERE子句中搜索列中的指定模式。

    select * where name like 'zhang%'

    ORDER BY

    用于对某列进行排序,同时支持多列排序。

    select * order by num asc

    WHERE

    用于规定选择的标准。

    select * where num > 11 or num <= 10

  • 聚合函数

    聚合函数是对结构化后的日志的指定列进行的统计运算。聚合函数返回的是单个值,经常与SELECT语句和GROUP BY语句一起使用。AOM目前支持的聚合函数如表2所示。

    表2 聚合函数说明

    函数

    含义

    示例

    count(*)

    计算元组的个数。

    select count(*)

    count(<列名>)

    计算一列值的个数。

    select count(num)

    min(<列名>)

    计算一列值的最小值。

    select min(num)

    max(<列名>)

    计算一列值的最大值。

    select max(num)

    avg(<列名>)

    计算一列值的平均值。

    select avg(num)

    sum(<列名>)

    计算一列值的总和。

    select sum(num)

    stats(<列名>)

    分别计算一列值的个数、最小值、最大值、平均值和总和。

    select stats(num)

  • 数学函数

    数学函数是对结构化后的日志的指定列进行的数学运算。数学函数返回的是多个值,支持+ - * / %运算符,经常与SELECT语句一起使用。AOM目前支持的数学函数如表3所示。

    示例:

    select log(num) * 2 as log_num where num > 0

    聚合数据和数学函数不能同时使用。例如,可使用select log(num + 2) * 3语句进行搜索,但不支持使用select log(sum(num) + 2) * 3语句进行搜索。

    表3 数学函数说明

    函数

    含义

    示例

    abs(<列名>)

    返回一列值的绝对值。

    select abs (num)

    cbrt(<列名>)

    返回一列值的立方根。

    select cbrt(num)

    ceil(<列名>)

    返回一列值向上最接近的整数。

    select ceil(num)

    floor(<列名>)

    返回一列值向下最接近的整数。

    select floor(num)

    exp(<列名>)

    返回一列值自然常数的指数。

    select exp(num)

    log(<列名>)

    返回一列值的以常数e为底的对数。

    select log(num)

    log2(<列名>)

    返回一列值的以2为底的对数。

    select log2(num)

    log10(<列名>)

    返回一列值的以10为底的对数。

    select log10(num)

    pow(<列名>,n)

    返回一列值的n次方数。

    select pow(num,n)

    rint(<列名>)

    返回一列值最接近的整数 。

    select rint(num)

    round(<列名>)

    对一列值进行四舍五入。

    select round(num)

    sqrt(<列名>)

    返回一列值的平方根。

    select sqrt(num)

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区