新功能 日誌服務命令列工具ETL發布!

2021-09-19 18:13:30 字數 3371 閱讀 8546

使用日誌服務,在搜尋、分析時是否經常遇到以下資料格式規整的痛點?

以上只是部分舉例,事實上,這些都是非常典型的etl的問題。並且在業界,一種普遍的共識是大資料分析中大部分時間(有時達到80%)花費在了資料規整(data wangling、或者etl)上,真正重要的分析在時間佔比上反而並不高。

我們希望提供一套簡單的(稍微配置一下)、可靠(效能、穩定性、擴充套件性)、一站式的(不引入額外資源、概念、技術)的方案來緩解在以上日誌服務場景中的主要etl相關的痛點。

我們首先提供命令列工具(通過日誌服務 cli)的方式的解決方案,可以看到,通過命令列工具+簡單配置檔案將源日誌庫中日誌經過處理後流出到另外乙個logstore。與託管服務比起來,更加靈活、強大、可控性強,但需要您在特定region部署執行環境。

從經濟角度出發,推薦將源logstore保留1-7天,臨時儲存,無索引,將目標logstore作為真正分析消費的logstore。

通過依賴日誌服務的消費組,完成實時流式處理,並可以自動獲得負載均衡與斷點恢復功能,而這些都不需要程式設計和額外配置:

通過相對直接的方式,併發、切分的方式,將特定時間段、分割槽的日誌進行etl處理:

通過乙個簡單的python風格的配置檔案進行編排,一般情況下不需要寫**即可達到80%的etl的需求和自由度:

提供內建的編排能力包括如下,並具備擴充套件能力:

這裡的配置檔案選擇python,而不是其他如json、yaml、ini、xml等方式,主要是以下幾個原因:

使用通用語言例如python,比使用一套json、ymal上的dsl(domain specific language)要靈活、簡單、學習曲線平滑。

python本身語言特性有利於學習和擴充套件,python自身對於資料結構的靈活性和處理就很強(無論是tuple、dict、list、set、字串)還是函式式計算(map、filter、reduce、labmda等)支援都是非常自然的。這就使得其做資料處理時,**簡單易讀。

python擴充套件性和生態比較強大,可以借力豐富的python庫做任何自由的etl處理。預設任意的python庫都可以無縫作為etl的外掛程式進行使用、python的其他生態工具都可以支援etl的編寫與除錯等。

效能上使用pypy與多程序可以較好的解決python的gil與效能問題。

日誌服務cli etl功能提供了完整的內建的處理模組,尤其對於正規表示式、kv、json、lookup等支援靈活且完整。總體內建轉換模組對常規etl轉換支援度完整,可以覆蓋總體80%的轉換需求:

理論上任意python的庫都可以無縫在配置檔案中使用,與此同時,內建的模組也提供了更加輕量級的細微的策略或者邏輯上的udf支援:

編排級別擴充套件:

內建函式擴充套件:

這裡我們舉乙個伺服器上多鐘複雜日誌格式的混合通過syslog傳送給日誌服務後的etl的例子:

pypy3 -m pip insall aliyun-log-python-sdk>= 0.6.42 aliyun-log-cli
# 丟棄所有無關的元字段,例如__tag:...___等

drop_fields_f1 = [f_tags, "uselss1", "useless2"]

# 分發:根據正規表示式規則,設定__topic__的值

dispatch_event_data = [

(, ),

(, ),

(, ),

(, ),

(true, )] # 不匹配的預設__topic__值

# 轉換:根據特定__topic__使用特定正規表示式,對欄位`data`進行字段提取

transform_event_data = [

(, ("data", r"lte_information (?p[^,]+),(?p[^,]+),(?p[^,]+),")),

(, ("data", r"status,(?p[\d\.]+)% usr (?p[\d\.]+)% sys,(?p\d+)(?p[a-za-z]+),")),

(, ("data", r"system reboot \[(?p\d+)\]")),

(, ("data", r"provision firmware download start \[(?p[\w\.]+)\]"))

]

這裡雖然是python檔案,但並沒有任何程式設計內容,但卻可以借助於python的工具進行語法校驗。

批量執行,這裡僅僅針對shard 0做乙個2分鐘的資料etl做乙個檢驗:

aliyunlog log transform_data --config=./my_etl.py --project=p1 --logstore=abc --to_project=p2 --to_logstore=xyz --to_client=account1 --client-name=account2 --shard_list=0 --from_time="2019-1-15 12:59:00+8:00" --to_time="2019-1-15 13:01:00+8:00"
驗證ok後,可以直接使用持續執行,額外增加乙個引數cg_name即可(表示消費組名稱):

aliyunlog log transform_data --config=./my_etl.py --project=p1 --logstore=abc --to_project=p2 --to_logstore=xyz --to_client=account1 --client-name=account2 --from_time="2019-1-15 12:59:00+8:00" --cg_name="elt1"

命令列工具

在wince6.0 中,在vs2005 的 build 選單中,有乙個 advanced build commands 其中有很多編譯選項 sysgen 相當於執行命令 blddemo q 一般第一次編譯或者是 改變了 catalog 中的item 的時候,就用這個了。clean sysgen 相當...

命令列工具

執行 scws h 可以看到詳細幫助說明。usage scws options i input o output i string file 要切分的字串或檔案,如不指定則程式自動讀取標準輸入,每輸入一行執行一次分詞 o file 切分結果輸出儲存的檔案路徑,若不指定直接輸出到螢幕 c charse...

c mysql命令列 mysql 命令列工具

1 mysql命令選項 2 mysql命令 3 mysql日誌 4 mysql服務端幫助 5 執行mysql指令碼 6 使用技巧 mysql是乙個能夠編輯輸入行的簡單sql shell,支援互動式和非互動式訪問。使用互動式時,查詢結果以ascii表的格式展示。使用非互動式時,查詢結果以製表符分隔的格...