全部產品
Search
文件中心

AnalyticDB:通過Logstash匯入數倉版

更新時間:Jul 06, 2024

Logstash是一個開源的伺服器端資料處理管道,起初用於將日誌類資料寫入ES中。隨著開源社區的不斷髮展,Logstash可以同時從多個資料來源擷取資料,並對其進行轉換,然後將其發送到您需要的“儲存端”。

以日誌資料為例,由於AnalyticDB MySQL支援原生JDBC方式訪問,您可以通過開源logstash output外掛程式logstash-output-jdbc將日誌資料匯入AnalyticDB MySQL中進行進一步分析。但經過測試發現,在日誌量非常大的情況下,通過JDBC方式將資料寫入AnalyticDB MySQL數倉版的效能較低,並且非常消耗CPU的資源(JDBC是單條記錄寫入)。為此,AnalyticDB MySQL最佳化了一個基於JDBC的Logstash output plugin外掛程式——logstash-ouput-analyticdb,專門用於以彙總方式向AnalyticDB MySQL中寫入日誌資料。

通過logstash-output-analyticdb將資料寫入AnalyticDB MySQL時的效能,相較於logstash-output-jdbc有5倍提升,並且對CPU的消耗也明顯降低。

安裝

Logstash的安裝流程請參見Installing Logstash

使用方式

在config目錄下建立一個logstash-analyticdb.conf(名字可以自訂)設定檔,logstash-analyticdb.conf檔案的內容如下所示。

input
{
    stdin { }
}
output {
    analyticdb {
        driver_class => "com.mysql.jdbc.Driver"
        connection_string => "jdbc:mysql://HOSTNAME:PORT/DATABASE?user=USER&password=PASSWORD"
        statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
        commit_size => 4194304
    }
}           
  • connection_string:串連AnalyticDB MySQL的JDBC URL。
  • statement:INSERT SQL的聲明數組。

更多參數配置:

  • max_flush_exceptions:當寫入資料出現異常時,設定最大重試次數,預設值100。
  • skip_exception:設定是否跳過異常,預設為FALSE,表示出現異常時將重試直到到達最大重試次數max_flush_exceptions,如果仍然失敗,則同步程式拋異常終止。設定為TRUE時,如果達到重試次數後仍是失敗,則跳過異常,將異常寫入日誌。
  • flush_size:一次最多攢批數量,和commit_size參數搭配使用。
  • commit_size:一次最多攢批資料量大小,和flush_size參數搭配使用,達到限定值即提交寫入任務。

上述設定檔只是一個樣本,您需要根據實際業務配置logstash-analyticdb.conf檔案。與AnalyticDB MySQL相關的其他配置請參見README。更多logstash配置和使用規則,請參見logstash文檔。

至此,配置任務已全部完成,接下來將啟動任務。

啟動任務

在logstash的安裝目錄執行bin/logstash -f config/logstash-analyticdb.conf啟動任務。

注意事項

建議您通過以下命令將logstash升級至最新版本後,再進行資料寫入。

bin/logstash-plugin update logstash-output-analyticdb