如果您在使用Flink、Spark、Storm等巨量資料計算引擎時,需要將日誌進行壓縮、批量上傳日誌到Log Service、減少網路傳輸資源的佔用,API或者SDK往往無法滿足巨量資料情境對資料寫入能力的要求,您可以使用Aliyun Log Go Producer,便捷高效地將資料上傳到Log Service。
前提條件
注意事項
本樣本以華東1(杭州)的公網Endpoint為例,其公網Endpoint為https://cn-hangzhou.log.aliyuncs.com
。
如果您通過與Project同地區的其他阿里雲產品訪問Log Service,請使用內網Endpointhttps://cn-hangzhou-intranet.log.aliyuncs.com
。
關於Log Service支援的地區與Endpoint的對應關係,請參見服務入口。
什麼是Aliyun Log Go Producer
Aliyun Log Go Producer是為運行在巨量資料、高並發情境下的Go應用量身打造的高效能類庫。相對於原始的API或SDK,使用該類庫寫日誌資料能為您帶來諸多優勢,包括高效能、計算與I/O邏輯分離、資源可控制等。Aliyun LOG Go Producer使用阿里雲Log Service提供的順序寫入功能來保證日誌的上傳順序
工作流程
特點
安全執行緒:Producer介面暴露的所有方法都是安全執行緒的。
非同步發送:調用Producer的發送介面通常能夠立即返迴響應。Producer內部會緩衝併合並待發送資料,然後批量發送以提高輸送量。
自動重試:Producer會根據配置的最大重試次數和重試退避時間進行重試。
行為追溯:通過Callback或Future能擷取當前資料是否發送成功的資訊,也可以獲得該資料每次被嘗試發送的資訊,有利於問題追溯和行為決策。
上下文還原:同一個Producer執行個體產生的日誌在同一上下文中,在服務端可以查看某條日誌前後相關的日誌。
優雅關閉:保證close方法退出時,Producer緩衝的所有資料都能被處理,同時您也能得到相應的通知。
應用情境
原始的API或SDK需要實現高效能,非同步非阻塞,資源可控制,需要自己寫代碼來實現,成功率較高,並且會提高伺服器的負載。此外,此種方式寫日誌傳回值是狀態代碼,具體失敗原因需要重新置放,開發人員定位成本較高。
producer對比原始的API或SDK的優勢如下:
高效能
在海量資料、資源有限的前提下,寫入端要達到目標輸送量需要實現複雜的控制邏輯,包括多線程、緩衝策略、批量發送等,另外還要充分考慮失敗重試的情境。Producer實現了上述功能,在為您帶來效能優勢的同時簡化了程式開發步驟。
非同步非阻塞
在可用記憶體充足的前提下,Producer會對發往日誌庫的資料進行緩衝,因此調用send方法時能夠立即返迴響應且不會阻塞,可達到計算與I/O邏輯分離的目的。隨後,您可以通過返回的Future對象或傳入的Callback獲得資料發送的結果。
資源可控制
可以通過參數控制Producer用於緩衝待發送資料的記憶體大小,同時還可以配置用於執行資料發送任務的線程數量。這樣可避免Producer無限制地消耗資源,且可以讓您根據實際情況平衡資源消耗和寫入輸送量。
定位問題簡單
如果日誌資料發送失敗,Producer除了返回狀態代碼,還會返回一個String類型的異常資訊,用於描述失敗的原因和詳細資料。例如,如果發送失敗是因為網路連接逾時,則返回的異常資訊可能是“連線逾時”;如果發送失敗是因為伺服器無響應,則返回的異常資訊可能是“伺服器無響應”。
使用限制
aliyun-log-producer底層調用PutLogs介面上傳日誌,每次可以寫入的原始日誌大小存在限制。更多資訊,請參見資料讀寫。
Log Service的基礎資源,包括建立Project個數、Logstore個數、Shard個數、LogtailConfig個數、機器組個數、單個LogItem大小、LogItem(Key)長度和LogItem(Value)長度等均存在限制。更多資訊,請參見基礎資源。
代碼首次運行後,請在Log Service控制台開啟日誌庫索引,等待一分鐘後,進行查詢。
在控制台進行日誌查詢時,當單個欄位值長度超過最大長度時,超出部分被截斷,不參與分析。更多資訊,請參考建立索引。
1. 配置ProducerConfig
2. 啟動Producer進程
3. 調用send方法發送日誌
4. 關閉Producer
相關文檔
在調用API介面過程中,若服務端返回結果中包含錯誤資訊,則表示調用API介面失敗。您可以參考API錯誤碼對照表尋找對應的解決方案。更多資訊,請參見錯誤碼。
更多範例程式碼,請參見Aliyun Log GoProducer on Github。