日誌服務CLIETL-擴充套件UDF
背景
CLI的命令中,可以看到有一個重要的引數config
進行ETL的規則配置。這其實是一個Python模組,通過import其他Python模組,或者直接編寫符合協議的UDF來擴充套件ETL的規則。本篇介紹CLI ETL規則的擴充套件協議與機制。
擴充套件與UDF
條件式事件轉換UDF
在轉換列表中支援UDF擴充套件:
UDF (Python):
@support_event_list_simple # 自動支援多事件處理
def update_fields(e):
e["some_field_x"] = "100"
del e["some_feild_y"]
return e # 也可以返回None(表示丟棄), 返回列表(表示分裂)
TRANSFORM_LIST_data = [ ({"data": "^LTE_Information "},update_fields), "..."]
欄位提取&轉換UDF
在轉換列表中,支援基於("欄位名", UDF)
方式擴充套件:
@support_event_list_simple # 自動支援多事件處理
def remove_fields(e, filed_input):
del e[filed]
return e
TRANSFORM_LIST_data = [
({"data": "^LTE_Information "}, ("internal",remove_fields) ),
({"data": "^Status,"}, ("field_x", V("field_y") ),
"…"]
內建方法: V, CSV, TSV, LOOKUP, KV, JSON等,都是通過這種方式構建的。
全域性UDF
基於全域性的UDF以及協議
注意:
- sls_en_xxx 表示返回一個新的事件(替換),後續日誌將使用這個處理
- sls_eu_xxx 表示返回事件部分資訊(更新),日誌會和這個部分內容合併成給一個新的日誌後處理。
- 事件丟棄: 返回None
def sls_en_xxx(event):
return None if event.get("error") else event
- 事件替換: 返回一個新的事件 (返回None表示丟棄)
def sls_en_xxx(event):
event["hello"] = "world"
return event
- 事件更新: 返回一個欄位集合進行補充
def sls_eu_xxx(event):
return { "field_x": "my value"}
- 事件分裂: 返回一個事件列表
def sls_en_xxx(event):
return [event, event]
基於條件的全域性UDF
支援基於特定條件的轉換,UDF必須以sls_en_
或者sls_eu_
開頭。
@condition(條件列表 查考#10)
def sls_eu_/sls_en_xxx(event):
return "…"
樣例:
@condition({"http_user_agent": r".+Linux.+"})
def sls_en_windows(event):
event["is_linux"] = "1"
return event
@condition(NO_EMPTY("real_client_ip"))
def sls_eu_anoymouse_ip(event):
return {"real_client_ip":
event["real_client_ip"][:3] + "*****" + event["real_client_ip"][-3:]}
函式變數式UDF
也可以直接構造以sls_eu_
或者sls_en_
開頭的變數函式,如下:
from aliyun.log.etl_core import *
sls_en_ke1 = keep_event({"__topic__": "ddos_access_log","cc_phase": r".+"})
sls_en_de1 = drop_event([EMPTY("status"),EMPTY("http_user_agent"),{"http_user_agent": "-"},{"status": r"2d+"}])
sls_en_kf1 = KEEP_F(["http_user_agent","real_client_ip","remote_addr","status","cc_phase"])
sls_en_kv1 = KV_F([”request_uri",” cookies"])
sls_en_dse1 = dispatch_event([
({"status": lambda x: int(x) // 100 == 3},{"error_type": "challenge"}),
({"status": lambda x: int(x) // 100 == 4},{"error_type": "auth"}),
({"status": lambda x: int(x) // 100 == 5},{"error_type": "internal"}),
(True,DROP)
])
sls_en_df1 = DROP_F(["remote_addr"])
sls_en_df2 = DROP_F("http_user_agent")
UDF輸入引數說明
以上UDF都有一個event引數,其格式是Python dict
格式,所有值都是Unicode
字串(包括時間)
部分特殊關鍵字:
TAG: __tag__:host,__tag__:source
,等
時間: __time__
主題: __topic__
進一步資料
相關連結
相關文章
- [擴充套件包]-Laravel檢視日誌套件Laravel
- ASP.NET擴充套件庫之Http日誌ASP.NET套件HTTP
- LoggerOne – 高效、簡約、強擴充套件性PHP日誌類庫套件PHP
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 日誌服務
- ASP.NET Core擴充套件庫之日誌ASP.NET套件
- 7年沉澱之作--滴滴Logi日誌服務套件套件
- 基於Thinkphp5的日誌線上瀏覽擴充套件包PHP套件
- 微服務架構擴充套件FreeStyle微服務架構套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- [外掛擴充套件]非同步除錯神器Slog,“從此告別看日誌,清日誌檔案了”套件非同步除錯
- Spotify:2021年將服務擴充套件到80多個新市場套件
- 基於 Wasm 和 ORAS 簡化擴充套件服務網格功能ASM套件
- SpringMVC 擴充套件SpringMVC套件
- Mybatis擴充套件MyBatis套件
- 擴充套件工具套件
- Sanic 擴充套件套件
- ORACLE 擴充套件Oracle套件
- 跟我一起學.NetCore之日誌作用域及第三方日誌框架擴充套件NetCore框架套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- 使用 Python 構建可擴充套件的社交媒體情感分析服務Python套件
- PHP 擴充套件包教程學習分享 -- 阿里雲簡訊服務 SDKPHP套件阿里
- 香港伺服器如何擴充套件業務伺服器套件
- 由事務擴充套件開談一談套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- 百富收購電子支付服務公司擴充套件歐洲業務版圖套件
- 提高擴充套件性套件
- LINQ擴充套件方法套件
- HttpContext擴充套件類HTTPContext套件
- Json擴充套件方法JSON套件
- 擴充套件BSGS/exBSGS套件
- 擴充套件包上傳套件
- Flask 自建擴充套件Flask套件
- Nmap 擴充套件(四)套件
- 分類擴充套件套件
- 擴充套件表示式套件