免费注册
帮助文档(华北一、二)

  • 随着数据的不断写入,节点的磁盘使用率就会不断攀升,超过一定阀值就会出现不能分配分片的现象。一种解决方法就是删除部分索引数据来使集群节点的磁盘使用率保持在一种合理状态。

    删除历史数据,可以通过网络互通的云服务器 ECS或 ES服务的 Kibana 来实现。通过API可以删除通配符的一类索引或特定索引,也可以借助脚本来定时清理。

    获取集群索引信息:

     
    # Inspur 
    curl -s -XGET 'http://<host>:9200/_cat/indices?v' 
    # Kibana 
    GET /_cat/indices?v

    删除索引:

     
    # ecs 
    curl -s -XDELETE 'http://<host>:9200/index' 
    # Kibana 
    DELETE /index

    定时清理脚本(此脚本适用于logstash写入索引有时间标记的情况,其他情况可参考修改):

     
    #!/bin/bash 
    #author: inspurcloud 
    #created at 2017/08/30 19:00 
    if test ! -f "/var/log/elkDailyDel.log"; then     
      touch /var/log/elkDailyDel.log 
    fi 
    # 获取索引信息 
    # 请将下行当中的localhost改成自己elasticsearch服务对应的Ip 
    indices=$(curl -s -XGET "localhost:9200/_cat/indices?v" |grep 'logstash' |awk '{print $3}') 
    # 设置保留索引的时间线 
    thirtyDaysAgo=$(date -d "$(date +%Y%m%d) -30 days" "+%s") 
    function DelOrNot(){     
      if [ $(($1-$2)) -ge 0 ]; then         
        echo 1     
      else         
        echo 0     
      fi 
    for index in ${indices} 
    do     
    indexDate=`echo ${index##*-} |sed 's/\./-/g'`     
    indexTime=`date -d "${indexDate}" "+%s"`     
    if [ `DelOrNot ${indexTime} ${thirtyDaysAgo}` -eq 0 ]; then         
      # 索引时间在时间线之前执行删除操作         
      # 请将下行当中的localhost改成你自己elasticsearch服务对应的Ip         
      result=`curl -s -XDELETE "localhost:9200/${index}"`         
      echo "delResult is ${result}" >> /var/log/elkDailyDel.log         
      if [ `echo ${result} |grep 'acknowledged' |wc -l` -eq 1 ]; then             
        echo "${index} had already been deleted!" >> /var/log/elkDailyDel.log         
      else             
        echo "there is something wrong happend when deleted ${index}" >> /var/log/elkDailyDel.log         
      fi     
     fi 
    done 
    echo $?

文档是否已解决您的问题?

  已解决   未解决

如您有其它疑问,您也可以与我们技术专家联系探讨。

联系技术专家