Elasticsearchインデックススクリプトの自動作成

18222 ワード

Elasticsearchは1つのインデックスに保存されているデータ量が大きすぎてクエリーできません.インデックスを日単位で作成する必要があります.クエリー時にクエリーを関連付けるといいです.
esクラスタは多くのインデックスを作成し、削除できない場合があります.テスト環境またはesクラスタの初期化(すべてのデータをクリア)であれば、elasticプロセスを直接オフにし、nodesの下のすべてのデータを削除し、クラスタを再起動すれば、忘れないように記録できます.
mapping情報のエクスポート/root/index_mappingディレクトリの下
1.導出文yum install epel-release-yyum install nodejs-yyum install nodejs npm-ynpm install elasticdump-y
/root/node_modules/elasticdump/bin/elasticdump --ignore-errors=true --scrollTime=120m --bulk=true --input=http://10.30.138.62:9200/.kibana --output=mapping.json --type=mapping
2.インデックスを作成するスクリプトは次のとおりです.
#!/bin/bash

# 1.          
# 2.  3      

today_date=`date '+%Y%m%d'`
tomorrow_date=`date -d tomorrow +%Y%m%d`
#        es     ip
es_ip=10.10.33.84

#      index   index,   index    
# start log
echo "${today_date} create index start">> /data/scripts/create_index.log
for FULLPATH in `ls /root/index_mapping/*.json`;
do
    #    
    FILE=${FULLPATH##*/}
    #        
    FILE_NAME=${FILE%%.*}
    #     push:user:req     
    FILE_INDEX=`echo $FILE_NAME|sed 's/_/:/g'`
    FILE_INDEX_NAME=${FILE_INDEX%:*}
    echo "create index ${FILE_INDEX_NAME} start" >> /data/scripts/create_index.log
    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:${today_date} --type=mapping
    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:${tomorrow_date} --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170905 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170904 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170903 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170906 --type=mapping
done
# end log
echo "${today_date} create index end">> /data/scripts/create_index.log

three_daysago=`date -d '3 days ago' +%Y%m%d`
echo $three_daysago
echo "delete index ${three_daysago} start" >> /data/scripts/create_index.log
curl -XDELETE "http://10.10.33.84:9200/*${three_daysago}*"
echo "delete index ${three_daysago} end" >> /data/scripts/create_index.log

 
いくつかのインデックスの特殊な処理、改善されたスクリプト
#!/bin/bash

# 1.          
# 2.  3      

today_date=`date '+%Y%m%d'`
tomorrow_date=`date -d tomorrow +%Y%m%d`
today_month=`date '+%Y%m'`
#        es     ip
es_ip=10.10.33.84

#      index   index,   index    
# start log
echo "${today_date} create index start">> /data/scripts/create_index.log
for FULLPATH in `ls /root/index_mapping/*.json`;
do
    #    
    FILE=${FULLPATH##*/}
    #        
    FILE_NAME=${FILE%%.*}
    #     push:user:req     
    FILE_INDEX=`echo $FILE_NAME|sed 's/_/:/g'`
    FILE_INDEX_NAME=${FILE_INDEX%:*}
    echo "create index ${FILE_INDEX_NAME} start" >> /data/scripts/create_index.log
    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:${today_date} --type=mapping
    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:${tomorrow_date} --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170905 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170904 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170903 --type=mapping
#    /root/node_modules/elasticdump/bin/elasticdump --input=${FULLPATH} --output=http://${es_ip}:9200/${FILE_INDEX_NAME}:20170906 --type=mapping
done
# end log
echo "${today_date} create index end">> /data/scripts/create_index.log

three_daysago=`date -d '3 days ago' +%Y%m%d`
echo $three_daysago
echo "delete index ${three_daysago} start" >> /data/scripts/create_index.log
#     3 
curl -XDELETE "http://${es_ip}:9200/voice*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/script*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/push*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/advert*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/user*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/speech*${three_daysago}*"
curl -XDELETE "http://${es_ip}:9200/user*${three_daysago}*"
echo "delete index ${three_daysago} end" >> /data/scripts/create_index.log
# bin       7 
seven_daysago=`date -d '7 days ago' +%Y%m%d`
echo $seven_daysago
echo "delete index ${seven_daysago} start" >> /data/scripts/create_index.log
curl -XDELETE "http://${es_ip}:9200/bin*${seven_daysago}*"
echo "delete index ${seven_daysago} end" >> /data/scripts/create_index.log

curl -XPUT "http://${es_ip}:9200/*${today_month}*/_settings" -d '{"number_of_replicas": 0}'
echo "setting replication 0 ${today_date}" >> /data/scripts/create_index.log

索引構造を表示するコマンド:
[root@u04es01 ~]# curl 10.19.142.99:9200/bin:user:task:20171230/_mapping?pretty
{
  "bin:user:task:20171230" : {
    "mappings" : {
      "_default_" : {
        "properties" : {
          "appId" : {
            "type" : "keyword",
            "store" : true
          },
          "taskFlag" : {
            "type" : "integer",
            "store" : true
          },
          "taskId" : {
            "type" : "keyword",
            "store" : true
          },
          "time" : {
            "type" : "date",
            "store" : true,
            "format" : "yyyy-MM-dd HH:mm:ss.SSS.Z"
          },
          "uuid" : {
            "type" : "keyword",
            "store" : true
          }
        }
      }
    }
  }
}