閱讀809 返回首頁    go 阿裏雲


自定義清洗的使用__創建監控任務_用戶指南_業務實時監控服務 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-阿裏雲