干貨 | 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、使用方法:

es2csv -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
1
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、使用方法:

elasticdump \
--input=http://production.es.com:9200/my_index \
--output=query.json \
--searchBody='{"query":{"term":{"username": "admin"}}}'
1
2
3
4
如上,將檢索結果導出為json文件。
更多導入、導出詳見github介紹。
4、使用效果:
早期1.X版本沒有reindex操作,使用elasticdump解決跨集群數據備份功能。效果可以。
5、推薦指數:
五星。
Elasticsearch導出json首選方案。

4.3 logstash_output_csv
步驟1:安裝logstash_output_csv工具:

D:\ogstash-6.5.4\bin>logstash-plugin.bat install logstash-output-csv
Validating logstash-output-csv
Installing logstash-output-csv
Installation successful
1
2
3
4
步驟2:配置conf文件
核心的:輸入input,輸出ouput,中間處理filter都在如下的配置文件中。
輸入:指定ES地址,索引,請求query語句;
輸出:csv輸出地址,輸出字段列表。

input {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "company_infos"
query => '
{
"query": {
"match_all": {}
}
}
'
}
}

output {
csv {
# elastic field name
fields => ["no", "name", "age", "company_name", "department", "sex"]
# This is path where we store output.
path => "D:\logstash-6.5.4\export\csv-export.csv"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
步驟3:執行導出

D:\\logstash-6.5.4\bin>logstash -f ../config/logstash_ouput_csv.conf
Sending Logstash logs to D:/2.es_install/logstash-6.5.4/logs which is now configured via log4j2.properties
[2019-08-03T23:45:00,914][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-08-03T23:45:00,934][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.4"}
[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}
[2019-08-03T23:45:04,241][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x34b305d3 sleep>"}
[2019-08-03T23:45:04,307][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-08-03T23:45:04,740][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
[2019-08-03T23:45:05,610][INFO ][logstash.outputs.csv ] Opening file {:path=>"D:/logstash-6.5.4/export/csv-export.csv"}
[2019-08-03T23:45:07,558][INFO ][logstash.pipeline ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x34b305d3 run>"}
1
2
3
4
5
6
7
8
9
10

地址:https://medium.com/@shaonshaonty/export-data-from-elasticsearch-to-csv-caaef3a19b69

5、小結
根據業務場景選擇導出數據的方式。

您的業務場景有導出數據需求嗎? 如何導出的,歡迎留言討論。
————————————————
版權聲明:本文為CSDN博主「銘毅天下」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wojiushiwo987/java/article/details/98397572


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM