1. 程式人生 > 程式設計 >乾貨 | Elasticsearch、Kibana資料匯出實戰

乾貨 | 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都在如下的配置檔案中。

  1. 輸入:指定ES地址,索引,請求query語句;
  2. 輸出: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、小結

根據業務場景選擇匯出資料的方式。

您的業務場景有匯出資料需求嗎?如何匯出的?歡迎留言討論。

推薦閱讀:

《深入理解 Java 記憶體模型》讀書筆記

面試-基礎篇

Spring Boot 2.0 遷移指南

SpringBoot使用Docker快速部署專案

為什麼選擇 Spring 作為 Java 框架?

SpringBoot RocketMQ 整合使用和監控

Spring Boot 面試的十個問題

使用 Spring Framework 時常犯的十大錯誤

SpringBoot Admin 使用指南

SpringBoot Kafka 整合使用

SpringBoot RabbitMQ 整合使用

Elasticsearch索引增量統計及定時郵件實現

Elasticsearch實戰 | 必要的時候,還得空間換時間!乾貨 |《從Lucene到Elasticsearch全文檢索實戰》拆解實踐

JVM面試問題系列:JVM 配置常用引數和常用 GC 調優策略

Apache Flink 是如何管理好記憶體的?

上篇好文:

ELK 實時日誌分析平臺環境搭建