elasticsearch数据长期保存的方案-创新互联

Elasticsearch的数据就存储在硬盘中。当我们的访问日志非常大时,kabana绘制图形的时候会非常缓慢。而且硬盘空间有限,不可能保存所有的日志文件。如果我们想获取站点每天的重要数据信息,比如每天的访问量并希望能图像化的形式显示该如何做呢?

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的大同网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

一、具体操作方法

获取数据之前你要知道你想要什么样的数据。比如我想获取每小时网站访问的PV,在kibana中肯定能获取到

elasticsearch数据长期保存的方案

这是在kibana中查询的每小时的pv,然后我们把他的查询json复制出来

elasticsearch数据长期保存的方案

把上述json粘贴到test文件中 然后使用如下语句即可查询上图显示的查询结果

curl -POST 'http://192.168.10.49:9200/_search' -d '@test'

{"took":940,"timed_out":false,"_shards":{"total":211,"successful":211,"failed":0},"hits"......

然后把返回的结果中的数据获取存入data数组中,这是你可以存入数据库也可以转换成json直接插入es

这种方法主要是通过elasticsearch的查询语句把数据查询出来在传参给其他地方。你输入固定的查询json它返回的json数据也是固定格式的,这样很方面就能从中挖掘出我们想要的数据!

二、php代码实现上述操作

class.php

vim access_info.php (index_name和type_name自己根据实际情况命名)

 $value){     $data['@timestamp']=$value['key_as_string'];     $data['request_PV']=$value['doc_count'];     $data['request_IP']=$value['3']['value'];     #Time为导入ES中的ID,具有唯一性。(不同tpye的可以相同)     $Time=strtotime($data['@timestamp']);     $urls="http://192.168.2.243:9200/index_name/tpye_name/$Time"       #调用函数import导入数据      import($urls,$data); } ?>

下面这个文件是存放./lib文件下的,和执行的php文件必须同名。

vim lib/access_info.txt

{   "size": 0,   "aggs": {     "2": {       "date_histogram": {         "field": "@timestamp",         "interval": "1h",           "time_zone": "Asia/Shanghai"          #保留时区获取的信息会准确但是在kibana或ganafa显示的时候会加8个小时         "min_doc_count": 1,         "extended_bounds": {           "min": start_time, #start_time会被换成具体的时间           "max": end_time         }       },       "aggs": {         "3": {           "cardinality": {             "field": "geoip.ip"           }         }       }     }   },        "highlight": {     "pre_tags": [       "@kibana-highlighted-field@"     ],     "post_tags": [       "@/kibana-highlighted-field@"     ],     "fields": {       "*": {}     },     "require_field_match": false,     "fragment_size": 2147483647   },     "query": {     "filtered": {       "query": {         "query_string": {           "query": "*",           "analyze_wildcard": true         }       },       "filter": {         "bool": {           "must": [             {               "range": {                 "@timestamp": {                   "gte": start_time,                   "lte": end_time,                   "format": "epoch_second"  #由毫秒换成秒                 }               }             }           ],           "must_not": []         }       }     }   } }

根据上面的代码,我们可以定期获取ES中的重要数据。这样获取的数据只是结果数据,不是很精确,但能反应网站的趋势,而且查询非常快速!如果想要长时间保存重要的数据,可以使用这个方法。而且数据也可以存入数据库。

以上是个人对能长期保存ES结果数据的做法,如果有更好的方法,希望能一起讨论!

elasticsearch数据长期保存的方案

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:elasticsearch数据长期保存的方案-创新互联
文章转载:http://ybzwz.com/article/ddhpej.html