日誌服務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
- Flask學習日誌(五) - Flask擴充套件Flask套件
- ASP.NET擴充套件庫之Http日誌ASP.NET套件HTTP
- PHP日誌擴充套件SeasLog - 高效輕量PHP套件
- 構建可擴充套件的有態服務套件
- 日誌服務
- 基於Thinkphp5的日誌線上瀏覽擴充套件包PHP套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Chrome擴充套件安全瀏覽服務 可防主頁被篡改Chrome套件
- LoggerOne – 高效、簡約、強擴充套件性PHP日誌類庫套件PHP
- PHP擴充套件高效能日誌系統SeasLog簡單上手PHP套件
- ASP.NET Core擴充套件庫之日誌ASP.NET套件
- 7年沉澱之作--滴滴Logi日誌服務套件套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- 基於 Wasm 和 ORAS 簡化擴充套件服務網格功能ASM套件
- Eureka:擴充套件ClientFilter實現服務註冊自定義過濾套件clientFilter
- 微服務架構擴充套件FreeStyle微服務架構套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Sanic 擴充套件套件
- ORACLE 擴充套件Oracle套件
- 擴充套件工具套件
- 擴充套件歐幾里得套件
- DOM擴充套件套件
- 擴充套件ACL套件
- Lua擴充套件套件
- 照片擴充套件套件
- 擴充套件篇套件
- disable or 擴充套件套件
- 擴充套件表套件
- 如何定義一個有優良擴充套件性的服務介面套件
- 【Oracle】 Oracle11gR2 擴充套件資料庫聯機日誌檔案Oracle套件資料庫
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- [外掛擴充套件]非同步除錯神器Slog,“從此告別看日誌,清日誌檔案了”套件非同步除錯
- 由事務擴充套件開談一談套件
- 日誌服務之使用Nginx模式採集日誌Nginx模式
- 使用 Python 構建可擴充套件的社交媒體情感分析服務Python套件
- [WCF許可權控制]透過擴充套件自行實現服務授權套件