阅读809 返回首页    go iPhone_iPad_Mac_手机_平板_苹果apple


自定义清洗的使用__创建监控任务_用户指南_业务实时监控服务 ARMS-阿里云

当智能切分器提供的切分方案无法满足用户实际的切分需求时,您可以使用ARMS提供的自定义清洗配置器,定制你自己的日志清洗流程。

自定义清洗配置器采用所见即所得的可视化配置方式,本文档将详细介绍如何使用自定义清洗配置器。

常见切分问题

  1. 特殊字符(不可见字符)作为分隔符如何切分?

    假如不可见字符是ascii码的1,则对应的分隔符为u0001,如果是2,则是u0002…以此类推,tab作为分隔符的话请使用t作为分隔符。

  2. 特殊字符在流程配置页面上如何测试?

    因为无法在浏览器里粘贴不可见字符,因此您只能暂时将测试文本的分隔符替换为可见字符进行测试,全部流程测试通过后,再将分隔符替换为不可见字符进行部署。

  3. 下图中key的列表中如何添加更多的key?

    screenshot

    试试点击积木块上的蓝底白色五角星。

  4. JSON格式的日志可以切分吗?

    可以,不过没有直接的专属JSON切分器来支持,需要使用逻辑表达式+KV切分器配合使用。请阅读完下面KV切分器的说明,凭借您的智慧,一定可以成功地切分JSON格式的日志。

  5. 跨行日志(如异常堆栈)支持吗?

    暂不支持。

单分隔符切分器

说明

将单一字符串作为输入,当匹配用户指定分隔字符串时进行切分,切分结果为多个Key-Values.

实例

a

该配置以|为分隔符,将切分后0号位置的字符串按照yyyy-MM-dd HH:mm:ss的格式转为date(内部实际将以long型保存),2号位置的字符串转为保存为key为username的string,3号位置转为key为userid的long,5号位置保存为key为event的string…

因此使用该配置可以将日志:

2014-07-25 17:25:00|aaa|用户a|1234567|abcd|购买

切分为如下结果:

=> [ username - 用户a ] [ _hostIp - 127.0.0.1 ] [ event - 购买 ] [ date - 1406280300000 ] [ userid - 1234567 ]

说明:

  1. 对不可见字符的支持:本切分器支持不可见字符的切分,例如t,u001f(ascii char=31),一些不可见字符的切分将无法在页面测试中被正确验证(因为页面文本框内无法正确输入不可见字符),所以建议用户可以在测试页面先使用可见字符进行调试,然后换成不可见字符保存后进行部署。

  2. 多字符分隔符:本切分器分隔符可以为多字符,如a::b::c为输入,以::为分隔符切分。

多分隔符切分器

说明

将单一字符串作为输入,当匹配任意一个用户指定分隔字符时进行切分,切分结果为多个Key-Values.

实例

b

使用该配置可以将日志:

2014-07-25 17:25:00,aaa|b~1

切分为:=> [ item - b ] [ _hostIp - 127.0.0.1 ] [ userId - aaa ] [ quantity - 1 ] [ date - 1406280300000 ]

顺序分隔符切分器

说明

对于较复杂的切分场景(如accesslog),ARMS提供“顺序分隔符切分器”,以O(n)的复杂度将日志进行切分。

实例

假如 accesslog 如下:

117.74.77.48 835158 - [26 May 2014:14:05:28 +0800] “GET https://trade.taobao.com/trade/detail/trade_snap.htm?spm=a1z0f.2.100003.9.8BpicQ&trade_id=664793864233811“ 302 0

我们想在这个日志中切分出如下结果:

=> [ url - https://trade.taobao.com/trade/detail/trade_snap.htm?spm=a1z0f.2.100003.9.8BpicQ&trade_id=664793864233811 ] [ _hostIp - 127.0.0.1 ] [ ip - 117.74.77.48 ] [ date - 1401084328000 ] [ rt - 835158 ]

我们会发现:

  1. 用单分隔符切分器显然无法满足需求;

  2. 用多分隔符切分器也不能满足需求:我们如果想切出rt=835158这组KV,必须以” “(空格)作为切分字符之一,但是这样做会错误地把26 May 2014:14:05:28 +0800这个字符串给切成几段,因此我们将无法得到date - 1401084328000;

  3. 如果使用正则表达式来匹配kv,效率太低,需要遍历多次。

ARMS提供了”顺序分隔符切分”的方式,使用如下配置,就可以得到本实例正确的结果。

c

用户定义了5个分隔符字符串,依次将输入字符串切分为了6段子串,随后用户将指定的子串分别赋给不同的key即可。

KV切分器

当需要切分如下多组key=value形式的日志:

key1=aaaa;key2=bbbb;key3=cccc;key4=dddd;….

且各个key-value的位置不固定时,可以使用KV切分器:

切分配置如下:

kvsplitter1

注意:

  1. 当没有配置文本字符<->Key映射时,KV切分器将视所有的key为“未定义key”,所有key对应的value将被切为StringKey类型

  2. 如果选择取消勾选”是否切分未定义的Key”,那么未定义Key将不会被切分,也就是说如果没有配置文本字符<->Key映射,并且未勾选”是否切分未定义的Key”,本切分器将不做任何事。

  3. 这里展示一个需要将制定的Key转换成对应类型的例子:

假如有日志如下:name=abc;item=iphone6;quantity=15;date=201412120000;….

需要将quantity变为LongKey,date变为DateKey:

kvsplitter2

JSON切分器

如果您的日志中包含JSON字符串,使用JSON切分器可以让您快速切分出该JSON中的“叶子节点”。

例一:全自动切分

{ “title”: “Example Schema”, “type”: “object”, “quantity”: 200, “date”:”2015-12-12 12:12:12”, “properties”: { “firstName”: { “type”: “string” }, “lastName”: { “type”: “string” }, “age”: { “description”: “Age in years”, “type”: “integer”, “minimum”: 0 } }, “required”: [“firstName”, “lastName”]}

将该json放在一行文本中,使用JSON切分器进行切分:

image

切分结果如下:

=> [ minimum - 0 ] [ date - 2015-12-12 12:12:12 ] [ type - string ] [ title - ExampleSchema ] [ description - Ageinyears ] [ quantity - 200 ]

由于勾选了“切分未定义字段”,JSON切分器将自动切出所有的“非array类型的叶子节点”,并自动转成对应的类型(stringkey或longkey),注意本例中的required字段由于是array类型所以没有切分,另外,date这个字段由于

例二:自定义切分

如果您只想切分JSON中指定的某些字段,可以像如下这样配置:

image

=> [ date - 1449893532000 ] [ title - ExampleSchema ] [ quantity - 200 ]

本例中,我们去掉了“切分未定义字段”的勾选,并且自定义了title,date和quantity三个字段,并指定了类型。ARMS会只切分自定义的字段,并转成对应的类型(本例中date字段被转成了ARMS内置的long型)

最后更新:2016-11-23 17:31:50

  上一篇:go 步骤 3-3:创建和查询多维数据集__创建监控任务_用户指南_业务实时监控服务 ARMS-阿里云
  下一篇:go 监控任务管理__管理监控任务_用户指南_业务实时监控服务 ARMS-阿里云