乾貨 | Elasticsearch、Kibana資料匯出實戰
1、問題引出
以下兩個匯出問題來自Elastic中文社群。
問題1、kibana怎麼匯出查詢資料?
問題2:elasticsearch資料匯出
就像資料庫資料匯出一樣,elasticsearch可以麼?
或者找到它磁碟上存放資料的位置,拷貝出來,放到另一個es伺服器上或者轉成自己要的資料格式?
實際業務實戰中,大家或多或少的都會遇到匯入、匯出問題。根據資料來源的不同,基本可以藉助:
- 1、程式寫入
- 2、資料同步
logstash/flume/cana/es_hadoopl等來實現關係型資料庫(如:Oracle、mysql)、非關係型資料庫(如:Mongo、Redis)、大資料(Hadoop、Spark、Hive)到Elasticsearch的寫入。
而資料的匯出,一部分是業務場景需要,如:業務系統中支援檢索結果匯出為CSV、Json格式等。
還有一部分是分析資料的需求:期望藉助Kibana工具將儀表盤聚合結果匯出、不需要藉助程式儘快將滿足給定條件的結果資料匯出等。
這些快速匯出的需求,最好藉助外掛或者第三方工具實現。
本文將重點介紹Kibana/Elasticsearch高效匯出的外掛、工具集。
2、期望匯出資料格式
一般期望匯出:CSV、Json格式。
3、Kibana匯出工具
3.1 Kibana 官方匯出
步驟1:點選Kibana;步驟2:左側選擇資料,篩選欄位;步驟3:右側點選:share->csv reports。步驟4:選單欄:選擇Management->Reporting->下載。
以上是kibana6.5.4的實操截圖。
其他常見報表資料匯出:
在Dashboard的右上角點選Inspect,再點選就可以匯出對應視覺化報表對應的資料。
3.2 資料透視表pivot-kibana
Kibana的資料透視表——使用Kibana UI中的任何其他工具一樣使用資料透視表可以極大地簡化資料工作。
Flexmonster Pivot可以交叉和快速地彙總業務資料並以交叉表格式顯示結果。
地址:https://github.com/flexmonster/pivot-kibana/
篩選資料效果如下:
注意:建議7.X以上版本使用。低版本不支援。
4、Elasticsearch匯出工具
4.1 es2csv
1、簡介:用Python編寫的命令列實用程式,用於以Lucene查詢語法或查詢DSL語法查詢Elasticsearch,並將結果作為檔案匯出到CSV檔案中。es2csv 可以查詢多個索引中的批量檔案,並且只獲取選定的欄位,這可以縮短查詢執行時間。
2、地址:https://pypi.org/project/es2csv/
3、使用方法:
1es2csv -u 192.168.1.1:9200 -q '{"_source":{"excludes":["*gxn","*kex","vperxs","lpix"]},"query":{"term":{"this_topic":{"value":41}}}}' -r -i sogou_topic -o ~/export.csv複製程式碼
4、使用效果:官方最新更新支援5.X版本,實際驗證6.X版本也可以使用,匯出效率高。
5、推薦指數:五星,
Elasticsearch匯出CSV首選方案。
4.2 elasticsearch-dump
1、簡介:Elasticsearch匯入匯出工具。
支援操作包含但不限於:
1)、資料匯出
- 匯出索引、檢索結果、別名或模板為Json
- 匯出索引為gzip
- 支援匯出大檔案切割為小檔案
- 支援統一叢集不同索引間或者跨索引資料拷貝
2)、資料匯入
- 支援Json資料、S3資料匯入Elasticsearch。
2、地址:
https://github.com/taskrabbit/elasticsearch-dump
3、使用方法:
1elasticdump \
2 --input=http://production.es.com:9200/my_index \
3 --output=query.json \
4 --searchBody='{"query":{"term":{"username": "admin"}}}'複製程式碼
如上,將檢索結果匯出為json檔案。
更多匯入、匯出詳見github介紹。
4、使用效果:早期1.X版本沒有reindex操作,使用elasticdump解決跨叢集資料備份功能。效果可以。
5、推薦指數:五星。
Elasticsearch匯出json首選方案。
4.3 logstashoutputcsv
步驟1:安裝logstashoutputcsv工具:
1D:\logstash-6.5.4\bin>logstash-plugin.bat install logstash-output-csv
2Validating logstash-output-csv
3Installing logstash-output-csv
4Installation successful複製程式碼
步驟2:配置conf檔案核心的:輸入input,輸出ouput,中間處理filter都在如下的配置檔案中。
- 輸入:指定ES地址,索引,請求query語句;
- 輸出:csv輸出地址,輸出欄位列表。
1input {
2 elasticsearch {
3 hosts => "127.0.0.1:9200"
4 index => "company_infos"
5 query => '
6 {
7 "query": {
8 "match_all": {}
9 }
10 }
11 '
12 }
13}
14
15output {
16 csv {
17 # elastic field name
18 fields => ["no","name","age","company_name","department","sex"]
19 # This is path where we store output.
20 path => "D:\logstash-6.5.4\export\csv-export.csv"
21 }
22}複製程式碼
步驟3:執行匯出
1D:\\logstash-6.5.4\bin>logstash -f ../config/logstash_ouput_csv.conf
2Sending Logstash logs to D:/2.es_install/logstash-6.5.4/logs which is now configured via log4j2.properties
3[2019-08-03T23:45:00,914][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
4[2019-08-03T23:45:00,934][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.4"}
5[2019-08-03T23:45:03,473][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main","pipeline.workers"=>8,"pipeline.batch.size"=>125,"pipeline.batch.delay"=>50}
6[2019-08-03T23:45:04,241][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main",:thread=>"#<Thread:0x34b305d3 sleep>"}
7[2019-08-03T23:45:04,307][INFO ][logstash.agent ] Pipelines running {:count=>1,:running_pipelines=>[:main],:non_running_pipelines=>[]}
8[2019-08-03T23:45:04,740][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
9[2019-08-03T23:45:05,610][INFO ][logstash.outputs.csv ] Opening file {:path=>"D:/logstash-6.5.4/export/csv-export.csv"}
10[2019-08-03T23:45:07,558][INFO ][logstash.pipeline ] Pipeline has terminated {:pipeline_id=>"main",:thread=>"#<Thread:0x34b305d3 run>"}複製程式碼
地址:
https://medium.com/@shaonshaonty/export-data-from-elasticsearch-to-csv-caaef3a19b69
5、小結
根據業務場景選擇匯出資料的方式。
您的業務場景有匯出資料需求嗎?如何匯出的?歡迎留言討論。
推薦閱讀:
為什麼選擇 Spring 作為 Java 框架?
SpringBoot RocketMQ 整合使用和監控
Elasticsearch實戰 | 必要的時候,還得空間換時間!乾貨 |《從Lucene到Elasticsearch全文檢索實戰》拆解實踐
JVM面試問題系列:JVM 配置常用引數和常用 GC 調優策略
上篇好文: