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